Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/cloudformation_cli_python_lib/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ class RequestData:
previousStackTags: Optional[Mapping[str, Any]] = None
previousSystemTags: Optional[Mapping[str, Any]] = None

def __init__(self, **kwargs: Any) -> None:
dataclass_fields = {f.name for f in fields(self)}
for k, v in kwargs.items():
if k in dataclass_fields:
setattr(self, k, v)

@classmethod
def deserialize(cls, json_data: MutableMapping[str, Any]) -> "RequestData":
req_data = RequestData(**json_data)
Expand Down
10 changes: 8 additions & 2 deletions tests/lib/utils_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,24 @@ def test_handler_request_serde_roundtrip():
"previousResourceProperties": None,
"stackTags": {"tag1": "abc"},
"previousStackTags": {"tag1": "def"},
"undesiredField": "value",
},
"stackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/e72"
"2ae60-fe62-11e8-9a0e-0ae8cc519968",
}
undesired = "undesiredField"
ser = HandlerRequest.deserialize(payload).serialize()
# remove None values from payload
expected = {
k: {k: v for k, v in payload["requestData"].items() if v is not None}
k: {
k: v
for k, v in payload["requestData"].items()
if v is not None and k not in undesired
}
if k == "requestData"
else v
for k, v in payload.items()
if v is not None
if v is not None and k not in undesired
}

assert ser == expected
Expand Down