Skip to content

Commit d8b2739

Browse files
refactor: addressing Heitor's feedback
1 parent f927617 commit d8b2739

File tree

4 files changed

+49
-3
lines changed

4 files changed

+49
-3
lines changed

aws_lambda_powertools/utilities/data_classes/active_mq_event.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Iterator, Optional
1+
from typing import Any, Dict, Iterator, Optional
22

33
from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
44
from aws_lambda_powertools.utilities.data_classes.shared_functions import base64_decode
@@ -112,6 +112,10 @@ class ActiveMQEvent(DictWrapper):
112112
- https://aws.amazon.com/blogs/compute/using-amazon-mq-as-an-event-source-for-aws-lambda/
113113
"""
114114

115+
def __init__(self, data: Dict[str, Any]):
116+
super().__init__(data)
117+
self._messages = (ActiveMQMessage(record) for record in self["messages"])
118+
115119
@property
116120
def event_source(self) -> str:
117121
return self["eventSource"]
@@ -128,4 +132,4 @@ def messages(self) -> Iterator[ActiveMQMessage]:
128132

129133
@property
130134
def message(self) -> ActiveMQMessage:
131-
return next(self.messages)
135+
return next(self._messages)

aws_lambda_powertools/utilities/data_classes/kafka_event.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ class KafkaEvent(DictWrapper):
8787
- https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html
8888
"""
8989

90+
def __init__(self, data: Dict[str, Any]):
91+
super().__init__(data)
92+
for chunk in self["records"].values():
93+
self._records = (KafkaEventRecord(record) for record in chunk)
94+
9095
@property
9196
def event_source(self) -> str:
9297
"""The AWS service from which the Kafka event record originated."""
@@ -117,4 +122,4 @@ def records(self) -> Iterator[KafkaEventRecord]:
117122
@property
118123
def record(self) -> KafkaEventRecord:
119124
"""The next Kafka record."""
120-
return next(self.records)
125+
return next(self._records)

tests/unit/data_classes/test_active_mq_event.py

+19
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pytest
2+
13
from aws_lambda_powertools.utilities.data_classes.active_mq_event import (
24
ActiveMQEvent,
35
ActiveMQMessage,
@@ -37,3 +39,20 @@ def test_active_mq_event():
3739
message = messages[1]
3840
assert message.json_data["timeout"] == 0
3941
assert message.json_data["data"] == "CZrmf0Gw8Ov4bqLQxD4E"
42+
43+
assert parsed_event.message == messages[1]
44+
assert parsed_event.message == messages[2]
45+
46+
47+
def test_activemq_message_property_with_stopiteration_error():
48+
# GIVEN a kafka event with one record
49+
raw_event = load_event("activeMQEvent.json")
50+
parsed_event = ActiveMQEvent(raw_event)
51+
52+
# WHEN calling record property four times
53+
# THEN raise StopIteration
54+
with pytest.raises(StopIteration):
55+
assert parsed_event.message.message_id is not None
56+
assert parsed_event.message.message_type is not None
57+
assert parsed_event.message.data is not None
58+
assert parsed_event.message.decoded_data is not None

tests/unit/data_classes/test_kafka_event.py

+18
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pytest
2+
13
from aws_lambda_powertools.utilities.data_classes import KafkaEvent
24
from tests.functional.utils import load_event
35

@@ -31,6 +33,8 @@ def test_kafka_msk_event():
3133
assert record.decoded_headers == {"headerKey": b"headerValue"}
3234
assert record.get_header_value("HeaderKey", case_sensitive=False) == b"headerValue"
3335

36+
assert parsed_event.record == records[0]
37+
3438

3539
def test_kafka_self_managed_event():
3640
raw_event = load_event("kafkaEventSelfManaged.json")
@@ -59,3 +63,17 @@ def test_kafka_self_managed_event():
5963
assert record.json_value == {"key": "value"}
6064
assert record.decoded_headers == {"headerKey": b"headerValue"}
6165
assert record.get_header_value("HeaderKey", case_sensitive=False) == b"headerValue"
66+
67+
assert parsed_event.record == records[0]
68+
69+
70+
def test_kafka_record_property_with_stopiteration_error():
71+
# GIVEN a kafka event with one record
72+
raw_event = load_event("kafkaEventMsk.json")
73+
parsed_event = KafkaEvent(raw_event)
74+
75+
# WHEN calling record property twice
76+
# THEN raise StopIteration
77+
with pytest.raises(StopIteration):
78+
assert parsed_event.record.topic is not None
79+
assert parsed_event.record.partition is not None

0 commit comments

Comments
 (0)