Skip to content

Commit e6a6b78

Browse files
authored
non-strict payload deserializer (#125)
1 parent 5b80d11 commit e6a6b78

3 files changed

Lines changed: 13 additions & 17 deletions

File tree

src/cloudformation_cli_python_lib/utils.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# pylint: disable=invalid-name
22
import json
3-
from dataclasses import dataclass, field
3+
from dataclasses import dataclass, field, fields
44
from datetime import date, datetime, time
55
from typing import (
66
Any,
@@ -93,8 +93,14 @@ class HandlerRequest:
9393
callbackContext: Optional[MutableMapping[str, Any]] = None
9494
nextToken: Optional[str] = None
9595

96+
def __init__(self, **kwargs: Any) -> None:
97+
dataclass_fields = {f.name for f in fields(self)}
98+
for k, v in kwargs.items():
99+
if k in dataclass_fields:
100+
setattr(self, k, v)
101+
96102
@classmethod
97-
def deserialize(cls, json_data: MutableMapping[str, Any]) -> "HandlerRequest":
103+
def deserialize(cls, json_data: MutableMapping[str, Any]) -> Any:
98104
event = HandlerRequest(**json_data)
99105
event.requestData = RequestData.deserialize(json_data.get("requestData", {}))
100106
return event

tests/lib/resource_test.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
},
4848
"stackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/e"
4949
"722ae60-fe62-11e8-9a0e-0ae8cc519968",
50+
"snapshotRequested": None,
5051
}
5152
TYPE_NAME = "Test::Foo::Bar"
5253

@@ -193,17 +194,6 @@ def test_entrypoint_success_without_caller_provider_creds():
193194
assert event == expected
194195

195196

196-
@pytest.mark.parametrize(
197-
"event,messages", [({}, ("missing", "awsAccountId", "bearerToken", "requestData"))]
198-
)
199-
def test__parse_request_invalid_request(resource, event, messages):
200-
with pytest.raises(InvalidRequest) as excinfo:
201-
resource._parse_request(event)
202-
203-
for msg in messages:
204-
assert msg in str(excinfo.value), msg
205-
206-
207197
def test_cast_resource_request_invalid_request(resource):
208198
request = HandlerRequest.deserialize(ENTRYPOINT_PAYLOAD)
209199
request.requestData = None

tests/plugin/codegen_test.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ def test_initialize(project):
9494
"README.md",
9595
"foo-bar-baz.json",
9696
"requirements.txt",
97-
"inputs/inputs_1_invalid.json",
98-
"inputs/inputs_1_update.json",
99-
"inputs/inputs_1_create.json",
100-
"inputs",
97+
"example_inputs/inputs_1_invalid.json",
98+
"example_inputs/inputs_1_update.json",
99+
"example_inputs/inputs_1_create.json",
100+
"example_inputs",
101101
"src",
102102
"src/foo_bar_baz",
103103
"src/foo_bar_baz/__init__.py",

0 commit comments

Comments
 (0)