Skip to content

Commit ebca16c

Browse files
author
Amin Farjadi
committed
fix: EventBridgeEvent data class
1 parent 6b91f70 commit ebca16c

3 files changed

Lines changed: 38 additions & 13 deletions

File tree

aws_lambda_powertools/utilities/data_classes/event_bridge_event.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,41 @@ class EventBridgeEvent(DictWrapper):
1414
"""
1515

1616
@property
17-
def get_id(self) -> str:
17+
def get_id(self) -> str | None:
1818
"""A unique value is generated for every event. This can be helpful in tracing events as
1919
they move through rules to targets, and are processed."""
2020
# Note: this name conflicts with existing python builtins
21-
return self["id"]
21+
return self.get("id")
2222

2323
@property
24-
def version(self) -> str:
24+
def version(self) -> str | None:
2525
"""By default, this is set to 0 (zero) in all events."""
26-
return self["version"]
26+
return self.get("version")
2727

2828
@property
29-
def account(self) -> str:
29+
def account(self) -> str | None:
3030
"""The 12-digit number identifying an AWS account."""
31-
return self["account"]
31+
return self.get("account")
3232

3333
@property
34-
def time(self) -> str:
34+
def time(self) -> str | None:
3535
"""The event timestamp, which can be specified by the service originating the event.
3636
3737
If the event spans a time interval, the service might choose to report the start time, so
3838
this value can be noticeably before the time the event is actually received.
3939
"""
40-
return self["time"]
40+
return self.get("time")
4141

4242
@property
43-
def region(self) -> str:
43+
def region(self) -> str | None:
4444
"""Identifies the AWS region where the event originated."""
45-
return self["region"]
45+
return self.get("region")
4646

4747
@property
48-
def resources(self) -> list[str]:
48+
def resources(self) -> list[str] | None:
4949
"""This JSON array contains ARNs that identify resources that are involved in the event.
5050
Inclusion of these ARNs is at the discretion of the service."""
51-
return self["resources"]
51+
return self.get("resources")
5252

5353
@property
5454
def source(self) -> str:
@@ -68,4 +68,4 @@ def detail(self) -> dict[str, Any]:
6868
@property
6969
def replay_name(self) -> str | None:
7070
"""Identifies whether the event is being replayed and what is the name of the replay."""
71-
return self["replay-name"]
71+
return self.get("replay-name")
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"detail-type": "EC2 Instance State-change Notification",
3+
"source": "aws.ec2",
4+
"detail": {
5+
"instance_id": "i-1234567890abcdef0",
6+
"state": "terminated"
7+
}
8+
}

tests/unit/data_classes/required_dependencies/test_event_bridge_event.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,20 @@ def test_event_bridge_event():
1818
assert parsed_event.detail_type == raw_event["detail-type"]
1919
assert parsed_event.detail == raw_event["detail"]
2020
assert parsed_event.replay_name == "replay_archive"
21+
22+
23+
def test_event_bridge_event_base():
24+
raw_event = load_event("eventBridgeEventBase.json")
25+
parsed_event = EventBridgeEvent(raw_event)
26+
27+
assert parsed_event.source == raw_event["source"]
28+
assert parsed_event.detail_type == raw_event["detail-type"]
29+
assert parsed_event.detail == raw_event["detail"]
30+
31+
assert parsed_event.get_id is None
32+
assert parsed_event.version is None
33+
assert parsed_event.account is None
34+
assert parsed_event.time is None
35+
assert parsed_event.region is None
36+
assert parsed_event.resources is None
37+
assert parsed_event.replay_name is None

0 commit comments

Comments
 (0)