Skip to content

Commit b3a5907

Browse files
committed
fix DeleteObjectTagging on current object
1 parent 0809063 commit b3a5907

File tree

4 files changed

+49
-15
lines changed

4 files changed

+49
-15
lines changed

localstack-core/localstack/services/s3/provider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3298,7 +3298,7 @@ def delete_object_tagging(
32983298

32993299
s3_object = s3_bucket.get_object(key=key, version_id=version_id, http_method="DELETE")
33003300

3301-
store.TAGS.tags.pop(get_unique_key_id(bucket, key, version_id), None)
3301+
store.TAGS.tags.pop(get_unique_key_id(bucket, key, s3_object.version_id), None)
33023302
response = DeleteObjectTaggingOutput()
33033303
if s3_object.version_id:
33043304
response["VersionId"] = s3_object.version_id

tests/aws/services/s3/test_s3_api.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,32 +1613,44 @@ def test_object_tagging_versioned(self, s3_bucket, aws_client, snapshot):
16131613
tag_set_2 = {"TagSet": [{"Key": "tag3", "Value": "tag3"}]}
16141614

16151615
# test without specifying a VersionId
1616-
put_bucket_tags = aws_client.s3.put_object_tagging(
1616+
put_object_tags = aws_client.s3.put_object_tagging(
16171617
Bucket=s3_bucket, Key=object_key, Tagging=tag_set_2
16181618
)
1619-
snapshot.match("put-object-tags-current-version", put_bucket_tags)
1620-
assert put_bucket_tags["VersionId"] == version_id_2
1619+
snapshot.match("put-object-tags-current-version", put_object_tags)
1620+
assert put_object_tags["VersionId"] == version_id_2
16211621

1622-
get_bucket_tags = aws_client.s3.get_object_tagging(Bucket=s3_bucket, Key=object_key)
1623-
snapshot.match("get-object-tags-current-version", get_bucket_tags)
1622+
put_object_tags = aws_client.s3.get_object_tagging(Bucket=s3_bucket, Key=object_key)
1623+
snapshot.match("get-object-tags-current-version", put_object_tags)
16241624

1625-
get_bucket_tags = aws_client.s3.get_object_tagging(
1625+
put_object_tags = aws_client.s3.get_object_tagging(
16261626
Bucket=s3_bucket, Key=object_key, VersionId=version_id_1
16271627
)
1628-
snapshot.match("get-object-tags-previous-version", get_bucket_tags)
1628+
snapshot.match("get-object-tags-previous-version", put_object_tags)
16291629

16301630
tag_set_2 = {"TagSet": [{"Key": "tag1", "Value": "tag1"}]}
16311631
# test by specifying a VersionId to Version1
1632-
put_bucket_tags = aws_client.s3.put_object_tagging(
1632+
put_object_tags = aws_client.s3.put_object_tagging(
16331633
Bucket=s3_bucket, Key=object_key, VersionId=version_id_1, Tagging=tag_set_2
16341634
)
1635-
snapshot.match("put-object-tags-previous-version", put_bucket_tags)
1636-
assert put_bucket_tags["VersionId"] == version_id_1
1635+
snapshot.match("put-object-tags-previous-version", put_object_tags)
1636+
assert put_object_tags["VersionId"] == version_id_1
16371637

1638-
get_bucket_tags = aws_client.s3.get_object_tagging(
1638+
get_object_tags = aws_client.s3.get_object_tagging(
16391639
Bucket=s3_bucket, Key=object_key, VersionId=version_id_1
16401640
)
1641-
snapshot.match("get-object-tags-previous-version-again", get_bucket_tags)
1641+
snapshot.match("get-object-tags-previous-version-again", get_object_tags)
1642+
1643+
# delete tagging on current object
1644+
aws_client.s3.delete_object_tagging(Bucket=s3_bucket, Key=object_key)
1645+
get_object_tags = aws_client.s3.get_object_tagging(Bucket=s3_bucket, Key=object_key)
1646+
snapshot.match("get-object-tags-deleted-current", get_object_tags)
1647+
1648+
# delete object tagging on previous version too
1649+
aws_client.s3.delete_object_tagging(
1650+
Bucket=s3_bucket, Key=object_key, VersionId=version_id_1
1651+
)
1652+
get_object_tags = aws_client.s3.get_object_tagging(Bucket=s3_bucket, Key=object_key)
1653+
snapshot.match("get-object-tags-previous-version-deleted", get_object_tags)
16421654

16431655
# Put a DeleteMarker on top of the stack
16441656
delete_current = aws_client.s3.delete_object(Bucket=s3_bucket, Key=object_key)

tests/aws/services/s3/test_s3_api.snapshot.json

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2007,7 +2007,7 @@
20072007
}
20082008
},
20092009
"tests/aws/services/s3/test_s3_api.py::TestS3BucketObjectTagging::test_object_tagging_versioned": {
2010-
"recorded-date": "21-01-2025, 18:11:16",
2010+
"recorded-date": "19-09-2025, 23:28:45",
20112011
"recorded-content": {
20122012
"put-obj-0": {
20132013
"ChecksumCRC32": "XCKz9A==",
@@ -2084,6 +2084,22 @@
20842084
"HTTPStatusCode": 200
20852085
}
20862086
},
2087+
"get-object-tags-deleted-current": {
2088+
"TagSet": [],
2089+
"VersionId": "<version-id:2>",
2090+
"ResponseMetadata": {
2091+
"HTTPHeaders": {},
2092+
"HTTPStatusCode": 200
2093+
}
2094+
},
2095+
"get-object-tags-previous-version-deleted": {
2096+
"TagSet": [],
2097+
"VersionId": "<version-id:2>",
2098+
"ResponseMetadata": {
2099+
"HTTPHeaders": {},
2100+
"HTTPStatusCode": 200
2101+
}
2102+
},
20872103
"put-delete-marker": {
20882104
"DeleteMarker": true,
20892105
"VersionId": "<version-id:3>",

tests/aws/services/s3/test_s3_api.validation.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,13 @@
6363
}
6464
},
6565
"tests/aws/services/s3/test_s3_api.py::TestS3BucketObjectTagging::test_object_tagging_versioned": {
66-
"last_validated_date": "2025-01-21T18:11:16+00:00"
66+
"last_validated_date": "2025-09-19T23:28:46+00:00",
67+
"durations_in_seconds": {
68+
"setup": 1.08,
69+
"call": 2.55,
70+
"teardown": 1.07,
71+
"total": 4.7
72+
}
6773
},
6874
"tests/aws/services/s3/test_s3_api.py::TestS3BucketObjectTagging::test_object_tags_delete_or_overwrite_object": {
6975
"last_validated_date": "2025-01-21T18:11:22+00:00"

0 commit comments

Comments
 (0)