summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel G. Taylor <dan@programmer-art.org>2014-09-02 10:34:59 -0700
committerDaniel G. Taylor <dan@programmer-art.org>2014-09-02 10:34:59 -0700
commit069d04b96226034bea96f9ee4c56ce985e9e3d2c (patch)
tree01e40c4e8966f936099778735f4ef1704377ffa9
parent3ba380f0e2098d7d475225e3b75deb3cb4b59384 (diff)
parent258986e20a5143cdaab25ac1a9173f1648f97ac2 (diff)
downloadboto-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.py4
-rw-r--r--tests/unit/s3/test_bucket.py6
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')