Skip to content

Commit 64f454e

Browse files
authored
added new properties (#107)
1 parent 892b135 commit 64f454e

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

src/cloudformation_cli_python_lib/interface.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,5 +130,10 @@ class BaseResourceHandlerRequest:
130130
clientRequestToken: str
131131
desiredResourceState: Optional[BaseModel]
132132
previousResourceState: Optional[BaseModel]
133+
desiredResourceTags: Optional[Mapping[str, Any]]
134+
systemTags: Optional[Mapping[str, Any]]
135+
awsAccountId: Optional[str]
133136
logicalResourceIdentifier: Optional[str]
134137
nextToken: Optional[str]
138+
region: Optional[str]
139+
awsPartition: Optional[str]

src/cloudformation_cli_python_lib/resource.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,11 @@ def _cast_resource_request(
163163
clientRequestToken=request.bearerToken,
164164
desiredResourceState=request.requestData.resourceProperties,
165165
previousResourceState=request.requestData.previousResourceProperties,
166+
desiredResourceTags=request.requestData.stackTags,
167+
systemTags=request.requestData.systemTags,
168+
awsAccountId=request.awsAccountId,
166169
logicalResourceIdentifier=request.requestData.logicalResourceId,
170+
region=request.region,
167171
).to_modelled(self._model_cls)
168172
except Exception as e: # pylint: disable=broad-except
169173
LOG.exception("Invalid request")

src/cloudformation_cli_python_lib/utils.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,19 +113,40 @@ class UnmodelledRequest:
113113
clientRequestToken: str
114114
desiredResourceState: Optional[Mapping[str, Any]] = None
115115
previousResourceState: Optional[Mapping[str, Any]] = None
116+
desiredResourceTags: Optional[Mapping[str, Any]] = None
117+
systemTags: Optional[Mapping[str, Any]] = None
118+
awsAccountId: Optional[str] = None
116119
logicalResourceIdentifier: Optional[str] = None
117120
nextToken: Optional[str] = None
121+
region: Optional[str] = None
118122

119123
def to_modelled(self, model_cls: Type[BaseModel]) -> BaseResourceHandlerRequest:
120124
# pylint: disable=protected-access
121125
return BaseResourceHandlerRequest(
122126
clientRequestToken=self.clientRequestToken,
123127
desiredResourceState=model_cls._deserialize(self.desiredResourceState),
124128
previousResourceState=model_cls._deserialize(self.previousResourceState),
129+
desiredResourceTags=self.desiredResourceTags,
130+
systemTags=self.systemTags,
131+
awsAccountId=self.awsAccountId,
125132
logicalResourceIdentifier=self.logicalResourceIdentifier,
126133
nextToken=self.nextToken,
134+
region=self.region,
135+
awsPartition=self.get_partition(self.region),
127136
)
128137

138+
@staticmethod
139+
def get_partition(region: Optional[str]) -> Optional[str]:
140+
if region is None:
141+
return None
142+
143+
if region.startswith("cn"):
144+
return "aws-cn"
145+
146+
if region.startswith("us-gov"):
147+
return "aws-gov"
148+
return "aws"
149+
129150

130151
class LambdaContext:
131152
get_remaining_time_in_millis: Callable[["LambdaContext"], int]

tests/lib/utils_test.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,6 @@ def test_handler_request_serde_roundtrip():
6666
"requestContext": {
6767
"invocation": 2,
6868
"callbackContext": {"contextPropertyA": "Value"},
69-
"cloudWatchEventsRuleName": "reinvoke-handler-4754ac8a-623b-45fe-84bc-f5394"
70-
"118a8be",
71-
"cloudWatchEventsTargetId": "reinvoke-target-4754ac8a-623b-45fe-84bc-f53941"
72-
"18a8be",
7369
},
7470
"requestData": {
7571
"callerCredentials": None,
@@ -102,7 +98,8 @@ def test_handler_request_serde_roundtrip():
10298
assert ser == expected
10399

104100

105-
def test_unmodelled_request_to_modelled():
101+
@pytest.mark.parametrize("region", ("us-east-1", "cn-region1", "us-gov-region1"))
102+
def test_unmodelled_request_to_modelled(region):
106103
model_cls = Mock(spec_set=BaseModel)
107104
model_cls._deserialize.side_effect = [sentinel.new, sentinel.old]
108105

@@ -112,6 +109,7 @@ def test_unmodelled_request_to_modelled():
112109
previousResourceState={"state": "old"},
113110
logicalResourceIdentifier="bar",
114111
nextToken="baz",
112+
region=region,
115113
)
116114
modelled = unmodelled.to_modelled(model_cls)
117115

0 commit comments

Comments
 (0)