This commit is contained in:
2025-10-06 16:37:56 -03:00
parent e3104fc882
commit 942c038744
4 changed files with 39 additions and 36 deletions

View File

@@ -79,17 +79,6 @@ def enroll(
entity_sk = f'LINKED_ENTITIES#{parent_entity.type}'
keyprefix = parent_entity.type.lower()
# Child knows the parent
transact.put(
item={
'id': enrollment.id,
'sk': f'{entity_sk}#PARENT',
'created_at': now_,
f'{keyprefix}_id': perent_id,
},
cond_expr='attribute_not_exists(sk)',
)
# Parent knows the child
transact.put(
item={
@@ -101,6 +90,17 @@ def enroll(
cond_expr='attribute_not_exists(sk)',
)
# Child knows the parent
transact.put(
item={
'id': enrollment.id,
'sk': f'{entity_sk}#PARENT',
'created_at': now_,
f'{keyprefix}_id': perent_id,
},
cond_expr='attribute_not_exists(sk)',
)
if org:
transact.put(
item={

View File

@@ -43,7 +43,7 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
# Certificate may have no expiration
cert_expires_at = (
completed_at + timedelta(days=int(cert['exp_interval']))
if 'exp_interval' in cert
if cert.get('exp_interval', 0) > 0
else None
)

View File

@@ -8,10 +8,11 @@ def test_reenroll(
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
lambda_context: LambdaContext,
):
parent_id = '294e9864-8284-4287-b153-927b15d90900'
event = {
'detail': {
'new_image': {
'id': '294e9864-8284-4287-b153-927b15d90900',
'id': parent_id,
'sk': '0',
'user': {
'id': '2beb8642-aab4-4088-86d4-2966fac7c570',
@@ -28,21 +29,20 @@ def test_reenroll(
}
assert app.lambda_handler(event, lambda_context) # type: ignore
parent_entity = dynamodb_persistence_layer.collection.get_item(
KeyPair(
pk='294e9864-8284-4287-b153-927b15d90900',
sk='LINKED_ENTITIES#ENROLLMENT',
)
)
# Parent knows the child
assert parent_entity['kind'] == 'CHILD'
child_entity = dynamodb_persistence_layer.collection.get_item(
KeyPair(
pk=parent_entity['enrollment_id'],
sk='LINKED_ENTITIES#ENROLLMENT',
pk=parent_id,
sk='LINKED_ENTITIES#ENROLLMENT#CHILD',
)
)
assert child_entity
# Child knows the parent
assert child_entity['enrollment_id'] == parent_entity['id']
assert child_entity['kind'] == 'PARENT'
parent_entity = dynamodb_persistence_layer.collection.get_item(
KeyPair(
pk=child_entity['enrollment_id'],
sk='LINKED_ENTITIES#ENROLLMENT#PARENT',
)
)
assert parent_entity['enrollment_id'] == parent_id

View File

@@ -463,6 +463,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" },
]
[[package]]
name = "joserfc"
version = "1.3.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cryptography" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b0/79/d63a882c0212e95f3ba8863a115e5ca9a5d39413b02273ddce72058e717f/joserfc-1.3.4.tar.gz", hash = "sha256:67d8413c501c239f65eefad5ae685cfbfc401aa63289fc409ef7cc331b007227", size = 197787, upload-time = "2025-09-21T15:49:34.7Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/9a/78/beb171f0caac81f51695f43c87c0c20b3ce2a190cf74a3fbb0b9afe03b45/joserfc-1.3.4-py3-none-any.whl", hash = "sha256:30c845c58d441cfe32d08ac35e437812481ca8155373873b7abf80224bf601c0", size = 75638, upload-time = "2025-09-21T15:49:33.14Z" },
]
[[package]]
name = "jsonlines"
version = "4.0.0"
@@ -498,6 +510,7 @@ dependencies = [
{ name = "dictdiffer" },
{ name = "ftfy" },
{ name = "glom" },
{ name = "joserfc" },
{ name = "meilisearch" },
{ name = "orjson" },
{ name = "passlib" },
@@ -505,7 +518,6 @@ dependencies = [
{ name = "pycpfcnpj" },
{ name = "pydantic", extra = ["email"] },
{ name = "pydantic-extra-types" },
{ name = "pyjwt" },
{ name = "pytz" },
{ name = "requests" },
{ name = "smart-open", extra = ["s3"] },
@@ -521,6 +533,7 @@ requires-dist = [
{ name = "dictdiffer", specifier = ">=0.9.0" },
{ name = "ftfy", specifier = ">=6.3.1" },
{ name = "glom", specifier = ">=24.11.0" },
{ name = "joserfc", specifier = ">=1.2.2" },
{ name = "meilisearch", specifier = ">=0.34.0" },
{ name = "orjson", specifier = ">=3.10.15" },
{ name = "passlib", specifier = ">=1.7.4" },
@@ -528,7 +541,6 @@ requires-dist = [
{ name = "pycpfcnpj", specifier = ">=1.8" },
{ name = "pydantic", extras = ["email"], specifier = ">=2.10.6" },
{ name = "pydantic-extra-types", specifier = ">=2.10.3" },
{ name = "pyjwt", specifier = ">=2.10.1" },
{ name = "pytz", specifier = ">=2025.1" },
{ name = "requests", specifier = ">=2.32.3" },
{ name = "smart-open", extras = ["s3"], specifier = ">=7.1.0" },
@@ -774,15 +786,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b6/5f/d6d641b490fd3ec2c4c13b4244d68deea3a1b970a97be64f34fb5504ff72/pydantic_settings-2.9.1-py3-none-any.whl", hash = "sha256:59b4f431b1defb26fe620c71a7d3968a710d719f5f4cdbbdb7926edeb770f6ef", size = 44356, upload-time = "2025-04-18T16:44:46.617Z" },
]
[[package]]
name = "pyjwt"
version = "2.10.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" },
]
[[package]]
name = "pytest"
version = "8.3.5"