Fix copying S3 objects with question marks in keys

PR #2062 fixes copy for unicode keys. However, the change breaks keys
with question marks. Here is an alternative fix that works for both
emojis and question marks.

I notice this when running the test suite of aiobotocore. One of the
tests [1] is broken with moto >= 1.3.8.

[1] https://github.com/aio-libs/aiobotocore/blob/0.10.3/tests/test_basic_s3.py#L314-L329
This commit is contained in:
Chih-Hsuan Yen 2019-09-21 09:47:21 +08:00
commit 6c0a2dc374
No known key found for this signature in database
GPG key ID: 0453A6CA23C56315
2 changed files with 10 additions and 6 deletions

View file

@ -421,18 +421,22 @@ def test_copy_key():
"new-key").get_contents_as_string().should.equal(b"some value")
@parameterized([
("the-unicode-💩-key",),
("key-with?question-mark",),
])
@mock_s3_deprecated
def test_copy_key_with_unicode():
def test_copy_key_with_special_chars(key_name):
conn = boto.connect_s3('the_key', 'the_secret')
bucket = conn.create_bucket("foobar")
key = Key(bucket)
key.key = "the-unicode-💩-key"
key.key = key_name
key.set_contents_from_string("some value")
bucket.copy_key('new-key', 'foobar', 'the-unicode-💩-key')
bucket.copy_key('new-key', 'foobar', key_name)
bucket.get_key(
"the-unicode-💩-key").get_contents_as_string().should.equal(b"some value")
key_name).get_contents_as_string().should.equal(b"some value")
bucket.get_key(
"new-key").get_contents_as_string().should.equal(b"some value")