Skip to content

Commit ca73ecd

Browse files
author
Ran Isenberg
committed
add positive int and fix develop conflict
1 parent 114caa1 commit ca73ecd

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

aws_lambda_powertools/utilities/parser/models/__init__.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,22 @@
2626
DynamoDBStreamRecordModel,
2727
)
2828
from .event_bridge import EventBridgeModel
29-
from .kafka import KafkaBaseEventModel, KafkaMskEventModel, KafkaRecordModel, KafkaSelfManagedEventModel
30-
from .kinesis import KinesisDataStreamModel, KinesisDataStreamRecord, KinesisDataStreamRecordPayload
31-
from .kinesis_firehose import KinesisFirehoseModel, KinesisFirehoseRecord, KinesisFirehoseRecordMetadata
29+
from .kafka import (
30+
KafkaBaseEventModel,
31+
KafkaMskEventModel,
32+
KafkaRecordModel,
33+
KafkaSelfManagedEventModel,
34+
)
35+
from .kinesis import (
36+
KinesisDataStreamModel,
37+
KinesisDataStreamRecord,
38+
KinesisDataStreamRecordPayload,
39+
)
40+
from .kinesis_firehose import (
41+
KinesisFirehoseModel,
42+
KinesisFirehoseRecord,
43+
KinesisFirehoseRecordMetadata,
44+
)
3245
from .lambda_function_url import LambdaFunctionUrlModel
3346
from .s3 import S3Model, S3RecordModel
3447
from .s3_object_event import (

aws_lambda_powertools/utilities/parser/models/kinesis_firehose.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
from typing import List, Optional, Type, Union
22

3-
from pydantic import BaseModel, validator
3+
from pydantic import BaseModel, PositiveInt, validator
44

55
from aws_lambda_powertools.shared.functions import base64_decode
66

77

88
class KinesisFirehoseRecordMetadata(BaseModel):
99
shardId: str
1010
partitionKey: str
11-
approximateArrivalTimestamp: int
11+
approximateArrivalTimestamp: PositiveInt
1212
sequenceNumber: str
1313
subsequenceNumber: str
1414

1515

1616
class KinesisFirehoseRecord(BaseModel):
1717
data: Union[bytes, Type[BaseModel]] # base64 encoded str is parsed into bytes
1818
recordId: str
19-
approximateArrivalTimestamp: int
19+
approximateArrivalTimestamp: PositiveInt
2020
kinesisRecordMetadata: Optional[KinesisFirehoseRecordMetadata]
2121

2222
@validator("data", pre=True, allow_reuse=True)

tests/functional/parser/test_kinesis_firehose.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
import pytest
44

5-
from aws_lambda_powertools.utilities.parser import ValidationError, envelopes, event_parser
5+
from aws_lambda_powertools.utilities.parser import (
6+
ValidationError,
7+
envelopes,
8+
event_parser,
9+
)
610
from aws_lambda_powertools.utilities.parser.models import (
711
KinesisFirehoseModel,
812
KinesisFirehoseRecord,
@@ -94,3 +98,17 @@ def test_kinesis_trigger_bad_base64_event():
9498
event_dict["records"][0]["data"] = {"bad base64"}
9599
with pytest.raises(ValidationError):
96100
handle_firehose_no_envelope_kinesis(event_dict, LambdaContext())
101+
102+
103+
def test_kinesis_trigger_bad_timestamp_event():
104+
event_dict = load_event("kinesisFirehoseKinesisEvent.json")
105+
event_dict["records"][0]["approximateArrivalTimestamp"] = -1
106+
with pytest.raises(ValidationError):
107+
handle_firehose_no_envelope_kinesis(event_dict, LambdaContext())
108+
109+
110+
def test_kinesis_trigger_bad_metadata_timestamp_event():
111+
event_dict = load_event("kinesisFirehoseKinesisEvent.json")
112+
event_dict["records"][0]["kinesisRecordMetadata"]["approximateArrivalTimestamp"] = "-1"
113+
with pytest.raises(ValidationError):
114+
handle_firehose_no_envelope_kinesis(event_dict, LambdaContext())

0 commit comments

Comments
 (0)