wip middleware
This commit is contained in:
@@ -173,15 +173,6 @@ class KeyPair(Key):
|
||||
|
||||
|
||||
class TransactItems:
|
||||
"""
|
||||
Documentation:
|
||||
--------------
|
||||
- https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html
|
||||
- https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactGetItems.html
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.transact_write_items
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.transact_get_items
|
||||
"""
|
||||
|
||||
def __init__(self, table_name: str) -> None:
|
||||
self.table_name = table_name
|
||||
self.items: list[dict] = []
|
||||
@@ -336,18 +327,6 @@ class TransactItems:
|
||||
|
||||
|
||||
class DynamoDBPersistenceLayer:
|
||||
"""
|
||||
Documentation:
|
||||
--------------
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.query
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.get_item
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.put_item
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.update_item
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.delete_item
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.transact_get_items
|
||||
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.transact_write_items
|
||||
"""
|
||||
|
||||
def __init__(self, table_name: str, dynamodb_client) -> None:
|
||||
self.table_name = table_name
|
||||
self.dynamodb_client = dynamodb_client
|
||||
@@ -393,7 +372,7 @@ class DynamoDBPersistenceLayer:
|
||||
attrs['Limit'] = limit
|
||||
|
||||
try:
|
||||
res = self.dynamodb_client.query(
|
||||
response = self.dynamodb_client.query(
|
||||
TableName=self.table_name,
|
||||
KeyConditionExpression=key_cond_expr,
|
||||
**attrs,
|
||||
@@ -403,17 +382,17 @@ class DynamoDBPersistenceLayer:
|
||||
raise
|
||||
else:
|
||||
return dict(
|
||||
items=[deserialize(v) for v in res.get('Items', [])],
|
||||
last_key=res.get('LastEvaluatedKey', None),
|
||||
items=[deserialize(v) for v in response.get('Items', [])],
|
||||
last_key=response.get('LastEvaluatedKey', None),
|
||||
)
|
||||
|
||||
def get_item(self, key: dict) -> dict:
|
||||
"""The GetItem operation returns a set of attributes for the item with the given primary key.
|
||||
If there is no matching item, GetItem does not return any data and there will be no Item element in the res.
|
||||
If there is no matching item, GetItem does not return any data and there will be no Item element in the response.
|
||||
"""
|
||||
|
||||
try:
|
||||
res = self.dynamodb_client.get_item(
|
||||
response = self.dynamodb_client.get_item(
|
||||
TableName=self.table_name,
|
||||
Key=serialize(key),
|
||||
)
|
||||
@@ -421,7 +400,7 @@ class DynamoDBPersistenceLayer:
|
||||
logger.exception(err)
|
||||
raise
|
||||
else:
|
||||
return deserialize(res.get('Item', {}))
|
||||
return deserialize(response.get('Item', {}))
|
||||
|
||||
def put_item(self, item: dict, *, cond_expr: str | None = None) -> bool:
|
||||
attrs = {}
|
||||
@@ -508,14 +487,17 @@ class DynamoDBPersistenceLayer:
|
||||
|
||||
def transact_get_items(self, transact_items: TransactItems) -> list[dict]:
|
||||
try:
|
||||
res = self.dynamodb_client.transact_get_items(
|
||||
response = self.dynamodb_client.transact_get_items(
|
||||
TransactItems=transact_items.items
|
||||
)
|
||||
except ClientError as err:
|
||||
logger.exception(err)
|
||||
raise
|
||||
else:
|
||||
return [deserialize(res.get('Item', {})) for res in res.get('ress', [])]
|
||||
return [
|
||||
deserialize(response.get('Item', {}))
|
||||
for response in response.get('Responses', [])
|
||||
]
|
||||
|
||||
def transact_write_items(self, transact_items: TransactItems) -> bool:
|
||||
try:
|
||||
@@ -572,6 +554,7 @@ class DynamoDBCollection:
|
||||
def __init__(
|
||||
self,
|
||||
persistence_layer: DynamoDBPersistenceLayer,
|
||||
/,
|
||||
exc_cls: Type[ValueError] = MissingError,
|
||||
tz: str = TZ,
|
||||
) -> None:
|
||||
@@ -586,7 +569,7 @@ class DynamoDBCollection:
|
||||
|
||||
def get_item(
|
||||
self,
|
||||
key: KeyPair,
|
||||
key: Key,
|
||||
path_spec: str | None = None,
|
||||
raise_on_error: bool = True,
|
||||
default: Any = None,
|
||||
@@ -607,7 +590,7 @@ class DynamoDBCollection:
|
||||
|
||||
def put_item(
|
||||
self,
|
||||
key: KeyPair,
|
||||
key: Key,
|
||||
ttl: int | datetime | None = None,
|
||||
**kwargs: Any,
|
||||
) -> bool:
|
||||
@@ -629,13 +612,11 @@ class DynamoDBCollection:
|
||||
}
|
||||
)
|
||||
|
||||
return self.persistence_layer.put_item(
|
||||
item=key | {'create_date': now_} | kwargs
|
||||
)
|
||||
return self.persistence_layer.put_item(item=key | kwargs)
|
||||
|
||||
def delete_item(
|
||||
self,
|
||||
key: KeyPair,
|
||||
key: Key,
|
||||
*,
|
||||
cond_expr: str | None = None,
|
||||
expr_attr_names: dict | None = None,
|
||||
@@ -665,7 +646,7 @@ class DynamoDBCollection:
|
||||
else '#pk = :pk'
|
||||
)
|
||||
|
||||
res = self.persistence_layer.query(
|
||||
response = self.persistence_layer.query(
|
||||
key_cond_expr=key_cond_expr,
|
||||
expr_attr_name=key.expr_attr_name() | expr_attr_name,
|
||||
expr_attr_values=key.expr_attr_values() | expr_attr_values,
|
||||
@@ -675,8 +656,10 @@ class DynamoDBCollection:
|
||||
start_key=_startkey_b64decode(start_key) if start_key else {},
|
||||
)
|
||||
|
||||
items = res['items']
|
||||
last_key = _startkey_b64encode(res['last_key']) if res['last_key'] else None
|
||||
items = response['items']
|
||||
last_key = (
|
||||
_startkey_b64encode(response['last_key']) if response['last_key'] else None
|
||||
)
|
||||
|
||||
match key.get(PK), key.get(SK):
|
||||
case ComposeKey(), _: # Remove prefix from Partition Key
|
||||
|
||||
Reference in New Issue
Block a user