Skip to content

Commit dc59b60

Browse files
author
Lucas McDonald
committed
m
1 parent 3b20191 commit dc59b60

File tree

4 files changed

+55
-18
lines changed

4 files changed

+55
-18
lines changed

DynamoDbEncryption/runtimes/python/src/aws_dbesdk_dynamodb/internal/client_to_resource.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,7 @@ def batch_write_item_response(self, batch_write_item_response):
114114
return self.boto3_converter.BatchWriteItemOutput(batch_write_item_response)
115115

116116
def update_item_response(self, update_item_response):
117-
# DBESDK transformers will raise an exception before this is called
118-
raise NotImplementedError("update_item response handling is not implemented")
117+
return self.boto3_converter.UpdateItemOutput(update_item_response)
119118

120119
def batch_execute_statement_request(self, batch_execute_statement_request):
121120
return self.boto3_converter.BatchExecuteStatementInput(batch_execute_statement_request)

DynamoDbEncryption/runtimes/python/src/aws_dbesdk_dynamodb/internal/resource_to_client.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,7 @@ def put_item_response(self, put_item_response):
164164
return self.boto3_converter.PutItemOutput(put_item_response)
165165

166166
def update_item_response(self, update_item_response):
167-
# DBESDK transformers will raise an exception before this is called
168-
raise NotImplementedError("update_item response handling is not implemented")
167+
return self.boto3_converter.UpdateItemOutput(update_item_response)
169168

170169
def delete_item_response(self, delete_item_response):
171170
return self.boto3_converter.DeleteItemOutput(delete_item_response)

DynamoDbEncryption/runtimes/python/test/integ/encrypted/test_client.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@
4646
basic_transact_write_item_delete_request_dict,
4747
basic_transact_write_item_put_request_ddb,
4848
basic_transact_write_item_put_request_dict,
49-
basic_update_item_request_ddb,
50-
basic_update_item_request_dict,
49+
basic_update_item_request_ddb_signed_attribute,
50+
basic_update_item_request_ddb_unsigned_attribute,
51+
basic_update_item_request_dict_signed_attribute,
52+
basic_update_item_request_dict_unsigned_attribute,
5153
basic_execute_statement_request,
5254
basic_execute_transaction_request,
5355
basic_batch_execute_statement_request,
@@ -379,16 +381,31 @@ def test_GIVEN_valid_transact_write_and_get_requests_WHEN_transact_write_and_get
379381
# Then: transact_write_item delete succeeds
380382
assert transact_write_delete_response["ResponseMetadata"]["HTTPStatusCode"] == 200
381383

384+
@pytest.fixture
385+
def update_item_request_unsigned_attribute(expect_standard_dictionaries, test_item):
386+
if expect_standard_dictionaries:
387+
return {**basic_update_item_request_dict_unsigned_attribute(test_item), "TableName": INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}
388+
return basic_update_item_request_ddb_unsigned_attribute(test_item)
389+
390+
391+
def test_WHEN_update_item_with_unsigned_attribute_THEN_passes(
392+
client, update_item_request_unsigned_attribute, encrypted, get_item_request
393+
):
394+
# Given: Valid update_item request
395+
# When: update_item
396+
update_response = client.update_item(**update_item_request_unsigned_attribute)
397+
# Then: update_item succeeds
398+
assert update_response["ResponseMetadata"]["HTTPStatusCode"] == 200
382399

383400
@pytest.fixture
384-
def update_item_request(expect_standard_dictionaries, test_item):
401+
def update_item_request_signed_attribute(expect_standard_dictionaries, test_item):
385402
if expect_standard_dictionaries:
386-
return {**basic_update_item_request_dict(test_item), "TableName": INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}
387-
return basic_update_item_request_ddb(test_item)
403+
return {**basic_update_item_request_dict_signed_attribute(test_item), "TableName": INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}
404+
return basic_update_item_request_ddb_signed_attribute(test_item)
388405

389406

390-
def test_WHEN_update_item_THEN_raises_DynamoDbEncryptionTransformsException(
391-
client, update_item_request, encrypted,
407+
def test_WHEN_update_item_with_signed_attribute_THEN_raises_DynamoDbEncryptionTransformsException(
408+
client, update_item_request_signed_attribute, encrypted,
392409
):
393410
"""Test that update_item raises DynamoDbEncryptionTransformsException."""
394411
if not encrypted:
@@ -399,7 +416,7 @@ def test_WHEN_update_item_THEN_raises_DynamoDbEncryptionTransformsException(
399416
with pytest.raises(DynamoDbEncryptionTransformsException):
400417
# When: Calling update_item
401418
client.update_item(
402-
**update_item_request
419+
**update_item_request_signed_attribute
403420
)
404421

405422

DynamoDbEncryption/runtimes/python/test/requests.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def base_transact_get_item_request(keys):
6060
}
6161

6262

63-
def base_update_item_request(item):
63+
def base_update_item_request_signed_attribute(item):
6464
"""Base structure for update_item requests."""
6565
return {
6666
"Key": {"partition_key": item["partition_key"], "sort_key": item["sort_key"]},
@@ -69,6 +69,15 @@ def base_update_item_request(item):
6969
}
7070

7171

72+
def base_update_item_request_unsigned_attribute(item):
73+
"""Base structure for update_item requests."""
74+
return {
75+
"Key": {"partition_key": item["partition_key"], "sort_key": item["sort_key"]},
76+
"UpdateExpression": "SET #attr3 = :val",
77+
"ExpressionAttributeValues": {":val": item[":attribute3"]},
78+
"ExpressionAttributeNames": {"#attr3": ":attribute3"},
79+
}
80+
7281
def basic_execute_statement_request():
7382
"""Base structure for execute_statement requests."""
7483
return {"Statement": "SELECT * FROM " + INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}
@@ -348,9 +357,15 @@ def basic_scan_paginator_request(item):
348357
}
349358

350359

351-
def basic_update_item_request_ddb(item):
360+
def basic_update_item_request_ddb_signed_attribute(item):
361+
"""Get an update_item request in DDB format for any item."""
362+
base = base_update_item_request_signed_attribute(item)
363+
return {"TableName": INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME, **base}
364+
365+
366+
def basic_update_item_request_ddb_unsigned_attribute(item):
352367
"""Get an update_item request in DDB format for any item."""
353-
base = base_update_item_request(item)
368+
base = base_update_item_request_unsigned_attribute(item)
354369
return {"TableName": INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME, **base}
355370

356371

@@ -496,7 +511,14 @@ def basic_transact_get_item_request_dict(keys):
496511
return base_transact_get_item_request(keys)
497512

498513

499-
def basic_update_item_request_dict(item):
500-
"""Get an update_item request in DDB format for any item."""
501-
base = base_update_item_request(item)
514+
def basic_update_item_request_dict_signed_attribute(item):
515+
"""Get an update_item request in dict format for any item."""
516+
base = base_update_item_request_signed_attribute(item)
502517
return base
518+
519+
520+
def basic_update_item_request_dict_unsigned_attribute(item):
521+
"""Get an update_item request in dict format for any item."""
522+
base = base_update_item_request_unsigned_attribute(item)
523+
return base
524+

0 commit comments

Comments
 (0)