update layercake
This commit is contained in:
@@ -22,9 +22,14 @@ LIMIT = 25
|
|||||||
@router.get('/')
|
@router.get('/')
|
||||||
def me():
|
def me():
|
||||||
user: AuthenticatedUser = router.context['user']
|
user: AuthenticatedUser = router.context['user']
|
||||||
|
acls = collect.get_items(
|
||||||
acls = collect.get_items(KeyPair(user.id, PrefixKey('acls#')), limit=LIMIT)
|
KeyPair(user.id, PrefixKey('acls#')),
|
||||||
workspaces = collect.get_items(KeyPair(user.id, PrefixKey('orgs#')), limit=LIMIT)
|
limit=LIMIT,
|
||||||
|
)
|
||||||
|
workspaces = collect.get_items(
|
||||||
|
KeyPair(user.id, PrefixKey('orgs#')),
|
||||||
|
limit=LIMIT,
|
||||||
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'acls': acls['items'],
|
'acls': acls['items'],
|
||||||
|
|||||||
@@ -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):
|
def post_user(payload: User):
|
||||||
return Response(status_code=HTTPStatus.CREATED)
|
return Response(status_code=HTTPStatus.CREATED)
|
||||||
|
|
||||||
@@ -65,12 +70,17 @@ class NewPasswordPayload(BaseModel):
|
|||||||
new_password: Annotated[str, StringConstraints(min_length=6)]
|
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):
|
def patch_reset(id: str, payload: NewPasswordPayload):
|
||||||
return Response(status_code=HTTPStatus.OK)
|
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):
|
def get_user(id: str):
|
||||||
return collect.get_item(KeyPair(id, '0'))
|
return collect.get_item(KeyPair(id, '0'))
|
||||||
|
|
||||||
@@ -87,11 +97,9 @@ def get_idp(id: str):
|
|||||||
summary='Get user emails',
|
summary='Get user emails',
|
||||||
)
|
)
|
||||||
def get_emails(id: str):
|
def get_emails(id: str):
|
||||||
start_key = router.current_event.get_query_string_value('start_key', None)
|
|
||||||
|
|
||||||
return collect.get_items(
|
return collect.get_items(
|
||||||
KeyPair(id, PrefixKey('emails#')),
|
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',
|
summary='Get user logs',
|
||||||
)
|
)
|
||||||
def get_logs(id: str):
|
def get_logs(id: str):
|
||||||
start_key = router.current_event.get_query_string_value('start_key', None)
|
|
||||||
|
|
||||||
return collect.get_items(
|
return collect.get_items(
|
||||||
# Post-migration: uncomment to enable PartitionKey with a composite key (id with `logs` prefix).
|
# Post-migration: uncomment to enable PartitionKey with a composite key (id with `logs` prefix).
|
||||||
# PartitionKey(ComposeKey(id, prefix='logs')),
|
# PartitionKey(ComposeKey(id, prefix='logs')),
|
||||||
PartitionKey(ComposeKey(id, prefix='log', delimiter=':')),
|
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',
|
summary='Get user orgs',
|
||||||
)
|
)
|
||||||
def get_orgs(id: str):
|
def get_orgs(id: str):
|
||||||
start_key = router.current_event.get_query_string_value('start_key', None)
|
|
||||||
|
|
||||||
return collect.get_items(
|
return collect.get_items(
|
||||||
KeyPair(id, PrefixKey('orgs#')),
|
KeyPair(id, PrefixKey('orgs#')),
|
||||||
start_key=start_key,
|
start_key=router.current_event.get_query_string_value('start_key', None),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Globals:
|
|||||||
Architectures:
|
Architectures:
|
||||||
- x86_64
|
- x86_64
|
||||||
Layers:
|
Layers:
|
||||||
- !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:18
|
- !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:20
|
||||||
Environment:
|
Environment:
|
||||||
Variables:
|
Variables:
|
||||||
TZ: America/Sao_Paulo
|
TZ: America/Sao_Paulo
|
||||||
|
|||||||
@@ -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(
|
def test_get_logs(
|
||||||
mock_app,
|
mock_app,
|
||||||
dynamodb_seeds,
|
dynamodb_seeds,
|
||||||
@@ -57,9 +77,23 @@ def test_get_logs(
|
|||||||
lambda_context,
|
lambda_context,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# This data was added from seeds
|
||||||
assert r['statusCode'] == HTTPStatus.OK
|
assert r['statusCode'] == HTTPStatus.OK
|
||||||
|
assert json.loads(r['body']) == {
|
||||||
print(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(
|
def test_post_user(
|
||||||
|
|||||||
2
http-api/uv.lock
generated
2
http-api/uv.lock
generated
@@ -444,7 +444,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "layercake"
|
name = "layercake"
|
||||||
version = "0.1.1"
|
version = "0.1.3"
|
||||||
source = { directory = "../layercake" }
|
source = { directory = "../layercake" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "aws-lambda-powertools", extra = ["all"] },
|
{ name = "aws-lambda-powertools", extra = ["all"] },
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
## Layercake
|
||||||
|
|||||||
@@ -130,6 +130,10 @@ class PartitionKey(Key):
|
|||||||
def __init__(self, pk: str) -> None:
|
def __init__(self, pk: str) -> None:
|
||||||
super().__init__(**{PK: pk})
|
super().__init__(**{PK: pk})
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
pk = self[PK]
|
||||||
|
return f'PartitionKey({pk!r})'
|
||||||
|
|
||||||
def expr_attr_name(self) -> dict:
|
def expr_attr_name(self) -> dict:
|
||||||
return {'#pk': PK}
|
return {'#pk': PK}
|
||||||
|
|
||||||
@@ -653,13 +657,10 @@ class DynamoDBCollection:
|
|||||||
else '#pk = :pk'
|
else '#pk = :pk'
|
||||||
)
|
)
|
||||||
|
|
||||||
expr_attr_name.update(key.expr_attr_name())
|
|
||||||
expr_attr_values.update(key.expr_attr_values())
|
|
||||||
|
|
||||||
res = self.persistence_layer.query(
|
res = self.persistence_layer.query(
|
||||||
key_cond_expr=key_cond_expr,
|
key_cond_expr=key_cond_expr,
|
||||||
expr_attr_name=expr_attr_name,
|
expr_attr_name=key.expr_attr_name() | expr_attr_name,
|
||||||
expr_attr_values=expr_attr_values,
|
expr_attr_values=key.expr_attr_values() | expr_attr_values,
|
||||||
filter_expr=filter_expr,
|
filter_expr=filter_expr,
|
||||||
index_forward=index_forward,
|
index_forward=index_forward,
|
||||||
limit=limit,
|
limit=limit,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "layercake"
|
name = "layercake"
|
||||||
version = "0.1.2"
|
version = "0.1.3"
|
||||||
description = "Add your description here"
|
description = "Add your description here"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
authors = [
|
authors = [
|
||||||
|
|||||||
Reference in New Issue
Block a user