Skip to content

Commit bfbe3de

Browse files
committed
Update
1 parent 2acbb88 commit bfbe3de

File tree

4 files changed

+21
-13
lines changed

4 files changed

+21
-13
lines changed

requirements/base.txt

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
boto3>=1.19.5,==1.*
22
jsonschema<5,>=3.2 # TODO: evaluate risk of removing jsonschema 3.x support
33
typing_extensions>=4.4,<5 # 3.7 doesn't have Literal
4+
5+
# resource validation & schema generation, requiring features in >=1.10
6+
pydantic~=1.10

requirements/dev.txt

-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,3 @@ mypy~=1.0.0
2929
boto3-stubs[appconfig,serverlessrepo]>=1.19.5,==1.*
3030
types-PyYAML~=5.4
3131
types-jsonschema~=3.2
32-
33-
# resource validation & schema generation, requiring features in >=1.10
34-
pydantic~=1.10

samtranslator/validator/resource_validator.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,21 @@ def get(self, attr: str, default_value: Any = None) -> Any:
2020
return ResourceModel(attr_value)
2121
return attr_value
2222

23+
def __getitem__(self, attr):
24+
attr_value = self.model.__dict__[attr]
25+
if isinstance(attr_value, BaseModel):
26+
if "__root__" in attr_value.__dict__:
27+
return attr_value.__dict__["__root__"]
28+
return ResourceModel(attr_value)
29+
return attr_value
30+
2331

24-
def to_resource_model(
25-
input_properties: Dict[Any, Any], class_properties: Dict[Any, Any], cls: Type[BaseModel]
26-
) -> ResourceModel:
32+
def to_resource_model(resource_properties: Dict[Any, Any], cls: Type[BaseModel]) -> ResourceModel:
2733
"""
28-
Given properties of a SAM resource, filter for resource specific properties, then
29-
return a typed object from the definitions of SAM schema model
34+
Given properties of a SAM resource return a typed object from the definitions of SAM schema model
3035
3136
param:
32-
input_properties: properties from input template, may contain resource attributes like RetainPolicy
33-
class_properties: resource properties defined in SAM property_types
37+
resource_properties: properties from input template
3438
cls: SAM schema models
3539
"""
36-
resource_properties = {k: v for (k, v) in input_properties.items() if k in class_properties}
3740
return ResourceModel(cls(**resource_properties))

tests/validator/test_resource_validator.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,19 @@ def setUp(self) -> None:
2525
def test_resource_model_get(self):
2626
connector_model = to_resource_model(
2727
self.connector_template,
28-
SamConnector.property_types,
2928
ConnectorProperties,
3029
)
3130
self.assertEqual(connector_model.get("Source").get("Arn"), "random-arn")
3231
self.assertEqual(connector_model.get("Source").get("Type"), "random-type")
3332
self.assertEqual(connector_model.get("Source").get("Id"), None)
3433
self.assertEqual(connector_model.get("Destination").get("Id"), "MyTable")
3534
self.assertEqual(connector_model.get("Permissions"), ["Read"])
35+
self.assertEqual(connector_model.get("FakeProperty"), None)
36+
37+
self.assertEqual(connector_model["Source"]["Arn"], "random-arn")
38+
self.assertEqual(connector_model["Source"]["Type"], "random-type")
39+
self.assertEqual(connector_model["Destination"]["Id"], "MyTable")
40+
self.assertEqual(connector_model["Permissions"], ["Read"])
3641

3742

3843
class TestResourceValidatorFailure(TestCase):
@@ -45,4 +50,4 @@ def test_to_resource_model_error_connector_template(self):
4550
ValidationError,
4651
"[1-9] validation error for Properties(.|\n)+(Source|Destination|Permissions)(.|\n)*(field required)|(unexpected value)|(str type expected)|(value is not a valid list).+",
4752
):
48-
to_resource_model(properties, SamConnector.property_types, ConnectorProperties)
53+
to_resource_model(properties, ConnectorProperties)

0 commit comments

Comments
 (0)