in src/dynamodb_encryption_sdk/internal/utils.py [0:0]
def decrypt_batch_get_item(decrypt_method, crypto_config_method, read_method, **kwargs):
# type: (Callable, Callable, Callable, **Any) -> Dict
# narrow this down
# https://github.com/aws/aws-dynamodb-encryption-python/issues/66
"""Transparently decrypt multiple items after getting them in a batch request.
:param callable decrypt_method: Method to use to decrypt items
:param callable crypto_config_method: Method that accepts ``kwargs`` and provides a :class:`CryptoConfig`
:param callable read_method: Method that reads from the table
:param ``**kwargs``: Keyword arguments to pass to ``read_method``
:return: DynamoDB response
:rtype: dict
"""
request_crypto_config = kwargs.pop("crypto_config", None)
for _table_name, table_kwargs in kwargs["RequestItems"].items():
validate_get_arguments(table_kwargs)
response = read_method(**kwargs)
for table_name, items in response["Responses"].items():
if request_crypto_config is not None:
crypto_config = request_crypto_config
else:
crypto_config = crypto_config_method(table_name=table_name)
for pos, value in enumerate(items):
items[pos] = decrypt_method(
item=value, crypto_config=crypto_config.with_item(_item_transformer(decrypt_method)(items[pos]))
)
return response