From 1670471068cb3e4686e406812ccbedd1781702ac Mon Sep 17 00:00:00 2001 From: Bert Blommers Date: Mon, 24 Jul 2023 21:34:36 +0000 Subject: [PATCH] DynamoDB: Support sending nested items to ESM's (#6559) --- moto/dynamodb/models/dynamo_type.py | 9 ++++++++- tests/test_awslambda/test_lambda_eventsourcemapping.py | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/moto/dynamodb/models/dynamo_type.py b/moto/dynamodb/models/dynamo_type.py index 80798a63c..0ea58b49d 100644 --- a/moto/dynamodb/models/dynamo_type.py +++ b/moto/dynamodb/models/dynamo_type.py @@ -302,7 +302,14 @@ class Item(BaseModel): def to_json(self) -> Dict[str, Any]: attributes = {} for attribute_key, attribute in self.attrs.items(): - attributes[attribute_key] = {attribute.type: attribute.value} + if isinstance(attribute.value, dict): + attr_value = { + key: value.to_regular_json() + for key, value in attribute.value.items() + } + attributes[attribute_key] = {attribute.type: attr_value} + else: + attributes[attribute_key] = {attribute.type: attribute.value} return {"Attributes": attributes} diff --git a/tests/test_awslambda/test_lambda_eventsourcemapping.py b/tests/test_awslambda/test_lambda_eventsourcemapping.py index a7ffafaad..3b3a583ff 100644 --- a/tests/test_awslambda/test_lambda_eventsourcemapping.py +++ b/tests/test_awslambda/test_lambda_eventsourcemapping.py @@ -136,7 +136,8 @@ def test_invoke_function_from_dynamodb_put(): assert response["EventSourceArn"] == table["TableDescription"]["LatestStreamArn"] assert response["State"] == "Enabled" - dynamodb.put_item(TableName=table_name, Item={"id": {"S": "item 1"}}) + item_to_create = {"id": {"S": "item 1"}, "data": {"M": {"nested": {"S": "stuff"}}}} + dynamodb.put_item(TableName=table_name, Item=item_to_create) expected_msg = "get_test_zip_file3 success" log_group = f"/aws/lambda/{function_name}" @@ -145,6 +146,9 @@ def test_invoke_function_from_dynamodb_put(): assert msg_showed_up, ( expected_msg + " was not found after a DDB insert. All logs: " + str(all_logs) ) + assert any( + [json.dumps(item_to_create, separators=(",", ":")) in msg for msg in all_logs] + ) @pytest.mark.network