diff options
author | Daniel G. Taylor <dan@programmer-art.org> | 2014-09-02 10:34:59 -0700 |
---|---|---|
committer | Daniel G. Taylor <dan@programmer-art.org> | 2014-09-02 10:34:59 -0700 |
commit | 069d04b96226034bea96f9ee4c56ce985e9e3d2c (patch) | |
tree | 01e40c4e8966f936099778735f4ef1704377ffa9 | |
parent | 3ba380f0e2098d7d475225e3b75deb3cb4b59384 (diff) | |
parent | 258986e20a5143cdaab25ac1a9173f1648f97ac2 (diff) | |
download | boto-069d04b96226034bea96f9ee4c56ce985e9e3d2c.tar.gz |
Merge pull request #2559 from kouk/nonasciiqueryargs
Support non-ascii unicode strings in _get_all_query_args. Fixes: #2558, #2559.
-rw-r--r-- | boto/s3/bucket.py | 4 | ||||
-rw-r--r-- | tests/unit/s3/test_bucket.py | 6 |
2 files changed, 7 insertions, 3 deletions
diff --git a/boto/s3/bucket.py b/boto/s3/bucket.py index 34514078..504f24f9 100644 --- a/boto/s3/bucket.py +++ b/boto/s3/bucket.py @@ -377,7 +377,9 @@ class Bucket(object): key = 'max-keys' if not isinstance(value, six.string_types + (six.binary_type,)): value = six.text_type(value) - if value != '': + if not isinstance(value, six.binary_type): + value = value.encode('utf-8') + if value: pairs.append(u'%s=%s' % ( urllib.parse.quote(key), urllib.parse.quote(value) diff --git a/tests/unit/s3/test_bucket.py b/tests/unit/s3/test_bucket.py index 3dc5f6e3..72e10ed2 100644 --- a/tests/unit/s3/test_bucket.py +++ b/tests/unit/s3/test_bucket.py @@ -92,6 +92,8 @@ class TestS3Bucket(AWSMockServiceTestCase): 'foo': 'true', # Ensure Unicode chars get encoded. 'bar': '☃', + # Ensure unicode strings with non-ascii characters get encoded + 'baz': u'χ', # Underscores are bad, m'kay? 'some_other': 'thing', # Change the variant of ``max-keys``. @@ -104,14 +106,14 @@ class TestS3Bucket(AWSMockServiceTestCase): qa = bukket._get_all_query_args(multiple_params) self.assertEqual( qa, - 'bar=%E2%98%83&foo=true&max-keys=0&some-other=thing' + 'bar=%E2%98%83&baz=%CF%87&foo=true&max-keys=0&some-other=thing' ) # Multiple params with initial. qa = bukket._get_all_query_args(multiple_params, 'initial=1') self.assertEqual( qa, - 'initial=1&bar=%E2%98%83&foo=true&max-keys=0&some-other=thing' + 'initial=1&bar=%E2%98%83&baz=%CF%87&foo=true&max-keys=0&some-other=thing' ) @patch.object(S3Connection, 'head_bucket') |