remove prefix
This commit is contained in:
@@ -151,6 +151,7 @@ if TYPE_CHECKING:
|
||||
sk: str
|
||||
table_name: str | None = None
|
||||
path_spec: str | None = None
|
||||
remove_prefix: str | None = None
|
||||
else:
|
||||
|
||||
class SortKey(str):
|
||||
@@ -174,6 +175,7 @@ else:
|
||||
*,
|
||||
table_name: str | None = None,
|
||||
path_spec: str | None = None,
|
||||
remove_prefix: str | None = None,
|
||||
) -> str:
|
||||
return super().__new__(cls, sk)
|
||||
|
||||
@@ -183,12 +185,14 @@ else:
|
||||
*,
|
||||
table_name: str | None = None,
|
||||
path_spec: str | None = None,
|
||||
remove_prefix: str | None = None,
|
||||
) -> None:
|
||||
# __init__ is used to store the parameters for later reference.
|
||||
# For immutable types like str, __init__ cannot change the instance's value.
|
||||
self.sk = sk
|
||||
self.table_name = table_name
|
||||
self.path_spec = path_spec
|
||||
self.remove_prefix = remove_prefix
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -524,8 +528,8 @@ class DynamoDBPersistenceLayer:
|
||||
try:
|
||||
response = self.dynamodb_client.query(**attrs)
|
||||
except ClientError as err:
|
||||
logger.info(attrs)
|
||||
logger.exception(err)
|
||||
logger.debug(attrs)
|
||||
raise
|
||||
else:
|
||||
return dict(
|
||||
@@ -545,8 +549,8 @@ class DynamoDBPersistenceLayer:
|
||||
try:
|
||||
response = self.dynamodb_client.get_item(**attrs)
|
||||
except ClientError as err:
|
||||
logger.info(attrs)
|
||||
logger.exception(err)
|
||||
logger.debug(attrs)
|
||||
raise
|
||||
else:
|
||||
return deserialize(response.get('Item', {}))
|
||||
@@ -563,8 +567,8 @@ class DynamoDBPersistenceLayer:
|
||||
try:
|
||||
self.dynamodb_client.put_item(**attrs)
|
||||
except ClientError as err:
|
||||
logger.info(attrs)
|
||||
logger.exception(err)
|
||||
logger.debug(attrs)
|
||||
raise
|
||||
else:
|
||||
return True
|
||||
@@ -596,8 +600,8 @@ class DynamoDBPersistenceLayer:
|
||||
try:
|
||||
self.dynamodb_client.update_item(**attrs)
|
||||
except ClientError as err:
|
||||
logger.info(attrs)
|
||||
logger.exception(err)
|
||||
logger.debug(attrs)
|
||||
raise
|
||||
else:
|
||||
return True
|
||||
@@ -630,8 +634,8 @@ class DynamoDBPersistenceLayer:
|
||||
try:
|
||||
self.dynamodb_client.delete_item(**attrs)
|
||||
except ClientError as err:
|
||||
logger.info(attrs)
|
||||
logger.exception(err)
|
||||
logger.debug(attrs)
|
||||
raise
|
||||
else:
|
||||
return True
|
||||
@@ -917,12 +921,20 @@ class DynamoDBCollection:
|
||||
head, tail = {}, items
|
||||
|
||||
def _getin(sk: SortKey, v: dict) -> dict:
|
||||
from glom import glom
|
||||
|
||||
v = omit((PK, SK), v)
|
||||
return glom(v, sk.path_spec) if sk.path_spec else v
|
||||
|
||||
return head | {k: _getin(k, item) for k, item in zip(sortkeys, tail) if item}
|
||||
if sk.path_spec:
|
||||
from glom import glom
|
||||
|
||||
return glom(v, sk.path_spec)
|
||||
return v
|
||||
|
||||
def _removeprefix(sk: SortKey) -> str:
|
||||
return sk.removeprefix(sk.remove_prefix) if sk.remove_prefix else sk
|
||||
|
||||
return head | {
|
||||
_removeprefix(k): _getin(k, item) for k, item in zip(sortkeys, tail) if item
|
||||
}
|
||||
|
||||
def query(
|
||||
self,
|
||||
@@ -1004,9 +1016,9 @@ class DynamoDBCollection:
|
||||
|
||||
match key.get(PK), key.get(SK):
|
||||
case ComposeKey(), _: # Remove prefix from Partition Key
|
||||
items = _remove_prefix(items, PK, key[PK].prefix + key[PK].delimiter)
|
||||
items = _removeprefix(items, PK, key[PK].prefix + key[PK].delimiter)
|
||||
case _, PrefixKey(): # Remove prefix from Sort Key
|
||||
items = _remove_prefix(items, SK, key[SK])
|
||||
items = _removeprefix(items, SK, key[SK])
|
||||
|
||||
return {
|
||||
'items': items,
|
||||
@@ -1014,7 +1026,7 @@ class DynamoDBCollection:
|
||||
}
|
||||
|
||||
|
||||
def _remove_prefix(
|
||||
def _removeprefix(
|
||||
items: list[dict[str, Any]],
|
||||
/,
|
||||
key: str,
|
||||
|
||||
Reference in New Issue
Block a user