@@ -69,12 +69,14 @@ class EncryptedClient(EncryptedBotoInterface):
69
69
* ``transact_write_items``
70
70
* ``delete_item``
71
71
72
+ Any calls to ``update_item`` can only update unsigned attributes. If an attribute to be updated is marked as signed,
73
+ this operation will raise a ``DynamoDbEncryptionTransformsException``.
74
+
72
75
The following operations are not supported and will raise DynamoDbEncryptionTransformsException:
73
76
74
77
* ``execute_statement``
75
78
* ``execute_transaction``
76
79
* ``batch_execute_statement``
77
- * ``update_item``
78
80
79
81
Any other operations on this class will defer to the underlying boto3 DynamoDB client's implementation.
80
82
@@ -383,6 +385,70 @@ def delete_item(self, **kwargs):
383
385
output_item_to_ddb_transform_method = self ._resource_to_client_shape_converter .delete_item_response ,
384
386
)
385
387
388
+ def update_item (self , ** kwargs ):
389
+ """
390
+ Update an unsigned attribute in an item on a table.
391
+
392
+ If the attribute is signed, this operation will raise DynamoDbEncryptionTransformsException.
393
+
394
+ The input and output syntaxes match those for the boto3 DynamoDB client ``update_item`` API:
395
+
396
+ https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/update_item.html
397
+
398
+ Args:
399
+ **kwargs: Keyword arguments to pass to the operation. This matches the boto3 client ``update_item``
400
+ request syntax.
401
+
402
+ Returns:
403
+ dict: The response from DynamoDB. This matches the boto3 client ``update_item`` response syntax.
404
+
405
+ Raises:
406
+ DynamoDbEncryptionTransformsException: If an attribute specified in the ``UpdateExpression`` is signed.
407
+
408
+ """
409
+ return self ._client_operation_logic (
410
+ operation_input = kwargs ,
411
+ input_item_to_ddb_transform_method = self ._resource_to_client_shape_converter .update_item_request ,
412
+ input_item_to_dict_transform_method = self ._client_to_resource_shape_converter .update_item_request ,
413
+ input_transform_method = self ._transformer .update_item_input_transform ,
414
+ input_transform_shape = UpdateItemInputTransformInput ,
415
+ output_transform_method = self ._transformer .update_item_output_transform ,
416
+ output_transform_shape = UpdateItemOutputTransformInput ,
417
+ client_method = self ._client .update_item ,
418
+ output_item_to_dict_transform_method = self ._client_to_resource_shape_converter .update_item_response ,
419
+ output_item_to_ddb_transform_method = self ._resource_to_client_shape_converter .update_item_response ,
420
+ )
421
+
422
+ def get_paginator (self , operation_name : str ) -> EncryptedPaginator | botocore .client .Paginator :
423
+ """
424
+ Get a paginator from the underlying client.
425
+
426
+ If the paginator requested is for "scan" or "query", the paginator returned will
427
+ transparently decrypt the returned items.
428
+
429
+ https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#paginators
430
+
431
+ Args:
432
+ operation_name (str): Name of operation for which to get paginator
433
+
434
+ Returns:
435
+ EncryptedPaginator | botocore.client.Paginator: An EncryptedPaginator that will transparently decrypt items
436
+ for ``scan``/``query`` operations; for other operations, the standard paginator.
437
+
438
+ """
439
+ paginator = self ._client .get_paginator (operation_name )
440
+
441
+ if operation_name in ("scan" , "query" ):
442
+ return EncryptedPaginator (
443
+ paginator = paginator ,
444
+ encryption_config = self ._encryption_config ,
445
+ expect_standard_dictionaries = self ._expect_standard_dictionaries ,
446
+ )
447
+ else :
448
+ # The paginator can still be used for list_backups, list_tables, and list_tags_of_resource,
449
+ # but there is nothing to encrypt/decrypt in these operations.
450
+ return paginator
451
+
386
452
def execute_statement (self , ** kwargs ):
387
453
"""
388
454
Not implemented. Raises DynamoDbEncryptionTransformsException.
@@ -431,30 +497,6 @@ def execute_transaction(self, **kwargs):
431
497
output_item_to_ddb_transform_method = self ._resource_to_client_shape_converter .execute_transaction_response ,
432
498
)
433
499
434
- def update_item (self , ** kwargs ):
435
- """
436
- Not implemented. Raises DynamoDbEncryptionTransformsException.
437
-
438
- Args:
439
- **kwargs: Any arguments passed to this method
440
-
441
- Raises:
442
- DynamoDbEncryptionTransformsException: This operation is not supported on encrypted tables.
443
-
444
- """
445
- return self ._client_operation_logic (
446
- operation_input = kwargs ,
447
- input_item_to_ddb_transform_method = self ._resource_to_client_shape_converter .update_item_request ,
448
- input_item_to_dict_transform_method = self ._client_to_resource_shape_converter .update_item_request ,
449
- input_transform_method = self ._transformer .update_item_input_transform ,
450
- input_transform_shape = UpdateItemInputTransformInput ,
451
- output_transform_method = self ._transformer .update_item_output_transform ,
452
- output_transform_shape = UpdateItemOutputTransformInput ,
453
- client_method = self ._client .update_item ,
454
- output_item_to_dict_transform_method = self ._client_to_resource_shape_converter .update_item_response ,
455
- output_item_to_ddb_transform_method = self ._resource_to_client_shape_converter .update_item_response ,
456
- )
457
-
458
500
def batch_execute_statement (self , ** kwargs ):
459
501
"""
460
502
Not implemented. Raises DynamoDbEncryptionTransformsException.
@@ -479,36 +521,6 @@ def batch_execute_statement(self, **kwargs):
479
521
output_item_to_ddb_transform_method = self ._resource_to_client_shape_converter .batch_execute_statement_response ,
480
522
)
481
523
482
- def get_paginator (self , operation_name : str ) -> EncryptedPaginator | botocore .client .Paginator :
483
- """
484
- Get a paginator from the underlying client.
485
-
486
- If the paginator requested is for "scan" or "query", the paginator returned will
487
- transparently decrypt the returned items.
488
-
489
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#paginators
490
-
491
- Args:
492
- operation_name (str): Name of operation for which to get paginator
493
-
494
- Returns:
495
- EncryptedPaginator | botocore.client.Paginator: An EncryptedPaginator that will transparently decrypt items
496
- for ``scan``/``query`` operations; for other operations, the standard paginator.
497
-
498
- """
499
- paginator = self ._client .get_paginator (operation_name )
500
-
501
- if operation_name in ("scan" , "query" ):
502
- return EncryptedPaginator (
503
- paginator = paginator ,
504
- encryption_config = self ._encryption_config ,
505
- expect_standard_dictionaries = self ._expect_standard_dictionaries ,
506
- )
507
- else :
508
- # The paginator can still be used for list_backups, list_tables, and list_tags_of_resource,
509
- # but there is nothing to encrypt/decrypt in these operations.
510
- return paginator
511
-
512
524
def _client_operation_logic (
513
525
self ,
514
526
* ,
0 commit comments