boto/botocore — pull request #340 by jamesls (2014-10-03 20:08:34+00:00)
Title: Switch to a normalized (v2) version of the models

This changes the internal model format used by botocore from the denormalized
models to a normalized format. This required a number of changes to botocore's
interals, particularly around parameter serialization and request parsing.

A brief summary of these changes include:

* Move all parsing logic to a single module
* Move all serialization logic to a single module.
* Add an abstraction over the JSON models (model.py). This allows us
to compute some of the customizations at runtime instead of needing
model translations.
* Consume this model format directly. There is no more need for
`scripts/buildall`
* Move param validation to a separate module. This isolates that
logic into a single location
* Split the botocore params into the various components (models,
validation, request serialization, response parsing).
* This removed the need for payload objects as well
* Fixed numerous response parsing bugs
* Fixed a serialization bug related to XML map types
* Add support for recursive shapes
* Add support for setting signature version via _endpoints.json
* Add an alternate interface of client objects.
* Remove the need for protocol specific endpoints.
* Normalize response dicts. They will always have a populated
ResponseMetadata key that contains at _least_ a RequestId.
* Normalize errors. There's now only a single error, and the error
only code/message is always populated
* Param validation runs through all the validation rules and gives a report
on all validation errors. Previously we'd raise an exception as soon as we
hit a validation error so we'd only get the first validation error.

Eventually I'd like to move everything over to client objects. For now
both interfaces exist. You can use the Operation.call() or
session.create_client().

Note that there will need to be corresponding changes to the AWS CLI
as well (PR being sent for that shortly).