remove prefix

This commit is contained in:
2025-05-22 16:54:43 -03:00
parent a51723f64f
commit 585bcfcc2a
5 changed files with 38 additions and 24 deletions

View File

@@ -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,