update layercake

This commit is contained in:
2025-03-26 17:41:10 -03:00
parent 3d6801df70
commit b1e8f19d39
8 changed files with 70 additions and 25 deletions

View File

@@ -22,9 +22,14 @@ LIMIT = 25
@router.get('/')
def me():
user: AuthenticatedUser = router.context['user']
acls = collect.get_items(KeyPair(user.id, PrefixKey('acls#')), limit=LIMIT)
workspaces = collect.get_items(KeyPair(user.id, PrefixKey('orgs#')), limit=LIMIT)
acls = collect.get_items(
KeyPair(user.id, PrefixKey('acls#')),
limit=LIMIT,
)
workspaces = collect.get_items(
KeyPair(user.id, PrefixKey('orgs#')),
limit=LIMIT,
)
return {
'acls': acls['items'],

View File

@@ -55,7 +55,12 @@ def get_users():
)
@router.post('/', compress=True, tags=['User'], summary='Create user')
@router.post(
'/',
compress=True,
tags=['User'],
summary='Create user',
)
def post_user(payload: User):
return Response(status_code=HTTPStatus.CREATED)
@@ -65,12 +70,17 @@ class NewPasswordPayload(BaseModel):
new_password: Annotated[str, StringConstraints(min_length=6)]
@router.patch('/<id>', compress=True, tags=['User'], summary='')
@router.patch('/<id>', compress=True, tags=['User'])
def patch_reset(id: str, payload: NewPasswordPayload):
return Response(status_code=HTTPStatus.OK)
@router.get('/<id>', compress=True, tags=['User'], summary='Get user')
@router.get(
'/<id>',
compress=True,
tags=['User'],
summary='Get user',
)
def get_user(id: str):
return collect.get_item(KeyPair(id, '0'))
@@ -87,11 +97,9 @@ def get_idp(id: str):
summary='Get user emails',
)
def get_emails(id: str):
start_key = router.current_event.get_query_string_value('start_key', None)
return collect.get_items(
KeyPair(id, PrefixKey('emails#')),
start_key=start_key,
start_key=router.current_event.get_query_string_value('start_key', None),
)
@@ -102,13 +110,11 @@ def get_emails(id: str):
summary='Get user logs',
)
def get_logs(id: str):
start_key = router.current_event.get_query_string_value('start_key', None)
return collect.get_items(
# Post-migration: uncomment to enable PartitionKey with a composite key (id with `logs` prefix).
# PartitionKey(ComposeKey(id, prefix='logs')),
PartitionKey(ComposeKey(id, prefix='log', delimiter=':')),
start_key=start_key,
start_key=router.current_event.get_query_string_value('start_key', None),
)
@@ -119,9 +125,7 @@ def get_logs(id: str):
summary='Get user orgs',
)
def get_orgs(id: str):
start_key = router.current_event.get_query_string_value('start_key', None)
return collect.get_items(
KeyPair(id, PrefixKey('orgs#')),
start_key=start_key,
start_key=router.current_event.get_query_string_value('start_key', None),
)

View File

@@ -23,7 +23,7 @@ Globals:
Architectures:
- x86_64
Layers:
- !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:18
- !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:20
Environment:
Variables:
TZ: America/Sao_Paulo

View File

@@ -40,6 +40,26 @@ def test_get_emails(
}
def test_get_orgs(
mock_app,
dynamodb_seeds,
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
http_api_proxy: HttpApiProxy,
lambda_context: LambdaContext,
):
mock_app.users.collect = DynamoDBCollection(dynamodb_persistence_layer)
r = mock_app.lambda_handler(
http_api_proxy(
raw_path='/users/5OxmMjL-ujoR5IMGegQz/orgs',
method=HTTPMethod.GET,
),
lambda_context,
)
assert r['statusCode'] == HTTPStatus.OK
def test_get_logs(
mock_app,
dynamodb_seeds,
@@ -57,9 +77,23 @@ def test_get_logs(
lambda_context,
)
# This data was added from seeds
assert r['statusCode'] == HTTPStatus.OK
print(r['body'])
assert json.loads(r['body']) == {
'items': [
{
'sk': '2024-02-08T16:42:33.776409-03:00',
'action': 'OPEN_EMAIL',
'id': '5OxmMjL-ujoR5IMGegQz',
},
{
'sk': '2019-03-25T00:00:00-03:00',
'action': 'CLICK_EMAIL',
'id': '5OxmMjL-ujoR5IMGegQz',
},
],
'last_key': None,
}
def test_post_user(

2
http-api/uv.lock generated
View File

@@ -444,7 +444,7 @@ wheels = [
[[package]]
name = "layercake"
version = "0.1.1"
version = "0.1.3"
source = { directory = "../layercake" }
dependencies = [
{ name = "aws-lambda-powertools", extra = ["all"] },

View File

@@ -0,0 +1 @@
## Layercake

View File

@@ -130,6 +130,10 @@ class PartitionKey(Key):
def __init__(self, pk: str) -> None:
super().__init__(**{PK: pk})
def __repr__(self) -> str:
pk = self[PK]
return f'PartitionKey({pk!r})'
def expr_attr_name(self) -> dict:
return {'#pk': PK}
@@ -653,13 +657,10 @@ class DynamoDBCollection:
else '#pk = :pk'
)
expr_attr_name.update(key.expr_attr_name())
expr_attr_values.update(key.expr_attr_values())
res = self.persistence_layer.query(
key_cond_expr=key_cond_expr,
expr_attr_name=expr_attr_name,
expr_attr_values=expr_attr_values,
expr_attr_name=key.expr_attr_name() | expr_attr_name,
expr_attr_values=key.expr_attr_values() | expr_attr_values,
filter_expr=filter_expr,
index_forward=index_forward,
limit=limit,

View File

@@ -1,6 +1,6 @@
[project]
name = "layercake"
version = "0.1.2"
version = "0.1.3"
description = "Add your description here"
readme = "README.md"
authors = [