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
multi_delete: limit the maximum number of objects

This introduces a config value to limit the maximum number of objects we can
delete with a multi delete request.  The default value is same as S3's one.

Change-Id: I77d404e43ba8532cbf81c680dcb82ec69b8f31cc
bucket: return delimiter only when it is specified in query

This is AWS S3's behavior.

Change-Id: Iede394f32c27ac1d8056aa8d64fc3c8626e84226
Merge "multi_delete: limit the maximum number of objects"
Merge "Unfold add_canonical_user()"
Merge "Move x-amz-acl header handling into acl.py"
Merge "bucket: return delimiter only when it is specified in query"