Skip to content

Commit 2b6f605

Browse files
fix(event_source): fix regression when working with zero numbers in DynamoDBStreamEvent (#4932)
Fix regression when working with ZERO
1 parent 599dceb commit 2b6f605

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

aws_lambda_powertools/utilities/data_classes/dynamo_db_stream_event.py

+5
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,12 @@ def _deserialize_bool(self, value: bool) -> bool:
7373
return value
7474

7575
def _deserialize_n(self, value: str) -> Decimal:
76+
# value is None or "."? It's zero
77+
# then return early
7678
value = value.lstrip("0")
79+
if not value or value == ".":
80+
return DYNAMODB_CONTEXT.create_decimal(0)
81+
7782
if len(value) > 38:
7883
# See: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes.Number
7984
# Calculate the number of trailing zeros after the 38th character

tests/unit/data_classes/required_dependencies/test_dynamo_db_stream_event.py

+16
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,22 @@ def test_dynamodb_stream_record_deserialization_large_int_without_trailing_zeros
7575
}
7676

7777

78+
def test_dynamodb_stream_record_deserialization_zero_value():
79+
80+
data = {
81+
"Keys": {"key1": {"attr1": "value1"}},
82+
"NewImage": {
83+
"Name": {"S": "Joe"},
84+
"Age": {"N": "0"},
85+
},
86+
}
87+
record = StreamRecord(data)
88+
assert record.new_image == {
89+
"Name": "Joe",
90+
"Age": DECIMAL_CONTEXT.create_decimal("0"),
91+
}
92+
93+
7894
def test_dynamodb_stream_record_deserialization():
7995
byte_list = [s.encode("utf-8") for s in ["item1", "item2"]]
8096
decimal_context = Context(

0 commit comments

Comments
 (0)