-
Notifications
You must be signed in to change notification settings - Fork 411
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(parser): Event source dataclasses for IoT Core Registry Events (#…
…6123) * Comment out fields to work with * work on tests * Add docs * Add initial doc links * work * fix links * Add github links * work * add files * fill classes * add log statement * work * apply suggestions * Add examples for first items * Fix documentation * apply suggestion * Add doc example * Work * work * Adding more coverage + documentation * Adding more coverage + documentation * Adding more coverage + documentation * Adding more coverage + documentation * Adding more coverage + documentation --------- Co-authored-by: Leandro Damascena <[email protected]>
- Loading branch information
1 parent
1258d6d
commit 79d57d8
Showing
10 changed files
with
668 additions
and
0 deletions.
There are no files selected for viewing
418 changes: 418 additions & 0 deletions
418
aws_lambda_powertools/utilities/data_classes/iot_registry_event.py
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
examples/event_sources/src/iot_registry_add_or_delete_from_thing_group_event.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from aws_lambda_powertools.utilities.data_classes import event_source | ||
from aws_lambda_powertools.utilities.data_classes.iot_registry_event import IoTCoreAddOrDeleteFromThingGroupEvent | ||
|
||
|
||
@event_source(data_class=IoTCoreAddOrDeleteFromThingGroupEvent) | ||
def lambda_handler(event: IoTCoreAddOrDeleteFromThingGroupEvent, context): | ||
print(f"Received IoT Core event type {event.event_type}") |
7 changes: 7 additions & 0 deletions
7
examples/event_sources/src/iot_registry_add_or_remove_from_thing_group_event.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from aws_lambda_powertools.utilities.data_classes import event_source | ||
from aws_lambda_powertools.utilities.data_classes.iot_registry_event import IoTCoreAddOrRemoveFromThingGroupEvent | ||
|
||
|
||
@event_source(data_class=IoTCoreAddOrRemoveFromThingGroupEvent) | ||
def lambda_handler(event: IoTCoreAddOrRemoveFromThingGroupEvent, context): | ||
print(f"Received IoT Core event type {event.event_type}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from aws_lambda_powertools.utilities.data_classes import event_source | ||
from aws_lambda_powertools.utilities.data_classes.iot_registry_event import IoTCoreThingEvent | ||
|
||
|
||
@event_source(data_class=IoTCoreThingEvent) | ||
def lambda_handler(event: IoTCoreThingEvent, context): | ||
print(f"Received IoT Core event type {event.event_type}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from aws_lambda_powertools.utilities.data_classes import event_source | ||
from aws_lambda_powertools.utilities.data_classes.iot_registry_event import IoTCoreThingGroupEvent | ||
|
||
|
||
@event_source(data_class=IoTCoreThingGroupEvent) | ||
def lambda_handler(event: IoTCoreThingGroupEvent, context): | ||
print(f"Received IoT Core event type {event.event_type}") |
7 changes: 7 additions & 0 deletions
7
examples/event_sources/src/iot_registry_thing_type_association_event.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from aws_lambda_powertools.utilities.data_classes import event_source | ||
from aws_lambda_powertools.utilities.data_classes.iot_registry_event import IoTCoreThingTypeAssociationEvent | ||
|
||
|
||
@event_source(data_class=IoTCoreThingTypeAssociationEvent) | ||
def lambda_handler(event: IoTCoreThingTypeAssociationEvent, context): | ||
print(f"Received IoT Core event type {event.event_type}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from aws_lambda_powertools.utilities.data_classes import event_source | ||
from aws_lambda_powertools.utilities.data_classes.iot_registry_event import IoTCoreThingTypeEvent | ||
|
||
|
||
@event_source(data_class=IoTCoreThingTypeEvent) | ||
def lambda_handler(event: IoTCoreThingTypeEvent, context): | ||
print(f"Received IoT Core event type {event.event_type}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
115 changes: 115 additions & 0 deletions
115
tests/unit/data_classes/required_dependencies/test_iot_registry_events.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
from datetime import datetime | ||
|
||
from aws_lambda_powertools.utilities.data_classes.iot_registry_event import ( | ||
IoTCoreAddOrDeleteFromThingGroupEvent, | ||
IoTCoreAddOrRemoveFromThingGroupEvent, | ||
IoTCoreThingEvent, | ||
IoTCoreThingGroupEvent, | ||
IoTCoreThingTypeAssociationEvent, | ||
IoTCoreThingTypeEvent, | ||
) | ||
from tests.functional.utils import load_event | ||
|
||
|
||
def test_iotcore_thing_event(): | ||
raw_event = load_event("iotRegistryEventsThingEvent.json") | ||
parsed_event = IoTCoreThingEvent(raw_event) | ||
|
||
assert parsed_event.event_type == raw_event["eventType"] | ||
assert parsed_event.operation == raw_event["operation"] | ||
assert parsed_event.thing_id == raw_event["thingId"] | ||
assert parsed_event.account_id == raw_event["accountId"] | ||
assert parsed_event.thing_name == raw_event["thingName"] | ||
assert parsed_event.version_number == raw_event["versionNumber"] | ||
assert parsed_event.thing_type_name == raw_event.get("thingTypeName") | ||
assert parsed_event.attributes == raw_event["attributes"] | ||
assert parsed_event.event_id == raw_event["eventId"] | ||
|
||
# Validate timestamp conversion | ||
# Original field is int | ||
expected_timestamp = datetime.fromtimestamp( | ||
raw_event["timestamp"] / 1000 if raw_event["timestamp"] > 10**10 else raw_event["timestamp"], | ||
) | ||
assert parsed_event.timestamp == expected_timestamp | ||
|
||
|
||
def test_iotcore_thing_type_event(): | ||
raw_event = load_event("iotRegistryEventsThingTypeEvent.json") | ||
parsed_event = IoTCoreThingTypeEvent(raw_event) | ||
|
||
assert parsed_event.event_type == raw_event["eventType"] | ||
assert parsed_event.operation == raw_event["operation"] | ||
assert parsed_event.event_id == raw_event["eventId"] | ||
assert parsed_event.account_id == raw_event["accountId"] | ||
assert parsed_event.thing_type_name == raw_event["thingTypeName"] | ||
assert parsed_event.is_deprecated == raw_event["isDeprecated"] | ||
assert parsed_event.deprecation_date == raw_event["deprecationDate"] | ||
assert parsed_event.searchable_attributes == raw_event["searchableAttributes"] | ||
assert parsed_event.propagating_attributes == raw_event["propagatingAttributes"] | ||
assert parsed_event.description == raw_event["description"] | ||
assert parsed_event.thing_type_id == raw_event["thingTypeId"] | ||
|
||
|
||
def test_iotcore_thing_type_association_event(): | ||
raw_event = load_event("iotRegistryEventsThingTypeAssociationEvent.json") | ||
parsed_event = IoTCoreThingTypeAssociationEvent(raw_event) | ||
|
||
assert parsed_event.event_type == raw_event["eventType"] | ||
assert parsed_event.operation == raw_event["operation"] | ||
assert parsed_event.event_id == raw_event["eventId"] | ||
assert parsed_event.thing_id == raw_event["thingId"] | ||
assert parsed_event.thing_type_name == raw_event["thingTypeName"] | ||
assert parsed_event.thing_name == raw_event["thingName"] | ||
|
||
|
||
def test_iotcore_thing_group_event(): | ||
raw_event = load_event("iotRegistryEventsThingGroupEvent.json") | ||
parsed_event = IoTCoreThingGroupEvent(raw_event) | ||
|
||
assert parsed_event.event_type == raw_event["eventType"] | ||
assert parsed_event.event_id == raw_event["eventId"] | ||
assert parsed_event.operation == raw_event["operation"] | ||
assert parsed_event.account_id == raw_event["accountId"] | ||
assert parsed_event.thing_group_name == raw_event["thingGroupName"] | ||
assert parsed_event.thing_group_id == raw_event["thingGroupId"] | ||
assert parsed_event.version_number == raw_event["versionNumber"] | ||
assert parsed_event.parent_group_name == raw_event["parentGroupName"] | ||
assert parsed_event.parent_group_id == raw_event["parentGroupId"] | ||
assert parsed_event.description == raw_event["description"] | ||
assert parsed_event.root_to_parent_thing_groups == raw_event["rootToParentThingGroups"] | ||
assert parsed_event.attributes == raw_event["attributes"] | ||
assert parsed_event.dynamic_group_mapping_id == raw_event["dynamicGroupMappingId"] | ||
|
||
|
||
def test_iotcore_add_or_remove_from_thing_group_event(): | ||
raw_event = load_event("iotRegistryEventsAddOrRemoveFromThingGroupEvent.json") | ||
parsed_event = IoTCoreAddOrRemoveFromThingGroupEvent(raw_event) | ||
|
||
assert parsed_event.event_type == raw_event["eventType"] | ||
assert parsed_event.operation == raw_event["operation"] | ||
assert parsed_event.account_id == raw_event["accountId"] | ||
assert parsed_event.event_id == raw_event["eventId"] | ||
assert parsed_event.group_id == raw_event["groupId"] | ||
assert parsed_event.group_arn == raw_event["groupArn"] | ||
assert parsed_event.thing_arn == raw_event["thingArn"] | ||
assert parsed_event.thing_id == raw_event["thingId"] | ||
assert parsed_event.membership_id == raw_event["membershipId"] | ||
|
||
|
||
def test_iotcore_add_or_delete_from_thing_group_event(): | ||
raw_event = load_event("iotRegistryEventsAddOrDeleteFromThingGroupEvent.json") | ||
parsed_event = IoTCoreAddOrDeleteFromThingGroupEvent(raw_event) | ||
|
||
assert parsed_event.event_type == raw_event["eventType"] | ||
assert parsed_event.event_id == raw_event["eventId"] | ||
assert parsed_event.account_id == raw_event["accountId"] | ||
assert parsed_event.thing_group_id == raw_event["thingGroupId"] | ||
assert parsed_event.thing_group_name == raw_event["thingGroupName"] | ||
assert parsed_event.child_group_id == raw_event["childGroupId"] | ||
assert parsed_event.child_group_name == raw_event["childGroupName"] | ||
assert parsed_event.operation == raw_event["operation"] | ||
|
||
expected_timestamp = datetime.fromtimestamp( | ||
raw_event["timestamp"] / 1000 if raw_event["timestamp"] > 10**10 else raw_event["timestamp"], | ||
) | ||
assert parsed_event.timestamp == expected_timestamp |