Skip to content

Commit 49cfcfc

Browse files
author
Lucas McDonald
committed
m
1 parent 6a4e39a commit 49cfcfc

File tree

7 files changed

+475
-13
lines changed

7 files changed

+475
-13
lines changed

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

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,20 @@ def query_response(self, query_response):
6868
def scan_request(self, scan_request):
6969
out = self.boto3_converter.ScanInput(scan_request)
7070
# scan requests on a boto3.resource.Table do not have a table name.
71+
if self.delete_table_name:
72+
del out["TableName"]
73+
return out
74+
75+
def delete_item_request(self, delete_item_request):
76+
out = self.boto3_converter.DeleteItemInput(delete_item_request)
77+
# delete_item requests on a boto3.resource.Table do not have a table name.
78+
if self.delete_table_name:
79+
del out["TableName"]
80+
return out
81+
82+
def update_item_request(self, update_item_request):
83+
out = self.boto3_converter.UpdateItemInput(update_item_request)
84+
# update_item requests on a boto3.resource.Table do not have a table name.
7185
if self.delete_table_name:
7286
del out["TableName"]
7387
return out
@@ -99,20 +113,14 @@ def batch_write_item_request(self, batch_write_item_request):
99113
def batch_write_item_response(self, batch_write_item_response):
100114
return self.boto3_converter.BatchWriteItemOutput(batch_write_item_response)
101115

102-
def update_item_request(self, update_item_request):
103-
return self.boto3_converter.UpdateItemInput(update_item_request)
104-
105116
def update_item_response(self, update_item_response):
106-
return self.boto3_converter.UpdateItemOutput(update_item_response)
117+
raise NotImplementedError("update_item response handling is not implemented")
107118

108119
def batch_execute_statement_request(self, batch_execute_statement_request):
109120
return self.boto3_converter.BatchExecuteStatementInput(batch_execute_statement_request)
110121

111122
def batch_execute_statement_response(self, batch_execute_statement_response):
112-
return self.boto3_converter.BatchExecuteStatementOutput(batch_execute_statement_response)
113-
114-
def delete_item_request(self, delete_item_request):
115-
return self.boto3_converter.DeleteItemInput(delete_item_request)
123+
raise NotImplementedError("batch_execute_statement response handling is not implemented")
116124

117125
def delete_item_response(self, delete_item_response):
118126
return self.boto3_converter.DeleteItemOutput(delete_item_response)
@@ -121,10 +129,10 @@ def execute_statement_request(self, execute_statement_request):
121129
return self.boto3_converter.ExecuteStatementInput(execute_statement_request)
122130

123131
def execute_statement_response(self, execute_statement_response):
124-
return self.boto3_converter.ExecuteStatementOutput(execute_statement_response)
132+
raise NotImplementedError("execute_statement response handling is not implemented")
125133

126134
def execute_transaction_request(self, execute_transaction_request):
127135
return self.boto3_converter.ExecuteTransactionInput(execute_transaction_request)
128136

129137
def execute_transaction_response(self, execute_transaction_response):
130-
return self.boto3_converter.ExecuteTransactionOutput(execute_transaction_response)
138+
raise NotImplementedError("execute_transaction response handling is not implemented")

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,25 @@ def put_item_response(self, put_item_response):
161161
return self.boto3_converter.PutItemOutput(put_item_response)
162162

163163
def update_item_response(self, update_item_response):
164-
return self.boto3_converter.UpdateItemOutput(update_item_response)
164+
raise NotImplementedError("update_item response handling is not implemented")
165+
166+
def batch_execute_statement_request(self, batch_execute_statement_request):
167+
return self.boto3_converter.BatchExecuteStatementInput(batch_execute_statement_request)
168+
169+
def batch_execute_statement_response(self, batch_execute_statement_response):
170+
raise NotImplementedError("batch_execute_statement response handling is not implemented")
165171

166172
def delete_item_response(self, delete_item_response):
167173
return self.boto3_converter.DeleteItemOutput(delete_item_response)
174+
175+
def execute_statement_request(self, execute_statement_request):
176+
return self.boto3_converter.ExecuteStatementInput(execute_statement_request)
177+
178+
def execute_statement_response(self, execute_statement_response):
179+
raise NotImplementedError("execute_statement response handling is not implemented")
180+
181+
def execute_transaction_request(self, execute_transaction_request):
182+
return self.boto3_converter.ExecuteTransactionInput(execute_transaction_request)
183+
184+
def execute_transaction_response(self, execute_transaction_response):
185+
raise NotImplementedError("execute_transaction response handling is not implemented")

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@
3030
basic_batch_write_item_delete_request_dict,
3131
basic_batch_write_item_put_request_ddb,
3232
basic_batch_write_item_put_request_dict,
33+
basic_batch_execute_statement_request_ddb,
34+
basic_batch_execute_statement_request_dict,
35+
basic_execute_statement_request_ddb,
36+
basic_execute_statement_request_dict,
37+
basic_execute_transaction_request_ddb,
38+
basic_execute_transaction_request_dict,
39+
basic_update_item_request_ddb,
40+
basic_update_item_request_dict,
3341
basic_delete_item_request_ddb,
3442
basic_delete_item_request_dict,
3543
basic_get_item_request_ddb,
@@ -375,6 +383,12 @@ def test_GIVEN_valid_transact_write_and_get_requests_WHEN_transact_write_and_get
375383
assert transact_write_delete_response["ResponseMetadata"]["HTTPStatusCode"] == 200
376384

377385

386+
@pytest.fixture
387+
def update_item_request(expect_standard_dictionaries, test_item):
388+
if expect_standard_dictionaries:
389+
return basic_update_item_request_dict(test_item)
390+
return basic_update_item_request_ddb(test_item)
391+
378392
def test_WHEN_update_item_THEN_raises_DynamoDbEncryptionTransformsException():
379393
"""Test that update_item raises DynamoDbEncryptionTransformsException."""
380394
# Given: Encrypted client and update item parameters
@@ -388,6 +402,12 @@ def test_WHEN_update_item_THEN_raises_DynamoDbEncryptionTransformsException():
388402
ExpressionAttributeValues={":val": {"S": "new value"}},
389403
)
390404

405+
@pytest.fixture
406+
def execute_statement_request(expect_standard_dictionaries, test_item):
407+
if expect_standard_dictionaries:
408+
return basic_execute_statement_request_dict(test_item)
409+
return basic_execute_statement_request_ddb(test_item)
410+
391411

392412
def test_WHEN_execute_statement_THEN_raises_DynamoDbEncryptionTransformsException():
393413
"""Test that execute_statement raises DynamoDbEncryptionTransformsException."""
@@ -400,6 +420,13 @@ def test_WHEN_execute_statement_THEN_raises_DynamoDbEncryptionTransformsExceptio
400420
)
401421

402422

423+
@pytest.fixture
424+
def execute_transaction_request(expect_standard_dictionaries, test_item):
425+
if expect_standard_dictionaries:
426+
return basic_execute_transaction_request_dict(test_item)
427+
return basic_execute_transaction_request_ddb(test_item)
428+
429+
403430
def test_WHEN_execute_transaction_THEN_raises_DynamoDbEncryptionTransformsException():
404431
"""Test that execute_transaction raises DynamoDbEncryptionTransformsException."""
405432
# Given: Encrypted client and update item parameters
@@ -415,6 +442,12 @@ def test_WHEN_execute_transaction_THEN_raises_DynamoDbEncryptionTransformsExcept
415442
],
416443
)
417444

445+
@pytest.fixture
446+
def batch_execute_statement_request(expect_standard_dictionaries, test_item):
447+
if expect_standard_dictionaries:
448+
return basic_batch_execute_statement_request_dict(test_item)
449+
return basic_batch_execute_statement_request_ddb(test_item)
450+
418451

419452
def test_WHEN_batch_execute_statement_THEN_raises_DynamoDbEncryptionTransformsException():
420453
"""Test that batch_execute_statement raises DynamoDbEncryptionTransformsException."""

DynamoDbEncryption/runtimes/python/test/requests.py

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

6262

63+
def base_update_item_request(item):
64+
"""Base structure for update_item requests."""
65+
return {"Key": {"partition_key": item["partition_key"], "sort_key": item["sort_key"]}, "UpdateExpression": "SET attribute1 = :val", "ExpressionAttributeValues": {":val": item["attribute1"]}}
66+
67+
68+
def base_execute_statement_request():
69+
"""Base structure for execute_statement requests."""
70+
return {"Statement": "SELECT * FROM " + INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}
71+
72+
73+
def base_execute_transaction_request():
74+
"""Base structure for execute_transaction requests."""
75+
return {"TransactStatements": [{"Statement": "SELECT * FROM " + INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}]}
76+
77+
78+
def base_batch_execute_statement_request():
79+
"""Base structure for batch_execute_statement requests."""
80+
return {"Statements": [{"Statement": "SELECT * FROM " + INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}]}
81+
82+
83+
def base_execute_transaction_request():
84+
"""Base structure for execute_transaction requests."""
85+
return {"TransactStatements": [{"Statement": "SELECT * FROM " + INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME}]}
86+
87+
6388
# Base exhaustive request structures that are shared between DDB and dict formats
6489

6590
# No exhaustive requests are intended to be able to be used as real requests.
@@ -300,7 +325,6 @@ def basic_transact_write_item_condition_check_request_ddb(keys):
300325
]
301326
return basic_transact_write_item_request_ddb(actions_with_keys)
302327

303-
304328
def basic_transact_get_item_request_ddb(keys):
305329
"""Get a transact_get_item request in DDB format for any keys."""
306330
return base_transact_get_item_request(keys)
@@ -323,6 +347,31 @@ def basic_scan_paginator_request(item):
323347
"ExpressionAttributeValues": {":pk": item["partition_key"], ":sk": item["sort_key"]},
324348
}
325349

350+
def basic_update_item_request_ddb(item):
351+
"""Get an update_item request in DDB format for any item."""
352+
base = base_update_item_request(item)
353+
return {"TableName": INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME, **base}
354+
355+
def basic_execute_statement_request_ddb():
356+
"""Get an execute_statement request in DDB format."""
357+
base = base_execute_statement_request()
358+
return base
359+
360+
def basic_execute_transaction_request_ddb():
361+
"""Get an execute_transaction request in DDB format."""
362+
base = base_execute_transaction_request()
363+
return base
364+
365+
def basic_batch_execute_statement_request_ddb():
366+
"""Get a batch_execute_statement request in DDB format."""
367+
base = base_batch_execute_statement_request()
368+
return base
369+
370+
def basic_delete_item_request_ddb(item):
371+
"""Get a delete_item request in DDB format for any item."""
372+
base = base_delete_item_request(item)
373+
return {"TableName": INTEG_TEST_DEFAULT_DYNAMODB_TABLE_NAME, **base}
374+
326375

327376
# Dict format request functions
328377

@@ -372,7 +421,6 @@ def exhaustive_get_item_request_dict(item):
372421
def basic_query_request_dict(item):
373422
"""Get a query request in dict format for any item."""
374423
base = base_query_request(item)
375-
# Override base KeyConditionExpression to use ConditionExpressions
376424
return base
377425

378426

@@ -465,3 +513,23 @@ def basic_transact_write_item_condition_check_request_dict(keys):
465513
def basic_transact_get_item_request_dict(keys):
466514
"""Get a transact_get_item request in dict format for any keys."""
467515
return base_transact_get_item_request(keys)
516+
517+
def basic_update_item_request_dict(item):
518+
"""Get an update_item request in DDB format for any item."""
519+
base = base_update_item_request(item)
520+
return base
521+
522+
def basic_execute_statement_request_dict():
523+
"""Get an execute_statement request in DDB format."""
524+
base = base_execute_statement_request()
525+
return base
526+
527+
def basic_execute_transaction_request_dict():
528+
"""Get an execute_transaction request in DDB format."""
529+
base = base_execute_transaction_request()
530+
return base
531+
532+
def basic_batch_execute_statement_request_dict():
533+
"""Get a batch_execute_statement request in DDB format."""
534+
base = base_batch_execute_statement_request()
535+
return base

DynamoDbEncryption/runtimes/python/test/responses.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,12 @@ def basic_transact_write_items_response(items):
155155
def basic_transact_get_items_response(items):
156156
"""Get a transact_get_items response in resource (ddb) format for any items."""
157157
return {"Responses": [{"Item": item} for item in items]}
158+
159+
def basic_update_item_response(item):
160+
"""Get an update_item response in resource (ddb) format for any item."""
161+
return {"Attributes": item}
162+
163+
164+
def basic_delete_item_response(item):
165+
"""Get a delete_item response in resource (ddb) format for any item."""
166+
return {"Attributes": item}

0 commit comments

Comments
 (0)