Skip to content

Commit 49c4790

Browse files
authored
Revert Delete & Read Handler should be invoked using identifiers (#537) (#569)
1 parent 4153672 commit 49c4790

File tree

8 files changed

+13
-94
lines changed

8 files changed

+13
-94
lines changed

src/rpdk/core/contract/resource_client.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -98,22 +98,6 @@ def override_properties(document, overrides):
9898
return document
9999

100100

101-
def create_model_with_properties_in_path(src_model, paths):
102-
"""Creates a model with values preset in the paths.
103-
104-
This assumes properties will always have an object (dict) as a parent.
105-
The function returns the created model.
106-
"""
107-
model = {}
108-
try:
109-
for path in paths:
110-
pruned_path = path[-1]
111-
model[pruned_path] = src_model[pruned_path]
112-
except LookupError:
113-
pass
114-
return model
115-
116-
117101
class ResourceClient: # pylint: disable=too-many-instance-attributes
118102
def __init__(
119103
self,

src/rpdk/core/contract/suite/contract_asserts.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
import logging
21
from functools import wraps
32
from inspect import Parameter, signature
43

54
import pytest
65

76
from rpdk.core.contract.interface import HandlerErrorCode
87

9-
LOG = logging.getLogger(__name__)
10-
118

129
def _rebind(decorator, func, *args, **kwargs):
1310
"""Helper function to construct decorated arguments

src/rpdk/core/contract/suite/handler_commons.py

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from rpdk.core.contract.interface import Action, HandlerErrorCode, OperationStatus
44
from rpdk.core.contract.resource_client import (
5-
create_model_with_properties_in_path,
65
prune_properties_from_model,
76
prune_properties_if_not_exist_in_path,
87
)
@@ -50,12 +49,8 @@ def test_create_failure_if_repeat_writeable_id(resource_client, current_resource
5049
@response_does_not_contain_write_only_properties
5150
@response_contains_resource_model_equal_current_model
5251
def test_read_success(resource_client, current_resource_model):
53-
primay_identifier_only_model = create_model_with_properties_in_path(
54-
current_resource_model.copy(),
55-
resource_client.primary_identifier_paths,
56-
)
5752
_status, response, _error_code = resource_client.call_and_assert(
58-
Action.READ, OperationStatus.SUCCESS, primay_identifier_only_model
53+
Action.READ, OperationStatus.SUCCESS, current_resource_model
5954
)
6055
return response
6156

@@ -69,12 +64,8 @@ def test_read_failure_not_found(
6964
resource_client,
7065
current_resource_model,
7166
):
72-
primay_identifier_only_model = create_model_with_properties_in_path(
73-
current_resource_model,
74-
resource_client.primary_identifier_paths,
75-
)
7667
_status, _response, error_code = resource_client.call_and_assert(
77-
Action.READ, OperationStatus.FAILED, primay_identifier_only_model
68+
Action.READ, OperationStatus.FAILED, current_resource_model
7869
)
7970
return error_code
8071

@@ -137,12 +128,8 @@ def test_update_failure_not_found(resource_client, current_resource_model):
137128

138129

139130
def test_delete_success(resource_client, current_resource_model):
140-
primay_identifier_only_model = create_model_with_properties_in_path(
141-
current_resource_model,
142-
resource_client.primary_identifier_paths,
143-
)
144131
_status, response, _error_code = resource_client.call_and_assert(
145-
Action.DELETE, OperationStatus.SUCCESS, primay_identifier_only_model
132+
Action.DELETE, OperationStatus.SUCCESS, current_resource_model
146133
)
147134
return response
148135

@@ -153,12 +140,8 @@ def test_delete_success(resource_client, current_resource_model):
153140
if the resource did not exist prior to the delete request",
154141
)
155142
def test_delete_failure_not_found(resource_client, current_resource_model):
156-
primay_identifier_only_model = create_model_with_properties_in_path(
157-
current_resource_model,
158-
resource_client.primary_identifier_paths,
159-
)
160143
_status, _response, error_code = resource_client.call_and_assert(
161-
Action.DELETE, OperationStatus.FAILED, primay_identifier_only_model
144+
Action.DELETE, OperationStatus.FAILED, current_resource_model
162145
)
163146
return error_code
164147

src/rpdk/core/contract/suite/handler_create.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
# WARNING: contract tests should use fully qualified imports to avoid issues
88
# when being loaded by pytest
99
from rpdk.core.contract.interface import Action, HandlerErrorCode, OperationStatus
10-
from rpdk.core.contract.resource_client import create_model_with_properties_in_path
1110
from rpdk.core.contract.suite.contract_asserts import (
1211
failed_event,
1312
skip_not_writable_identifier,
@@ -35,12 +34,7 @@ def created_resource(resource_client):
3534
test_input_equals_output(resource_client, input_model, model)
3635
yield model, request
3736
finally:
38-
primay_identifier_only_model = create_model_with_properties_in_path(
39-
model, resource_client.primary_identifier_paths
40-
)
41-
resource_client.call_and_assert(
42-
Action.DELETE, OperationStatus.SUCCESS, primay_identifier_only_model
43-
)
37+
resource_client.call_and_assert(Action.DELETE, OperationStatus.SUCCESS, model)
4438

4539

4640
@pytest.mark.create

src/rpdk/core/contract/suite/handler_delete.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@
77
# WARNING: contract tests should use fully qualified imports to avoid issues
88
# when being loaded by pytest
99
from rpdk.core.contract.interface import Action, HandlerErrorCode, OperationStatus
10-
from rpdk.core.contract.resource_client import (
11-
create_model_with_properties_in_path,
12-
prune_properties_from_model,
13-
)
10+
from rpdk.core.contract.resource_client import prune_properties_from_model
1411
from rpdk.core.contract.suite.handler_commons import (
1512
test_create_success,
1613
test_delete_failure_not_found,
@@ -28,26 +25,22 @@
2825

2926
@pytest.fixture(scope="module")
3027
def deleted_resource(resource_client):
31-
request = input_model = pruned_model = resource_client.generate_create_example()
28+
request = input_model = model = resource_client.generate_create_example()
3229
try:
3330
_status, response, _error = resource_client.call_and_assert(
3431
Action.CREATE, OperationStatus.SUCCESS, request
3532
)
3633
model = response["resourceModel"]
3734
test_input_equals_output(resource_client, input_model, model)
38-
primay_identifier_only_model = create_model_with_properties_in_path(
39-
model,
40-
resource_client.primary_identifier_paths,
41-
)
4235
_status, response, _error = resource_client.call_and_assert(
43-
Action.DELETE, OperationStatus.SUCCESS, primay_identifier_only_model
36+
Action.DELETE, OperationStatus.SUCCESS, model
4437
)
4538
assert (
4639
"resourceModel" not in response
4740
), "The deletion handler's response object MUST NOT contain a model"
4841
yield model, request
4942
finally:
50-
status, response = resource_client.call(Action.DELETE, pruned_model)
43+
status, response = resource_client.call(Action.DELETE, model)
5144

5245
# a failed status is allowed if the error code is NotFound
5346
if status == OperationStatus.FAILED:

src/rpdk/core/contract/suite/handler_update.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
# WARNING: contract tests should use fully qualified imports to avoid issues
77
# when being loaded by pytest
88
from rpdk.core.contract.interface import Action, OperationStatus
9-
from rpdk.core.contract.resource_client import create_model_with_properties_in_path
109
from rpdk.core.contract.suite.handler_commons import (
1110
test_input_equals_output,
1211
test_model_in_list,
@@ -35,12 +34,7 @@ def updated_resource(resource_client):
3534

3635
yield create_request, created_model, update_request, updated_model
3736
finally:
38-
primay_identifier_only_model = create_model_with_properties_in_path(
39-
model, resource_client.primary_identifier_paths
40-
)
41-
resource_client.call_and_assert(
42-
Action.DELETE, OperationStatus.SUCCESS, primay_identifier_only_model
43-
)
37+
resource_client.call_and_assert(Action.DELETE, OperationStatus.SUCCESS, model)
4438

4539

4640
@pytest.mark.update

src/rpdk/core/contract/suite/handler_update_invalid.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
# WARNING: contract tests should use fully qualified imports to avoid issues
77
# when being loaded by pytest
88
from rpdk.core.contract.interface import Action, HandlerErrorCode, OperationStatus
9-
from rpdk.core.contract.resource_client import create_model_with_properties_in_path
109
from rpdk.core.contract.suite.contract_asserts import failed_event
1110

1211

@@ -38,12 +37,8 @@ def contract_update_create_only_property(resource_client):
3837
], "The progress event MUST return an error message\
3938
when the status is failed"
4039
finally:
41-
primay_identifier_only_model = create_model_with_properties_in_path(
42-
created_model,
43-
resource_client.primary_identifier_paths,
44-
)
4540
resource_client.call_and_assert(
46-
Action.DELETE, OperationStatus.SUCCESS, primay_identifier_only_model
41+
Action.DELETE, OperationStatus.SUCCESS, created_model
4742
)
4843
else:
4944
pytest.skip("No createOnly Properties. Skipping test.")

tests/contract/test_resource_client.py

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77

88
import pytest
99

10-
import rpdk.core.contract.resource_client as client
1110
from rpdk.core.boto_helpers import LOWER_CAMEL_CRED_KEYS
1211
from rpdk.core.contract.interface import Action, HandlerErrorCode, OperationStatus
1312
from rpdk.core.contract.resource_client import (
1413
ResourceClient,
1514
override_properties,
1615
prune_properties,
1716
prune_properties_from_model,
17+
prune_properties_if_not_exist_in_path,
1818
)
1919
from rpdk.core.test import (
2020
DEFAULT_ENDPOINT,
@@ -174,7 +174,7 @@ def test_prune_properties_if_not_exist_in_path():
174174
"one": "two",
175175
"array": ["first", "second"],
176176
}
177-
model = client.prune_properties_if_not_exist_in_path(
177+
model = prune_properties_if_not_exist_in_path(
178178
model,
179179
previous_model,
180180
[
@@ -187,27 +187,6 @@ def test_prune_properties_if_not_exist_in_path():
187187
assert model == previous_model
188188

189189

190-
def test_create_model_with_properties_in_path_empty_path():
191-
model = {
192-
"foo": "bar",
193-
"spam": "eggs",
194-
"array": ["second"],
195-
"map": {"map1": {"test": "1", "not_test": "2"}},
196-
}
197-
model = client.create_model_with_properties_in_path(model, [])
198-
assert model == {}
199-
200-
201-
def test_create_model_with_properties_in_path():
202-
model = {"foo": "bar", "spam": "eggs", "one": "two"}
203-
204-
model = client.create_model_with_properties_in_path(
205-
model,
206-
[("properties", "foo"), ("properties", "spam"), ("properties", "invaild")],
207-
)
208-
assert model == {"foo": "bar", "spam": "eggs"}
209-
210-
211190
def test_init_sam_cli_client():
212191
patch_sesh = patch(
213192
"rpdk.core.contract.resource_client.create_sdk_session", autospec=True

0 commit comments

Comments
 (0)