remove prefix
This commit is contained in:
@@ -151,6 +151,7 @@ if TYPE_CHECKING:
|
|||||||
sk: str
|
sk: str
|
||||||
table_name: str | None = None
|
table_name: str | None = None
|
||||||
path_spec: str | None = None
|
path_spec: str | None = None
|
||||||
|
remove_prefix: str | None = None
|
||||||
else:
|
else:
|
||||||
|
|
||||||
class SortKey(str):
|
class SortKey(str):
|
||||||
@@ -174,6 +175,7 @@ else:
|
|||||||
*,
|
*,
|
||||||
table_name: str | None = None,
|
table_name: str | None = None,
|
||||||
path_spec: str | None = None,
|
path_spec: str | None = None,
|
||||||
|
remove_prefix: str | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
return super().__new__(cls, sk)
|
return super().__new__(cls, sk)
|
||||||
|
|
||||||
@@ -183,12 +185,14 @@ else:
|
|||||||
*,
|
*,
|
||||||
table_name: str | None = None,
|
table_name: str | None = None,
|
||||||
path_spec: str | None = None,
|
path_spec: str | None = None,
|
||||||
|
remove_prefix: str | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
# __init__ is used to store the parameters for later reference.
|
# __init__ is used to store the parameters for later reference.
|
||||||
# For immutable types like str, __init__ cannot change the instance's value.
|
# For immutable types like str, __init__ cannot change the instance's value.
|
||||||
self.sk = sk
|
self.sk = sk
|
||||||
self.table_name = table_name
|
self.table_name = table_name
|
||||||
self.path_spec = path_spec
|
self.path_spec = path_spec
|
||||||
|
self.remove_prefix = remove_prefix
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -524,8 +528,8 @@ class DynamoDBPersistenceLayer:
|
|||||||
try:
|
try:
|
||||||
response = self.dynamodb_client.query(**attrs)
|
response = self.dynamodb_client.query(**attrs)
|
||||||
except ClientError as err:
|
except ClientError as err:
|
||||||
|
logger.info(attrs)
|
||||||
logger.exception(err)
|
logger.exception(err)
|
||||||
logger.debug(attrs)
|
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
return dict(
|
return dict(
|
||||||
@@ -545,8 +549,8 @@ class DynamoDBPersistenceLayer:
|
|||||||
try:
|
try:
|
||||||
response = self.dynamodb_client.get_item(**attrs)
|
response = self.dynamodb_client.get_item(**attrs)
|
||||||
except ClientError as err:
|
except ClientError as err:
|
||||||
|
logger.info(attrs)
|
||||||
logger.exception(err)
|
logger.exception(err)
|
||||||
logger.debug(attrs)
|
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
return deserialize(response.get('Item', {}))
|
return deserialize(response.get('Item', {}))
|
||||||
@@ -563,8 +567,8 @@ class DynamoDBPersistenceLayer:
|
|||||||
try:
|
try:
|
||||||
self.dynamodb_client.put_item(**attrs)
|
self.dynamodb_client.put_item(**attrs)
|
||||||
except ClientError as err:
|
except ClientError as err:
|
||||||
|
logger.info(attrs)
|
||||||
logger.exception(err)
|
logger.exception(err)
|
||||||
logger.debug(attrs)
|
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
@@ -596,8 +600,8 @@ class DynamoDBPersistenceLayer:
|
|||||||
try:
|
try:
|
||||||
self.dynamodb_client.update_item(**attrs)
|
self.dynamodb_client.update_item(**attrs)
|
||||||
except ClientError as err:
|
except ClientError as err:
|
||||||
|
logger.info(attrs)
|
||||||
logger.exception(err)
|
logger.exception(err)
|
||||||
logger.debug(attrs)
|
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
@@ -630,8 +634,8 @@ class DynamoDBPersistenceLayer:
|
|||||||
try:
|
try:
|
||||||
self.dynamodb_client.delete_item(**attrs)
|
self.dynamodb_client.delete_item(**attrs)
|
||||||
except ClientError as err:
|
except ClientError as err:
|
||||||
|
logger.info(attrs)
|
||||||
logger.exception(err)
|
logger.exception(err)
|
||||||
logger.debug(attrs)
|
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
@@ -917,12 +921,20 @@ class DynamoDBCollection:
|
|||||||
head, tail = {}, items
|
head, tail = {}, items
|
||||||
|
|
||||||
def _getin(sk: SortKey, v: dict) -> dict:
|
def _getin(sk: SortKey, v: dict) -> dict:
|
||||||
from glom import glom
|
|
||||||
|
|
||||||
v = omit((PK, SK), v)
|
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(
|
def query(
|
||||||
self,
|
self,
|
||||||
@@ -1004,9 +1016,9 @@ class DynamoDBCollection:
|
|||||||
|
|
||||||
match key.get(PK), key.get(SK):
|
match key.get(PK), key.get(SK):
|
||||||
case ComposeKey(), _: # Remove prefix from Partition Key
|
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
|
case _, PrefixKey(): # Remove prefix from Sort Key
|
||||||
items = _remove_prefix(items, SK, key[SK])
|
items = _removeprefix(items, SK, key[SK])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'items': items,
|
'items': items,
|
||||||
@@ -1014,7 +1026,7 @@ class DynamoDBCollection:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _remove_prefix(
|
def _removeprefix(
|
||||||
items: list[dict[str, Any]],
|
items: list[dict[str, Any]],
|
||||||
/,
|
/,
|
||||||
key: str,
|
key: str,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "layercake"
|
name = "layercake"
|
||||||
version = "0.2.19"
|
version = "0.2.21"
|
||||||
description = "Packages shared dependencies to optimize deployment and ensure consistency across functions."
|
description = "Packages shared dependencies to optimize deployment and ensure consistency across functions."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
authors = [
|
authors = [
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
{"id": {"S": "logs#5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "2024-02-08T16:42:33.776409-03:00"}, "action": {"S": "OPEN_EMAIL"}}
|
{"id": {"S": "logs#5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "2024-02-08T16:42:33.776409-03:00"}, "action": {"S": "OPEN_EMAIL"}}
|
||||||
{"id": {"S": "logs#5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "2019-03-25T00:00:00-03:00"}, "action": {"S": "CLICK_EMAIL"}}
|
{"id": {"S": "logs#5OxmMjL-ujoR5IMGegQz"}, "sk": {"S": "2019-03-25T00:00:00-03:00"}, "action": {"S": "CLICK_EMAIL"}}
|
||||||
{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "0"}, "name": {"S": "EDUSEG"}, "cnpj": {"S": "15608435000190"}, "email": {"S": "org+15608435000190@users.noreply.betaeducacao.com.br"}}
|
{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "0"}, "name": {"S": "EDUSEG"}, "cnpj": {"S": "15608435000190"}, "email": {"S": "org+15608435000190@users.noreply.betaeducacao.com.br"}}
|
||||||
{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "payment_policy"}, "due_days": {"N": "90"}}
|
{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "metadata#payment_policy"}, "due_days": {"N": "90"}}
|
||||||
{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "billing_policy"}, "billing_day": {"N": "1"}, "payment_method": {"S": "PIX"}}
|
{"id": {"S": "cJtK9SsnJhKPyxESe7g3DG"}, "sk": {"S": "metadata#billing_policy"}, "billing_day": {"N": "1"}, "payment_method": {"S": "PIX"}}
|
||||||
|
|||||||
@@ -111,9 +111,8 @@ def test_transact_write_items(
|
|||||||
exc_cls=EmailConflictError,
|
exc_cls=EmailConflictError,
|
||||||
)
|
)
|
||||||
|
|
||||||
with pytest.raises(EmailConflictError) as exc:
|
with pytest.raises(EmailConflictError):
|
||||||
dynamodb_persistence_layer.transact_write_items(transact)
|
dynamodb_persistence_layer.transact_write_items(transact)
|
||||||
# print(exc.value)
|
|
||||||
|
|
||||||
|
|
||||||
def test_collection_get_item(
|
def test_collection_get_item(
|
||||||
@@ -257,8 +256,8 @@ def test_collection_get_items(
|
|||||||
doc = collect.get_items(
|
doc = collect.get_items(
|
||||||
TransactKey('cJtK9SsnJhKPyxESe7g3DG')
|
TransactKey('cJtK9SsnJhKPyxESe7g3DG')
|
||||||
+ SortKey('0')
|
+ SortKey('0')
|
||||||
+ SortKey('billing_policy', path_spec='payment_method')
|
+ SortKey('metadata#billing_policy', path_spec='payment_method')
|
||||||
+ SortKey('payment_policy'),
|
+ SortKey('metadata#payment_policy', remove_prefix='metadata#'),
|
||||||
)
|
)
|
||||||
|
|
||||||
assert doc == {
|
assert doc == {
|
||||||
@@ -267,7 +266,7 @@ def test_collection_get_items(
|
|||||||
'id': 'cJtK9SsnJhKPyxESe7g3DG',
|
'id': 'cJtK9SsnJhKPyxESe7g3DG',
|
||||||
'cnpj': '15608435000190',
|
'cnpj': '15608435000190',
|
||||||
'email': 'org+15608435000190@users.noreply.betaeducacao.com.br',
|
'email': 'org+15608435000190@users.noreply.betaeducacao.com.br',
|
||||||
'billing_policy': 'PIX',
|
'metadata#billing_policy': 'PIX',
|
||||||
'payment_policy': {'due_days': Decimal('90')},
|
'payment_policy': {'due_days': Decimal('90')},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,12 +279,15 @@ def test_collection_get_items_unflatten(
|
|||||||
|
|
||||||
doc = collect.get_items(
|
doc = collect.get_items(
|
||||||
TransactKey('cJtK9SsnJhKPyxESe7g3DG')
|
TransactKey('cJtK9SsnJhKPyxESe7g3DG')
|
||||||
+ SortKey('billing_policy')
|
+ SortKey('metadata#billing_policy')
|
||||||
+ SortKey('payment_policy'),
|
+ SortKey('metadata#payment_policy', remove_prefix='metadata#'),
|
||||||
flatten_top=False,
|
flatten_top=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert doc == {
|
assert doc == {
|
||||||
'billing_policy': {'billing_day': Decimal('1'), 'payment_method': 'PIX'},
|
'metadata#billing_policy': {
|
||||||
|
'billing_day': Decimal('1'),
|
||||||
|
'payment_method': 'PIX',
|
||||||
|
},
|
||||||
'payment_policy': {'due_days': Decimal('90')},
|
'payment_policy': {'due_days': Decimal('90')},
|
||||||
}
|
}
|
||||||
|
|||||||
2
layercake/uv.lock
generated
2
layercake/uv.lock
generated
@@ -589,7 +589,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "layercake"
|
name = "layercake"
|
||||||
version = "0.2.19"
|
version = "0.2.20"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "arnparse" },
|
{ name = "arnparse" },
|
||||||
|
|||||||
Reference in New Issue
Block a user