Skip to content

Commit 722a54d

Browse files
committed
make_*_pk
1 parent 9ed5fcb commit 722a54d

File tree

5 files changed

+54
-64
lines changed

5 files changed

+54
-64
lines changed

lambdas/backend/src/repository/fhir_repository.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@
1616
from common.models.constants import Constants
1717
from common.models.errors import ResourceNotFoundError
1818
from common.models.immunization_record_metadata import ImmunizationRecordMetadata
19-
from common.models.utils.generic_utils import get_contained_patient, get_nhs_number
19+
from common.models.utils.generic_utils import (
20+
get_contained_patient,
21+
get_nhs_number,
22+
make_immunization_pk,
23+
make_patient_pk
24+
)
2025
from common.models.utils.validation_utils import (
2126
get_vaccine_type,
2227
)
@@ -33,14 +38,6 @@ def create_table(table_name=None, endpoint_url=None, region_name="eu-west-2"):
3338
return db.Table(table_name)
3439

3540

36-
def _make_immunization_pk(_id: str):
37-
return f"Immunization#{_id}"
38-
39-
40-
def _make_patient_pk(_id: str):
41-
return f"Patient#{_id}"
42-
43-
4441
def _query_identifier(table, index, pk, identifier):
4542
queryresponse = table.query(IndexName=index, KeyConditionExpression=Key(pk).eq(identifier), Limit=1)
4643
if queryresponse.get("Count", 0) > 0:
@@ -61,10 +58,10 @@ class RecordAttributes:
6158
def __init__(self, imms: dict, patient: any):
6259
"""Create attributes that may be used in dynamodb table"""
6360
imms_id = imms["id"]
64-
self.pk = _make_immunization_pk(imms_id)
61+
self.pk = make_immunization_pk(imms_id)
6562
if patient or imms:
6663
nhs_number = get_nhs_number(imms)
67-
self.patient_pk = _make_patient_pk(nhs_number)
64+
self.patient_pk = make_patient_pk(nhs_number)
6865
self.patient = patient
6966
self.resource = imms
7067
self.timestamp = int(time.time())
@@ -102,7 +99,7 @@ def get_immunization_and_resource_meta_by_id(
10299
self, imms_id: str, include_deleted: bool = False
103100
) -> tuple[Optional[dict], Optional[ImmunizationRecordMetadata]]:
104101
"""Retrieves the immunization and resource metadata from the VEDS table"""
105-
response = self.table.get_item(Key={"PK": _make_immunization_pk(imms_id)})
102+
response = self.table.get_item(Key={"PK": make_immunization_pk(imms_id)})
106103
item = response.get("Item")
107104

108105
if not item:
@@ -231,7 +228,7 @@ def _perform_dynamo_update(
231228

232229
try:
233230
self.table.update_item(
234-
Key={"PK": _make_immunization_pk(imms_id)},
231+
Key={"PK": make_immunization_pk(imms_id)},
235232
UpdateExpression=update_exp,
236233
ExpressionAttributeNames={
237234
"#imms_resource": "Resource",
@@ -253,7 +250,7 @@ def delete_immunization(self, imms_id: str, supplier_system: str) -> None:
253250

254251
try:
255252
self.table.update_item(
256-
Key={"PK": _make_immunization_pk(imms_id)},
253+
Key={"PK": make_immunization_pk(imms_id)},
257254
UpdateExpression=(
258255
"SET DeletedAt = :timestamp, Operation = :operation, SupplierSystem = :supplier_system"
259256
),
@@ -263,7 +260,7 @@ def delete_immunization(self, imms_id: str, supplier_system: str) -> None:
263260
":supplier_system": supplier_system,
264261
},
265262
ConditionExpression=(
266-
Attr("PK").eq(_make_immunization_pk(imms_id))
263+
Attr("PK").eq(make_immunization_pk(imms_id))
267264
& (Attr("DeletedAt").not_exists() | Attr("DeletedAt").eq("reinstated"))
268265
),
269266
)
@@ -275,7 +272,7 @@ def delete_immunization(self, imms_id: str, supplier_system: str) -> None:
275272

276273
def find_immunizations(self, patient_identifier: str, vaccine_types: set):
277274
"""it should find all of the specified patient's Immunization events for all of the specified vaccine_types"""
278-
condition = Key("PatientPK").eq(_make_patient_pk(patient_identifier))
275+
condition = Key("PatientPK").eq(make_patient_pk(patient_identifier))
279276
is_not_deleted = Attr("DeletedAt").not_exists() | Attr("DeletedAt").eq("reinstated")
280277

281278
raw_items = self.get_all_items(condition, is_not_deleted)

lambdas/backend/tests/repository/test_fhir_repository.py

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,14 @@
1010

1111
from common.models.errors import ResourceNotFoundError
1212
from common.models.immunization_record_metadata import ImmunizationRecordMetadata
13+
from common.models.utils.generic_utils import make_immunization_pk, make_patient_pk
1314
from common.models.utils.validation_utils import get_vaccine_type
1415
from models.errors import UnhandledResponseError
1516
from repository.fhir_repository import ImmunizationRepository
1617
from test_common.testing_utils.generic_utils import update_target_disease_code
1718
from test_common.testing_utils.immunization_utils import VALID_NHS_NUMBER, create_covid_immunization_dict
1819

1920

20-
def _make_immunization_pk(_id):
21-
return f"Immunization#{_id}"
22-
23-
24-
def _make_patient_pk(_id):
25-
return f"Patient#{_id}"
26-
27-
2821
class TestFhirRepositoryBase(unittest.TestCase):
2922
"""Base class for all tests to set up common fixtures"""
3023

@@ -158,7 +151,7 @@ def test_get_immunization_by_id(self):
158151
self.assertEqual(resource_meta.resource_version, expected_version)
159152
self.assertEqual(resource_meta.is_deleted, False)
160153
self.assertEqual(resource_meta.is_reinstated, False)
161-
self.table.get_item.assert_called_once_with(Key={"PK": _make_immunization_pk(imms_id)})
154+
self.table.get_item.assert_called_once_with(Key={"PK": make_immunization_pk(imms_id)})
162155

163156
def test_get_immunization_by_id_returns_reinstated_records(self):
164157
"""it should find an Immunization by id, including reinstated records by default"""
@@ -182,7 +175,7 @@ def test_get_immunization_by_id_returns_reinstated_records(self):
182175
self.assertEqual(resource_meta.resource_version, expected_version)
183176
self.assertEqual(resource_meta.is_deleted, False)
184177
self.assertEqual(resource_meta.is_reinstated, True)
185-
self.table.get_item.assert_called_once_with(Key={"PK": _make_immunization_pk(imms_id)})
178+
self.table.get_item.assert_called_once_with(Key={"PK": make_immunization_pk(imms_id)})
186179

187180
def test_get_immunization_by_id_returns_deleted_records_when_flag_is_set(self):
188181
"""it should find an Immunization by id, including deleted records when the include_deleted flag is set True"""
@@ -208,7 +201,7 @@ def test_get_immunization_by_id_returns_deleted_records_when_flag_is_set(self):
208201
self.assertEqual(resource_meta.resource_version, expected_version)
209202
self.assertEqual(resource_meta.is_deleted, True)
210203
self.assertEqual(resource_meta.is_reinstated, False)
211-
self.table.get_item.assert_called_once_with(Key={"PK": _make_immunization_pk(imms_id)})
204+
self.table.get_item.assert_called_once_with(Key={"PK": make_immunization_pk(imms_id)})
212205

213206
def test_immunization_not_found(self):
214207
"""it should return None if Immunization doesn't exist"""
@@ -358,12 +351,12 @@ def test_update_immunisation_is_successful(self):
358351
patient_sk = f"{vaccine_type}#{imms_id}"
359352

360353
self.table.update_item.assert_called_once_with(
361-
Key={"PK": _make_immunization_pk(imms_id)},
354+
Key={"PK": make_immunization_pk(imms_id)},
362355
UpdateExpression=update_exp,
363356
ExpressionAttributeNames={"#imms_resource": "Resource"},
364357
ExpressionAttributeValues={
365358
":timestamp": ANY,
366-
":patient_pk": _make_patient_pk(patient_id),
359+
":patient_pk": make_patient_pk(patient_id),
367360
":patient_sk": patient_sk,
368361
":imms_resource_val": json.dumps(imms),
369362
":operation": "UPDATE",
@@ -397,12 +390,12 @@ def test_update_immunisation_is_successful_when_record_needs_to_be_reinstated(se
397390
patient_sk = f"{vaccine_type}#{imms_id}"
398391

399392
self.table.update_item.assert_called_once_with(
400-
Key={"PK": _make_immunization_pk(imms_id)},
393+
Key={"PK": make_immunization_pk(imms_id)},
401394
UpdateExpression=update_exp,
402395
ExpressionAttributeNames={"#imms_resource": "Resource"},
403396
ExpressionAttributeValues={
404397
":timestamp": ANY,
405-
":patient_pk": _make_patient_pk(patient_id),
398+
":patient_pk": make_patient_pk(patient_id),
406399
":patient_sk": patient_sk,
407400
":imms_resource_val": json.dumps(imms),
408401
":operation": "UPDATE",
@@ -461,7 +454,7 @@ def test_delete_immunization(self):
461454

462455
# Then
463456
self.table.update_item.assert_called_once_with(
464-
Key={"PK": _make_immunization_pk(imms_id)},
457+
Key={"PK": make_immunization_pk(imms_id)},
465458
UpdateExpression="SET DeletedAt = :timestamp, Operation = :operation, SupplierSystem = :supplier_system",
466459
ExpressionAttributeValues={
467460
":timestamp": now_epoch,
@@ -488,7 +481,7 @@ def test_multiple_delete_should_not_update_timestamp(self):
488481
Key=ANY,
489482
UpdateExpression=ANY,
490483
ExpressionAttributeValues=ANY,
491-
ConditionExpression=Attr("PK").eq(_make_immunization_pk(imms_id))
484+
ConditionExpression=Attr("PK").eq(make_immunization_pk(imms_id))
492485
& (Attr("DeletedAt").not_exists() | Attr("DeletedAt").eq("reinstated")),
493486
)
494487

@@ -531,7 +524,7 @@ def test_find_immunizations(self):
531524
dynamo_response = {"ResponseMetadata": {"HTTPStatusCode": 200}, "Items": []}
532525
self.table.query = MagicMock(return_value=dynamo_response)
533526

534-
condition = Key("PatientPK").eq(_make_patient_pk(nhs_number))
527+
condition = Key("PatientPK").eq(make_patient_pk(nhs_number))
535528

536529
# When
537530
_ = self.repository.find_immunizations(nhs_number, vaccine_types={"COVID"})
@@ -663,12 +656,12 @@ def run_update_immunization_test(self, imms_id, imms, updated_dose_quantity=None
663656
patient_sk = f"{vaccine_type}#{imms_id}"
664657

665658
self.table.update_item.assert_called_once_with(
666-
Key={"PK": _make_immunization_pk(imms_id)},
659+
Key={"PK": make_immunization_pk(imms_id)},
667660
UpdateExpression=update_exp,
668661
ExpressionAttributeNames={"#imms_resource": "Resource"},
669662
ExpressionAttributeValues={
670663
":timestamp": ANY,
671-
":patient_pk": _make_patient_pk(patient_id),
664+
":patient_pk": make_patient_pk(patient_id),
672665
":patient_sk": patient_sk,
673666
":imms_resource_val": json.dumps(imms, use_decimal=True),
674667
":operation": "UPDATE",

lambdas/recordforwarder/src/repository/fhir_batch_repository.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,18 @@
1515
ResourceNotFoundError,
1616
UnhandledResponseError,
1717
)
18-
from common.models.utils.generic_utils import get_nhs_number
19-
18+
from common.models.utils.generic_utils import (
19+
get_nhs_number,
20+
make_immunization_pk,
21+
make_patient_pk,
22+
)
2023

2124
def create_table(region_name="eu-west-2"):
2225
table_name = os.environ["DYNAMODB_TABLE_NAME"]
2326
dynamodb = boto3.resource("dynamodb", region_name=region_name)
2427
return dynamodb.Table(table_name)
2528

2629

27-
def _make_immunization_pk(_id: str):
28-
return f"Immunization#{_id}"
29-
30-
31-
def _make_patient_pk(_id: str):
32-
return f"Patient#{_id}"
33-
34-
3530
def _query_identifier(table, index, pk, identifier, is_present):
3631
retries = 0
3732
delay_milliseconds = 60
@@ -72,9 +67,9 @@ class RecordAttributes:
7267
def __init__(self, imms: dict, vax_type: str, supplier: str, version: int):
7368
"""Create attributes that may be used in dynamodb table"""
7469
imms_id = imms["id"]
75-
self.pk = _make_immunization_pk(imms_id)
70+
self.pk = make_immunization_pk(imms_id)
7671
nhs_number = get_nhs_number(imms)
77-
self.patient_pk = _make_patient_pk(nhs_number)
72+
self.patient_pk = make_patient_pk(nhs_number)
7873
self.resource = imms
7974
self.timestamp = int(time.time())
8075
self.vaccine_type = vax_type

lambdas/recordforwarder/tests/repository/test_fhir_batch_repository.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,13 @@
1414
ResourceNotFoundError,
1515
UnhandledResponseError,
1616
)
17+
from common.models.utils.generic_utils import make_immunization_pk
1718
from repository.fhir_batch_repository import ImmunizationBatchRepository, create_table
1819
from test_common.testing_utils.immunization_utils import create_covid_immunization_dict
1920

2021
imms_id = str(uuid4())
2122

2223

23-
def _make_immunization_pk(_id):
24-
return f"Immunization#{_id}"
25-
26-
2724
@mock_aws
2825
class TestImmunizationBatchRepository(unittest.TestCase):
2926
def setUp(self):
@@ -150,7 +147,7 @@ def test_update_immunization(self):
150147
"Count": 1,
151148
"Items": [
152149
{
153-
"PK": _make_immunization_pk(imms_id),
150+
"PK": make_immunization_pk(imms_id),
154151
"Resource": json.dumps(self.immunization),
155152
"Version": 1,
156153
}
@@ -164,7 +161,7 @@ def test_update_immunization(self):
164161
"Count": 1,
165162
"Items": [
166163
{
167-
"PK": _make_immunization_pk(imms_id),
164+
"PK": make_immunization_pk(imms_id),
168165
"Resource": json.dumps(self.immunization),
169166
"Version": 1,
170167
"DeletedAt": "20210101",
@@ -179,7 +176,7 @@ def test_update_immunization(self):
179176
"Count": 1,
180177
"Items": [
181178
{
182-
"PK": _make_immunization_pk(imms_id),
179+
"PK": make_immunization_pk(imms_id),
183180
"Resource": json.dumps(self.immunization),
184181
"Version": 1,
185182
"DeletedAt": "reinstated",
@@ -212,7 +209,7 @@ def test_update_immunization(self):
212209
expected_values.update(case["expected_extra_values"])
213210

214211
self.table.update_item.assert_called_with(
215-
Key={"PK": _make_immunization_pk(imms_id)},
212+
Key={"PK": make_immunization_pk(imms_id)},
216213
UpdateExpression=ANY,
217214
ExpressionAttributeNames={"#imms_resource": "Resource"},
218215
ExpressionAttributeValues=expected_values,
@@ -239,7 +236,7 @@ def test_update_should_catch_dynamo_error(self):
239236
"Count": 1,
240237
"Items": [
241238
{
242-
"PK": _make_immunization_pk(imms_id),
239+
"PK": make_immunization_pk(imms_id),
243240
"Resource": json.dumps(self.immunization),
244241
"Version": 1,
245242
}
@@ -265,7 +262,7 @@ def test_update_immunization_unhandled_error(self):
265262
"Count": 1,
266263
"Items": [
267264
{
268-
"PK": _make_immunization_pk(imms_id),
265+
"PK": make_immunization_pk(imms_id),
269266
"Resource": json.dumps(self.immunization),
270267
"Version": 1,
271268
}
@@ -291,7 +288,7 @@ def test_update_immunization_conditionalcheckfailedexception_error(self):
291288
"Count": 1,
292289
"Items": [
293290
{
294-
"PK": _make_immunization_pk(imms_id),
291+
"PK": make_immunization_pk(imms_id),
295292
"Resource": json.dumps(self.immunization),
296293
"Version": 1,
297294
}
@@ -310,7 +307,7 @@ def test_delete_immunization(self):
310307
"Count": 1,
311308
"Items": [
312309
{
313-
"PK": _make_immunization_pk(imms_id),
310+
"PK": make_immunization_pk(imms_id),
314311
"Resource": json.dumps(self.immunization),
315312
"Version": 1,
316313
}
@@ -322,7 +319,7 @@ def test_delete_immunization(self):
322319
self.immunization, "supplier", "vax-type", self.table, is_present
323320
)
324321
self.table.update_item.assert_called_with(
325-
Key={"PK": _make_immunization_pk(imms_id)},
322+
Key={"PK": make_immunization_pk(imms_id)},
326323
UpdateExpression="SET DeletedAt = :timestamp, Operation = :operation, SupplierSystem = :supplier_system",
327324
ExpressionAttributeValues={
328325
":timestamp": ANY,
@@ -352,7 +349,7 @@ def test_delete_should_catch_dynamo_error(self):
352349
"Count": 1,
353350
"Items": [
354351
{
355-
"PK": _make_immunization_pk(imms_id),
352+
"PK": make_immunization_pk(imms_id),
356353
"Resource": json.dumps(self.immunization),
357354
"Version": 1,
358355
}
@@ -378,7 +375,7 @@ def test_delete_immunization_unhandled_error(self):
378375
"Count": 1,
379376
"Items": [
380377
{
381-
"PK": _make_immunization_pk(imms_id),
378+
"PK": make_immunization_pk(imms_id),
382379
"Resource": json.dumps(self.immunization),
383380
"Version": 1,
384381
}
@@ -404,7 +401,7 @@ def test_delete_immunization_conditionalcheckfailedexception_error(self):
404401
"Count": 1,
405402
"Items": [
406403
{
407-
"PK": _make_immunization_pk(imms_id),
404+
"PK": make_immunization_pk(imms_id),
408405
"Resource": json.dumps(self.immunization),
409406
"Version": 1,
410407
}

lambdas/shared/src/common/models/utils/generic_utils.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
from common.models.constants import Constants
2121

2222

23+
def make_immunization_pk(id: str):
24+
return f"Immunization#{id}"
25+
26+
27+
def make_patient_pk(id: str):
28+
return f"Patient#{id}"
29+
30+
2331
def get_nhs_number(imms: dict):
2432
try:
2533
nhs_number = [x for x in imms["contained"] if x["resourceType"] == "Patient"][0]["identifier"][0]["value"]

0 commit comments

Comments
 (0)