Skip to content

Commit 733c709

Browse files
committed
NPA-3899 Try Loading YAML Examples
1 parent 8b42f47 commit 733c709

File tree

3 files changed

+94
-45
lines changed

3 files changed

+94
-45
lines changed

sandbox/api/app.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,25 @@
44
from flask import Flask, request
55

66
from .utils import (
7-
ERROR_RESPONSE,
8-
LIST_RELATIONSHIP,
9-
LIST_RELATIONSHIP_INCLUDE,
10-
QUESTIONNAIRE_RESPONSE_SUCCESS,
11-
VALIDATE_RELATIONSHIP_009,
12-
VALIDATE_RELATIONSHIP_025,
13-
VALIDATE_RELATIONSHIP_INCLUDE_009,
14-
VALIDATE_RELATIONSHIP_INCLUDE_025,
157
check_for_empty,
168
check_for_errors,
179
check_for_list,
1810
check_for_validate,
1911
generate_response,
2012
load_json_file,
2113
remove_system,
14+
generate_response_from_example,
15+
)
16+
from .constants import (
17+
INTERNAL_ERROR_RESPONSE,
18+
LIST_RELATIONSHIP,
19+
LIST_RELATIONSHIP_INCLUDE,
20+
QUESTIONNAIRE_RESPONSE_SUCCESS,
21+
VALIDATE_RELATIONSHIP_009,
22+
VALIDATE_RELATIONSHIP_025,
23+
VALIDATE_RELATIONSHIP_INCLUDE_009,
24+
VALIDATE_RELATIONSHIP_INCLUDE_025,
25+
INTERNAL_SERVER_ERROR_EXAMPLE,
2226
)
2327

2428
app = Flask(__name__)
@@ -92,7 +96,7 @@ def get_related_persons() -> Union[dict, tuple]:
9296

9397
except Exception as e:
9498
logger.error(e)
95-
return generate_response(load_json_file(ERROR_RESPONSE), 500)
99+
return generate_response(load_json_file(INTERNAL_ERROR_RESPONSE), 500)
96100

97101

98102
@app.route(f"/{COMMON_PATH}/QuestionnaireResponse", methods=["POST"])
@@ -107,7 +111,8 @@ def post_questionnaire_response() -> Union[dict, tuple]:
107111
return generate_response(load_json_file(QUESTIONNAIRE_RESPONSE_SUCCESS), 200)
108112
except Exception as e:
109113
logger.error(e)
110-
return generate_response(load_json_file(ERROR_RESPONSE), 500)
114+
return generate_response(load_json_file(INTERNAL_ERROR_RESPONSE), 500)
115+
111116

112117
@app.route(f"/{COMMON_PATH}/Consent", methods=["GET"])
113118
def get_consent() -> Union[dict, tuple]:
@@ -116,5 +121,13 @@ def get_consent() -> Union[dict, tuple]:
116121
Returns:
117122
Union[dict, tuple]: Response for GET /Consent
118123
"""
119-
124+
try:
125+
return generate_response_from_example(INTERNAL_SERVER_ERROR_EXAMPLE, 500)
126+
127+
# else:
128+
# logger.error(e)
129+
# return generate_response(load_json_file(ERROR_RESPONSE), 400)
120130

131+
except Exception as e:
132+
logger.error(e)
133+
return generate_response_from_example(INTERNAL_SERVER_ERROR_EXAMPLE, 500)

sandbox/api/constants.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
NOT_FOUND = "./api/responses/not_found.json"
2+
EMPTY_RESPONSE = "./api/responses/GET_RelatedPerson/empty_response_9000000033.json"
3+
LIST_RELATIONSHIP = (
4+
"./api/responses/GET_RelatedPerson/list_relationship_9000000017.json"
5+
)
6+
LIST_RELATIONSHIP_INCLUDE = (
7+
"./api/responses/GET_RelatedPerson/list_relationship_include_9000000017.json"
8+
)
9+
VALIDATE_RELATIONSHIP_009 = (
10+
"./api/responses/GET_RelatedPerson/verify_relationship_9000000009.json"
11+
)
12+
VALIDATE_RELATIONSHIP_INCLUDE_009 = (
13+
"./api/responses/GET_RelatedPerson/verify_relationship_include_9000000009.json"
14+
)
15+
VALIDATE_RELATIONSHIP_025 = (
16+
"./api/responses/GET_RelatedPerson/verify_relationship_9000000025.json"
17+
)
18+
VALIDATE_RELATIONSHIP_INCLUDE_025 = (
19+
"./api/responses/GET_RelatedPerson/verify_relationship_include_9000000025.json"
20+
)
21+
INTERNAL_ERROR_RESPONSE = "./api/responses/internal_server_error.json"
22+
INCLUDE_FLAG = "RelatedPerson:patient"
23+
24+
QUESTIONNAIRE_RESPONSE_SUCCESS = (
25+
"./api/responses/POST_QuestionnaireResponse/questionnaire_response_success.json"
26+
)
27+
28+
PATIENT_IDENTIFIERS = ["9000000017", "9000000033"]
29+
RELATED_IDENTIFIERS = ["9000000009", "9000000025"]
30+
31+
# Example files
32+
INTERNAL_SERVER_ERROR_EXAMPLE = "./api/examples/errors/internal-server-error.yaml"

sandbox/api/utils.py

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,18 @@
1-
from json import load, dumps
2-
from typing import Optional, Any
3-
4-
from flask import request, Response
5-
6-
NOT_FOUND = "./api/responses/not_found.json"
7-
EMPTY_RESPONSE = "./api/responses/GET_RelatedPerson/empty_response_9000000033.json"
8-
LIST_RELATIONSHIP = (
9-
"./api/responses/GET_RelatedPerson/list_relationship_9000000017.json"
10-
)
11-
LIST_RELATIONSHIP_INCLUDE = (
12-
"./api/responses/GET_RelatedPerson/list_relationship_include_9000000017.json"
13-
)
14-
VALIDATE_RELATIONSHIP_009 = (
15-
"./api/responses/GET_RelatedPerson/verify_relationship_9000000009.json"
16-
)
17-
VALIDATE_RELATIONSHIP_INCLUDE_009 = (
18-
"./api/responses/GET_RelatedPerson/verify_relationship_include_9000000009.json"
19-
)
20-
VALIDATE_RELATIONSHIP_025 = (
21-
"./api/responses/GET_RelatedPerson/verify_relationship_9000000025.json"
1+
from json import dumps, load
2+
from typing import Any, Optional
3+
4+
from flask import Response, Request
5+
from yaml import load as yaml_load
6+
from .constants import (
7+
EMPTY_RESPONSE,
8+
PATIENT_IDENTIFIERS,
9+
NOT_FOUND,
10+
INCLUDE_FLAG,
11+
RELATED_IDENTIFIERS,
2212
)
23-
VALIDATE_RELATIONSHIP_INCLUDE_025 = (
24-
"./api/responses/GET_RelatedPerson/verify_relationship_include_9000000025.json"
25-
)
26-
ERROR_RESPONSE = "./api/responses/internal_server_error.json"
27-
INCLUDE_FLAG = "RelatedPerson:patient"
2813

29-
QUESTIONNAIRE_RESPONSE_SUCCESS = (
30-
"./api/responses/POST_QuestionnaireResponse/questionnaire_response_success.json"
31-
)
3214

33-
PATIENT_IDENTIFIERS = ["9000000017", "9000000033"]
34-
RELATED_IDENTIFIERS = ["9000000009", "9000000025"]
15+
FHIR_MIMETYPE = "application/fhir+json"
3516

3617

3718
def load_json_file(file_name: str) -> dict:
@@ -40,11 +21,11 @@ def load_json_file(file_name: str) -> dict:
4021
return load(file)
4122

4223

43-
def check_for_errors(request: request) -> Optional[tuple]:
24+
def check_for_errors(request: Request) -> Optional[tuple]:
4425
"""Check for errors in the request headers and arguments
4526
4627
Args:
47-
request (request): Flask request object
28+
request (Request): Flask request object
4829
4930
Returns:
5031
Optional[tuple]: Tuple with response and status code if error is found
@@ -164,13 +145,36 @@ def generate_response(content: str, status: int = 200):
164145
Returns:
165146
Response: Resultant Response object based on input.
166147
"""
167-
return Response(dumps(content), status=status, mimetype="application/fhir+json")
148+
return Response(dumps(content), status=status, mimetype=FHIR_MIMETYPE)
168149

169150

170151
def remove_system(identifier: Any) -> str:
152+
"""Removes the system from an identifier if it exists
153+
154+
Args:
155+
identifier (Any): Identifier to remove system from
156+
157+
Returns:
158+
str: Identifier without system
159+
"""
171160
if isinstance(identifier, str):
172161
if "|" in identifier:
173162
# Identifier includes system
174163
return identifier.split("|", maxsplit=1)[1]
175164
return identifier
176165
return ""
166+
167+
168+
def generate_response_from_example(example_path: str, status_code: int) -> dict:
169+
"""Converts an example file (yaml) to a response
170+
171+
Args:
172+
example_path (str): Path to the example file
173+
status_code (int): Status code for the response
174+
175+
Returns:
176+
Response: Resultant Response object based on input.
177+
"""
178+
with open(example_path, "r") as file:
179+
content = yaml_load(file)
180+
return Response(dumps(content), status=status_code, mimetype=FHIR_MIMETYPE)

0 commit comments

Comments
 (0)