multi_delete: make content-md5 mandatory

The AWS S3 document says that the content-md5 header must be used for the
Multi-Object Delete operation.  This patch add a change to follow the
specification.

Change-Id: I0b289a0302e6465a23acb0acbfa1636b1ef91e5b
cfg: convert types automatically based on default values

The type of the config value is string by default and we need to cast it to the
appropriate type - it is error-prone.

The swift3 middleware actually knows the correct config type from the default
value in swift3.cfg and there is no need to convert it manually.

Change-Id: I28761ed12c3bdd85cb2a80048d2abc0dd23222b3
Merge "multi_delete: make content-md5 mandatory"
Remove unused variable

Change-Id: Ie6b8144346ffc8861affa5c5708f5702b9b7e5c1
Merge "cfg: convert types automatically based on default values"
Merge "Remove unused variable"
cfg: allow attribute access

It is tedious to bracket and quote config names.  This patch allows us to
access config values with attributes.

Change-Id: Ia5cec9a3438c808460da6a56830464ac50cfffb9
request: raise InvalidDigest for non-base64-alphabet CONTENT_MD5

The python base64 decode discards non-base64-alphabet characters.  AWS S3
returns InvalidDigest in such cases.

Change-Id: I6f1b1f94caf0417deec1ff08508644f246413745
Merge "cfg: allow attribute access"
test/unit: allow running test directly

Change-Id: Ib819ce7051f2152f8cca89ac28196209a56dd0c1
tox: update pep8 parameters based on the latest Swift

This also fixes newly detected style errors.

Change-Id: Ib0c2241986415ec0246611c2155dc1d773399b3a
Make the swift3 logger global

Unless we use multiple log_routes, making the logger global is simpler.

Change-Id: I1fcce3b630371def7169a0e4b5f862f555c61e0f
test/unit: move swift3.etree test to test_etree.py

Change-Id: Ia6ddd36345d0d1b1135cc0eee00f0b1d7e189291
Merge "test/unit: allow running test directly"
Merge "Make the swift3 logger global"
Merge "test/unit: move swift3.etree test to test_etree.py"
etree: handle invalid xml

Change-Id: I061e2f2db93b81a8a59a7a968bb59b58bce91717
multi_upload: preliminary support for S3 multi part upload

This patch adds a basic support for S3 Multipart Upload APIs based on Swift3
static large objects.  The s3multi middleware is no longer necessary.

There are still many TODO items.  They are commented in the source code.

Change-Id: Icda01dc31de43e6fe36144921fa1bd276b76e5ea
Unfold add_canonical_user()

The helper hides the output XML structure.  Unfolding it makes the code a bit
easier to read.

Change-Id: I028f17d469c4d21e8ba52924dcc1be06108c0dd9
Move x-amz-acl header handling into acl.py

This also adds support for the x-amz-acl header in ?acl requests.

Change-Id: I6e2dd6671bce3913a61f8f59f6d214be7eae0b86