Skip to content

Commit a4fbdcd

Browse files
[PRMP-1050] Return camel case objects (#931)
1 parent 6656df9 commit a4fbdcd

File tree

5 files changed

+50
-31
lines changed

5 files changed

+50
-31
lines changed

lambdas/models/document_review.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import uuid
2-
from typing import Optional
32

43
from enums.document_review_status import DocumentReviewStatus
54
from enums.metadata_field_names import DocumentReferenceMetadataFields
65
from enums.snomed_codes import SnomedCodes
76
from pydantic import BaseModel, ConfigDict, Field
8-
from pydantic.alias_generators import to_pascal
7+
from pydantic.alias_generators import to_pascal, to_camel
98

109

1110
class DocumentReviewFileDetails(BaseModel):
@@ -47,3 +46,24 @@ class DocumentUploadReviewReference(BaseModel):
4746
)
4847
document_reference_id: str = Field(default=None)
4948
document_snomed_code_type: str = Field(default=SnomedCodes.LLOYD_GEORGE.value.code)
49+
50+
def model_dump_camel_case(self, *args, **kwargs):
51+
model_dump_results = self.model_dump(*args, **kwargs)
52+
camel_case_model_dump_results = self.camelize(model_dump_results)
53+
54+
return camel_case_model_dump_results
55+
56+
57+
def camelize(self, model: dict) -> dict:
58+
camel_case_dict = {}
59+
for key, value in model.items():
60+
if isinstance(value, dict):
61+
return self.camelize(value)
62+
if isinstance(value, list):
63+
result = []
64+
for item in value:
65+
result.append(self.camelize(item))
66+
value = result
67+
camel_case_dict[to_camel(key)] = value
68+
69+
return camel_case_dict

lambdas/services/get_document_review_service.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ def get_document_review(self, patient_id: str, document_id: str) -> Optional[dic
6060
)
6161
file_detail.presigned_url = presigned_url
6262

63-
document_review = document_review_item.model_dump(
64-
by_alias=True,
63+
document_review = document_review_item.model_dump_camel_case(
6564
include={
6665
"id": True,
6766
"upload_date": True,

lambdas/services/search_document_review_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def process_request(
3434
uploader=params.get("uploader", None),
3535
)
3636
output_refs = [
37-
reference.model_dump(
37+
reference.model_dump_camel_case(
3838
exclude_none=True,
3939
include={
4040
"id",

lambdas/tests/unit/services/test_get_document_review_service.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,20 +91,20 @@ def test_get_document_review_success(mock_service, mock_document_review, mocker)
9191
patient_id=TEST_NHS_NUMBER, document_id=TEST_DOCUMENT_ID
9292
)
9393
assert result is not None
94-
assert result["ID"] == TEST_DOCUMENT_ID
95-
assert result["UploadDate"] == 1699000000
96-
assert result["DocumentSnomedCodeType"] == SnomedCodes.LLOYD_GEORGE.value.code
97-
assert len(result["Files"]) == 2
98-
99-
assert "Author" not in result
100-
assert "Custodian" not in result
101-
assert "ReviewStatus" not in result
102-
assert "NhsNumber" not in result
103-
104-
assert result["Files"][0]["FileName"] == "file1.pdf"
105-
assert result["Files"][0]["PresignedUrl"].startswith(TEST_CLOUDFRONT_URL)
106-
assert result["Files"][1]["FileName"] == "file2.pdf"
107-
assert result["Files"][1]["PresignedUrl"].startswith(TEST_CLOUDFRONT_URL)
94+
assert result["id"] == TEST_DOCUMENT_ID
95+
assert result["uploadDate"] == 1699000000
96+
assert result["documentSnomedCodeType"] == SnomedCodes.LLOYD_GEORGE.value.code
97+
assert len(result["files"]) == 2
98+
99+
assert "author" not in result
100+
assert "custodian" not in result
101+
assert "reviewStatus" not in result
102+
assert "nhsNumber" not in result
103+
104+
assert result["files"][0]["fileName"] == "file1.pdf"
105+
assert result["files"][0]["presignedUrl"].startswith(TEST_CLOUDFRONT_URL)
106+
assert result["files"][1]["fileName"] == "file2.pdf"
107+
assert result["files"][1]["presignedUrl"].startswith(TEST_CLOUDFRONT_URL)
108108

109109
mock_service.document_review_service.get_item.assert_called_once_with(
110110
TEST_DOCUMENT_ID

lambdas/tests/unit/services/test_search_document_review_service.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,49 +60,49 @@ def test_handle_gateway_api_request_happy_path(search_document_review_service, m
6060
[
6161
{
6262
"id": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0]["ID"],
63-
"review_reason": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0][
63+
"reviewReason": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0][
6464
"ReviewReason"
6565
],
66-
"nhs_number": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0][
66+
"nhsNumber": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0][
6767
"NhsNumber"
6868
],
69-
"document_snomed_code_type": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE[
69+
"documentSnomedCodeType": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE[
7070
"Items"
7171
][0]["DocumentSnomedCodeType"],
7272
"author": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0]["Author"],
73-
"upload_date": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0][
73+
"uploadDate": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][0][
7474
"UploadDate"
7575
],
7676
},
7777
{
7878
"id": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1]["ID"],
79-
"review_reason": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1][
79+
"reviewReason": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1][
8080
"ReviewReason"
8181
],
82-
"nhs_number": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1][
82+
"nhsNumber": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1][
8383
"NhsNumber"
8484
],
85-
"document_snomed_code_type": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE[
85+
"documentSnomedCodeType": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE[
8686
"Items"
8787
][1]["DocumentSnomedCodeType"],
8888
"author": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1]["Author"],
89-
"upload_date": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1][
89+
"uploadDate": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][1][
9090
"UploadDate"
9191
],
9292
},
9393
{
9494
"id": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2]["ID"],
95-
"review_reason": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2][
95+
"reviewReason": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2][
9696
"ReviewReason"
9797
],
98-
"nhs_number": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2][
98+
"nhsNumber": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2][
9999
"NhsNumber"
100100
],
101-
"document_snomed_code_type": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE[
101+
"documentSnomedCodeType": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE[
102102
"Items"
103103
][2]["DocumentSnomedCodeType"],
104104
"author": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2]["Author"],
105-
"upload_date": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2][
105+
"uploadDate": MOCK_DOCUMENT_REVIEW_SEARCH_RESPONSE["Items"][2][
106106
"UploadDate"
107107
],
108108
},

0 commit comments

Comments
 (0)