Skip to content

Commit bfbdcaa

Browse files
committed
fix: use getters for optional etag and size; default to sane defaults when possible
1 parent 68712d5 commit bfbdcaa

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

aws_lambda_powertools/utilities/data_classes/s3_event.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ def key(self) -> str:
3232
return unquote_plus(self["key"])
3333

3434
@property
35-
def size(self) -> str:
36-
"""Object size"""
37-
return self["size"]
35+
def size(self) -> Optional[int]:
36+
"""Object size. Object deletion event doesn't contain size."""
37+
return self.get("size")
3838

3939
@property
40-
def etag(self) -> Optional[str]:
41-
"""Object etag"""
42-
return self.get("etag")
40+
def etag(self) -> str:
41+
"""Object etag. Object deletion event doesn't contain etag; we default to empty string"""
42+
return self.get("etag", "")
4343

4444
@property
4545
def version_id(self) -> str:
@@ -178,8 +178,8 @@ def size(self) -> int:
178178

179179
@property
180180
def etag(self) -> str:
181-
"""object eTag"""
182-
return self["s3"]["object"]["eTag"]
181+
"""Object eTag. Object deletion event doesn't contain eTag; we default to empty string"""
182+
return self["s3"]["object"].get("eTag", "")
183183

184184
@property
185185
def version_id(self) -> Optional[str]:

tests/unit/data_classes/test_s3_eventbridge_notification.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ def test_s3_eventbridge_notification_detail_parsed(raw_event: Dict):
2626
assert parsed_event.detail.deletion_type == raw_event["detail"].get("deletion-type")
2727
assert parsed_event.detail.destination_access_tier == raw_event["detail"].get("destination-access-tier")
2828
assert parsed_event.detail.destination_storage_class == raw_event["detail"].get("destination-storage-class")
29-
assert parsed_event.detail.object.etag == raw_event["detail"]["object"]["etag"]
29+
assert parsed_event.detail.object.etag == raw_event["detail"]["object"].get("etag", "")
3030
assert parsed_event.detail.object.key == raw_event["detail"]["object"]["key"]
3131
assert parsed_event.detail.object.sequencer == raw_event["detail"]["object"]["sequencer"]
32-
assert parsed_event.detail.object.size == raw_event["detail"]["object"]["size"]
32+
assert parsed_event.detail.object.size == raw_event["detail"]["object"].get("size")
3333
assert parsed_event.detail.reason == raw_event["detail"].get("reason")
3434
assert parsed_event.detail.version == raw_event["detail"].get("version")
3535
assert parsed_event.detail.request_id == raw_event["detail"]["request-id"]

tests/unit/parser/test_s3_notification.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ def test_s3_eventbridge_notification_object_deleted_event():
5252
assert model.detail.version == raw_event["detail"]["version"]
5353
assert model.detail.bucket.name == raw_event["detail"]["bucket"]["name"]
5454
assert model.detail.object.key == raw_event["detail"]["object"]["key"]
55-
assert model.detail.object.size == raw_event["detail"]["object"]["size"]
56-
assert model.detail.object.etag == raw_event["detail"]["object"]["etag"]
55+
assert model.detail.object.size == raw_event["detail"]["object"].get("size")
56+
assert model.detail.object.etag == raw_event["detail"]["object"].get("etag")
5757
assert model.detail.object.sequencer == raw_event["detail"]["object"]["sequencer"]
5858
assert model.detail.request_id == raw_event["detail"]["request-id"]
5959
assert model.detail.requester == raw_event["detail"]["requester"]

0 commit comments

Comments
 (0)