From 7167e09ca5f22c6901292ed8a445c300f60612ca Mon Sep 17 00:00:00 2001 From: Mike Grima Date: Fri, 22 Sep 2017 13:35:00 -0700 Subject: [PATCH] Fixed bug in S3 put_bucket_tagging. Closes #1181. --- moto/s3/responses.py | 9 +++++++-- tests/test_s3/test_s3.py | 13 +++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/moto/s3/responses.py b/moto/s3/responses.py index d340d16e4..b04cb9496 100755 --- a/moto/s3/responses.py +++ b/moto/s3/responses.py @@ -780,8 +780,13 @@ class ResponseObject(_TemplateEnvironmentMixin): tags = [] # Optional if no tags are being sent: if parsed_xml['Tagging'].get('TagSet'): - for tag in parsed_xml['Tagging']['TagSet']['Tag']: - tags.append(FakeTag(tag['Key'], tag['Value'])) + # If there is only 1 tag, then it's not a list: + if not isinstance(parsed_xml['Tagging']['TagSet']['Tag'], list): + tags.append(FakeTag(parsed_xml['Tagging']['TagSet']['Tag']['Key'], + parsed_xml['Tagging']['TagSet']['Tag']['Value'])) + else: + for tag in parsed_xml['Tagging']['TagSet']['Tag']: + tags.append(FakeTag(tag['Key'], tag['Value'])) tag_set = FakeTagSet(tags) tagging = FakeTagging(tag_set) diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index cb40edb33..e4cb499b9 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -1441,6 +1441,19 @@ def test_boto3_put_bucket_tagging(): bucket_name = "mybucket" s3.create_bucket(Bucket=bucket_name) + # With 1 tag: + resp = s3.put_bucket_tagging(Bucket=bucket_name, + Tagging={ + "TagSet": [ + { + "Key": "TagOne", + "Value": "ValueOne" + } + ] + }) + resp['ResponseMetadata']['HTTPStatusCode'].should.equal(200) + + # With multiple tags: resp = s3.put_bucket_tagging(Bucket=bucket_name, Tagging={ "TagSet": [