Skip to content

Commit 757de45

Browse files
committed
FIX: Mark size and eTag as optional attributes
Fixes ObjectRemoved API event, as they don't include these attributes. #1637 Signed-off-by: Diego Barreiro <[email protected]>
1 parent 4bee8cb commit 757de45

File tree

1 file changed

+12
-3
lines changed
  • aws_lambda_powertools/utilities/parser/models

1 file changed

+12
-3
lines changed

aws_lambda_powertools/utilities/parser/models/s3.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import List, Optional
33

4-
from pydantic import BaseModel
4+
from pydantic import BaseModel, root_validator
55
from pydantic.fields import Field
66
from pydantic.networks import IPvAnyNetwork
77
from pydantic.types import NonNegativeFloat
@@ -43,8 +43,8 @@ class S3Bucket(BaseModel):
4343

4444
class S3Object(BaseModel):
4545
key: str
46-
size: NonNegativeFloat
47-
eTag: str
46+
size: Optional[NonNegativeFloat]
47+
eTag: Optional[str]
4848
sequencer: str
4949
versionId: Optional[str]
5050

@@ -68,6 +68,15 @@ class S3RecordModel(BaseModel):
6868
s3: S3Message
6969
glacierEventData: Optional[S3EventRecordGlacierEventData]
7070

71+
@root_validator
72+
def validate_s3_object(cls, values):
73+
event_name = values.get("eventName")
74+
s3_object = values.get("s3").object
75+
if "ObjectRemoved" not in event_name:
76+
if s3_object.size is None or s3_object.eTag is None:
77+
raise ValueError("S3Object.size and S3Object.eTag are required for non-ObjectRemoved events")
78+
return values
79+
7180

7281
class S3Model(BaseModel):
7382
Records: List[S3RecordModel]

0 commit comments

Comments
 (0)