Skip to content

Commit 1eff5a7

Browse files
m
1 parent ccef01c commit 1eff5a7

File tree

2 files changed

+145
-131
lines changed
  • DynamoDbEncryption/runtimes/python/src/aws_database_encryption_sdk/encryptor

2 files changed

+145
-131
lines changed

DynamoDbEncryption/runtimes/python/src/aws_database_encryption_sdk/encryptor/client.py

Lines changed: 25 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -43,44 +43,25 @@ class EncryptedClient:
4343

4444
_client: botocore.client.BaseClient
4545
_encryption_config: DynamoDbTablesEncryptionConfig
46-
_expect_standard_dictionaries: Optional[bool]
4746
_transformer: DynamoDbEncryptionTransforms
4847

4948
def __init__(
5049
self,
5150
*,
5251
client: botocore.client.BaseClient,
5352
encryption_config: DynamoDbTablesEncryptionConfig,
54-
expect_standard_dictionaries: Optional[bool] = False,
5553
):
5654
"""
5755
Parameters:
5856
client (botocore.client.BaseClient): Initialized boto3 DynamoDB client
5957
encryption_config (DynamoDbTablesEncryptionConfig): Initialized DynamoDbTablesEncryptionConfig
60-
expect_standard_dictionaries (Optional[bool]): Should we expect items to be standard Python
61-
dictionaries? (default: False)
6258
"""
6359
self._client = client
6460
self._encryption_config = encryption_config
65-
self._expect_standard_dictionaries = expect_standard_dictionaries
6661
self._transformer = DynamoDbEncryptionTransforms(
6762
config = encryption_config
6863
)
6964

70-
def _maybe_transform_request_to_dynamodb_item(self, item_key, **kwargs):
71-
if self._expect_standard_dictionaries:
72-
dynamodb_item = dict_to_ddb(kwargs[item_key])
73-
dynamodb_input = kwargs
74-
dynamodb_input[item_key] = dynamodb_item
75-
else:
76-
dynamodb_input = kwargs
77-
return dynamodb_input
78-
79-
def _maybe_transform_response_item_to_python_dict(self, response):
80-
if self._expect_standard_dictionaries:
81-
if hasattr(response, "Item"):
82-
response["Item"] = ddb_to_dict(response["Item"])
83-
8465
def _copy_sdk_response_to_dbesdk_response(self, sdk_response, dbesdk_response):
8566
for sdk_response_key, sdk_response_value in sdk_response.items():
8667
if sdk_response_key not in dbesdk_response:
@@ -94,168 +75,142 @@ def _get_protected_methods(self):
9475
]
9576

9677
def put_item(self, **kwargs):
97-
# TODO: refactor shared logic (DDB/Python conversions, client/table)
98-
dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Item", **kwargs)
99-
# if self._expect_standard_dictionaries:
100-
# dynamodb_item = dict_to_ddb(kwargs["Item"])
101-
# dynamodb_input = kwargs
102-
# dynamodb_input["Item"] = dynamodb_item
103-
# else:
104-
# dynamodb_input = kwargs
10578
transformed_request = self._transformer.put_item_input_transform(
10679
PutItemInputTransformInput(
107-
sdk_input = dynamodb_input
80+
sdk_input = kwargs
10881
)
10982
).transformed_input
11083
sdk_response = self._client.put_item(**transformed_request)
11184
dbesdk_response = self._transformer.put_item_output_transform(
11285
PutItemOutputTransformInput(
113-
original_input = dynamodb_input,
86+
original_input = kwargs,
11487
sdk_output = sdk_response,
11588
)
11689
).transformed_output
11790
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
118-
self._maybe_transform_response_item_to_python_dict(dbesdk_response)
11991
return dbesdk_response
12092

12193
def get_item(self, **kwargs):
122-
dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Key", **kwargs)
12394
transformed_request = self._transformer.get_item_input_transform(
12495
GetItemInputTransformInput(
125-
sdk_input = dynamodb_input
96+
sdk_input = kwargs
12697
)
12798
).transformed_input
12899
sdk_response = self._client.get_item(**transformed_request)
129100
dbesdk_response = self._transformer.get_item_output_transform(
130101
GetItemOutputTransformInput(
131-
original_input = dynamodb_input,
102+
original_input = kwargs,
132103
sdk_output = sdk_response,
133104
)
134105
).transformed_output
135106
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
136-
self._maybe_transform_response_item_to_python_dict(dbesdk_response)
137107
return dbesdk_response
138108

139109
def batch_write_item(self, **kwargs):
140-
# dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Key", **kwargs)
141-
dynamodb_input = kwargs
142110
transformed_request = self._transformer.batch_write_item_input_transform(
143111
BatchWriteItemInputTransformInput(
144-
sdk_input = dynamodb_input
112+
sdk_input = kwargs
145113
)
146114
).transformed_input
147115
sdk_response = self._client.batch_write_item(**transformed_request)
148116
dbesdk_response = self._transformer.batch_write_item_output_transform(
149117
BatchWriteItemOutputTransformInput(
150-
original_input = dynamodb_input,
118+
original_input = kwargs,
151119
sdk_output = sdk_response,
152120
)
153121
).transformed_output
154122
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
155-
# self._maybe_transform_response_to_python_dict(dbesdk_response)
156123
return dbesdk_response
157124

158125
def batch_get_item(self, **kwargs):
159-
# dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Key", **kwargs)
160-
dynamodb_input = kwargs
161126
transformed_request = self._transformer.batch_get_item_input_transform(
162127
BatchGetItemInputTransformInput(
163-
sdk_input = dynamodb_input
128+
sdk_input = kwargs
164129
)
165130
).transformed_input
166131
sdk_response = self._client.batch_get_item(**transformed_request)
167132
dbesdk_response = self._transformer.batch_get_item_output_transform(
168133
BatchGetItemOutputTransformInput(
169-
original_input = dynamodb_input,
134+
original_input = kwargs,
170135
sdk_output = sdk_response,
171136
)
172137
).transformed_output
173138
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
174-
# self._maybe_transform_response_to_python_dict(dbesdk_response)
175139
return dbesdk_response
176140

177141
def scan(self, **kwargs):
178-
# dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Key", **kwargs)
179-
dynamodb_input = kwargs
180142
transformed_request = self._transformer.scan_input_transform(
181143
ScanInputTransformInput(
182-
sdk_input = dynamodb_input
144+
sdk_input = kwargs
183145
)
184146
).transformed_input
185147
sdk_response = self._client.scan(**transformed_request)
186148
dbesdk_response = self._transformer.scan_output_transform(
187149
ScanOutputTransformInput(
188-
original_input = dynamodb_input,
150+
original_input = kwargs,
189151
sdk_output = sdk_response,
190152
)
191153
).transformed_output
192154
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
193-
# self._maybe_transform_response_to_python_dict(dbesdk_response)
194155
return dbesdk_response
195156

196157
def transact_get_items(self, **kwargs):
197-
# dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Key", **kwargs)
198-
dynamodb_input = kwargs
199158
transformed_request = self._transformer.transact_get_items_input_transform(
200159
TransactGetItemsInputTransformInput(
201-
sdk_input = dynamodb_input
160+
sdk_input = kwargs
202161
)
203162
).transformed_input
204163
sdk_response = self._client.transact_get_items(**transformed_request)
205164
dbesdk_response = self._transformer.transact_get_items_output_transform(
206165
TransactGetItemsOutputTransformInput(
207-
original_input = dynamodb_input,
166+
original_input = kwargs,
208167
sdk_output = sdk_response,
209168
)
210169
).transformed_output
211170
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
212-
# self._maybe_transform_response_to_python_dict(dbesdk_response)
213171
return dbesdk_response
214172

215173
def transact_write_items(self, **kwargs):
216-
# dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Key", **kwargs)
217-
dynamodb_input = kwargs
218174
transformed_request = self._transformer.transact_write_items_input_transform(
219175
TransactWriteItemsInputTransformInput(
220-
sdk_input = dynamodb_input
176+
sdk_input = kwargs
221177
)
222178
).transformed_input
223179
sdk_response = self._client.transact_write_items(**transformed_request)
224180
dbesdk_response = self._transformer.transact_write_items_output_transform(
225181
TransactWriteItemsOutputTransformInput(
226-
original_input = dynamodb_input,
182+
original_input = kwargs,
227183
sdk_output = sdk_response,
228184
)
229185
).transformed_output
230186
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
231-
# self._maybe_transform_response_to_python_dict(dbesdk_response)
232187
return dbesdk_response
233188

234189
def query(self, **kwargs):
235-
# dynamodb_input = self._maybe_transform_request_to_dynamodb_item(item_key = "Key", **kwargs)
236-
dynamodb_input = kwargs
237190
transformed_request = self._transformer.query_input_transform(
238191
QueryInputTransformInput(
239-
sdk_input = dynamodb_input
192+
sdk_input = kwargs
240193
)
241194
).transformed_input
242195
sdk_response = self._client.query(**transformed_request)
243196
dbesdk_response = self._transformer.query_output_transform(
244197
QueryOutputTransformInput(
245-
original_input = dynamodb_input,
198+
original_input = kwargs,
246199
sdk_output = sdk_response,
247200
)
248201
).transformed_output
249202
self._copy_sdk_response_to_dbesdk_response(sdk_response, dbesdk_response)
250-
# self._maybe_transform_response_to_python_dict(dbesdk_response)
251203
return dbesdk_response
252204

253205
def __getattr__(self, name):
254-
if hasattr(self._client, name):
255-
print(f'calling underlyign client {name=}')
256-
return getattr(self._client, name)
257-
# __getattr__ doesn't find protected methods by default.
258-
elif name in self._get_protected_methods():
206+
# Before calling __getattr__, the class will look at its own methods.
207+
# Any methods defined on the class are called before getting to this point.
208+
209+
# __getattr__ doesn't find a class' protected methods by default.
210+
if name in self._get_protected_methods():
259211
return getattr(self, name)
212+
# If the class doesn't override a boto3 method, defer to boto3 now.
213+
elif hasattr(self._client, name):
214+
return getattr(self._client, name)
260215
else:
261-
raise KeyError("idk still")
216+
raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

0 commit comments

Comments
 (0)