Skip to content

Commit afea3b4

Browse files
committed
remove is_fhir flag
1 parent 9a02d81 commit afea3b4

3 files changed

Lines changed: 29 additions & 40 deletions

File tree

app/aidbox/operations.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ async def constraint_check_operation(request: AidboxSdcRequest):
4343
client = get_user_sdk_client(
4444
request.request,
4545
request.client,
46-
get_external_fhir_base_url_from_resource(request.resource, request.is_fhir),
46+
get_external_fhir_base_url_from_resource(request.resource),
4747
)
48-
env = await parameter_to_env(client, request.resource, request.is_fhir)
48+
env = await parameter_to_env(client, request.resource)
4949

5050
return web.json_response(
5151
await constraint_check(
@@ -64,9 +64,9 @@ async def get_questionnaire_context_operation(request: AidboxSdcRequest):
6464
client = get_user_sdk_client(
6565
request.request,
6666
request.client,
67-
get_external_fhir_base_url_from_resource(request.resource, request.is_fhir),
67+
get_external_fhir_base_url_from_resource(request.resource),
6868
)
69-
env = await parameter_to_env(client, request.resource, request.is_fhir)
69+
env = await parameter_to_env(client, request.resource)
7070

7171
result = await get_questionnaire_context(client, env["Questionnaire"], env)
7272

@@ -80,7 +80,7 @@ async def extract_questionnaire_operation(request: AidboxSdcRequest):
8080
client = get_user_sdk_client(
8181
request.request,
8282
request.client,
83-
get_external_fhir_base_url_from_resource(resource, request.is_fhir),
83+
get_external_fhir_base_url_from_resource(resource),
8484
)
8585
if resource["resourceType"] == "QuestionnaireResponse":
8686
env = {}
@@ -91,7 +91,7 @@ async def extract_questionnaire_operation(request: AidboxSdcRequest):
9191
.get()
9292
)
9393
elif resource["resourceType"] == "Parameters":
94-
env = await parameter_to_env(client, resource, request.is_fhir)
94+
env = await parameter_to_env(client, resource)
9595
if "Questionnaire" not in env:
9696
raise MissingParamOperationOutcome("`Questionnaire` parameter is required")
9797
if "QuestionnaireResponse" not in env:
@@ -133,7 +133,7 @@ async def extract_questionnaire_instance_operation(request: AidboxSdcRequest):
133133
extract_client = get_user_sdk_client(
134134
request.request,
135135
request.client,
136-
get_external_fhir_base_url_from_resource(resource, request.is_fhir),
136+
get_external_fhir_base_url_from_resource(resource),
137137
)
138138
questionnaire = (
139139
await request.fhir_client.resources("Questionnaire")
@@ -164,7 +164,7 @@ async def extract_questionnaire_instance(
164164
env = {}
165165
env_questionnaire_response = extract_client.resource("QuestionnaireResponse", **resource)
166166
elif resource["resourceType"] == "Parameters":
167-
env = await parameter_to_env(extract_client, resource, True)
167+
env = await parameter_to_env(extract_client, resource)
168168
if "QuestionnaireResponse" not in env:
169169
raise MissingParamOperationOutcome("`QuestionnaireResponse` parameter is required")
170170

@@ -204,9 +204,9 @@ async def populate_questionnaire(request: AidboxSdcRequest):
204204
client = get_user_sdk_client(
205205
request.request,
206206
request.client,
207-
get_external_fhir_base_url_from_resource(request.resource, request.is_fhir),
207+
get_external_fhir_base_url_from_resource(request.resource),
208208
)
209-
env = await parameter_to_env(client, request.resource, request.is_fhir)
209+
env = await parameter_to_env(client, request.resource)
210210

211211
if "Questionnaire" not in env:
212212
raise MissingParamOperationOutcome("`Questionnaire` parameter is required")
@@ -223,15 +223,15 @@ async def populate_questionnaire_instance(request: AidboxSdcRequest):
223223
client = get_user_sdk_client(
224224
request.request,
225225
request.client,
226-
get_external_fhir_base_url_from_resource(request.resource, request.is_fhir),
226+
get_external_fhir_base_url_from_resource(request.resource),
227227
)
228228
fhir_questionnaire = (
229229
await request.fhir_client.resources("Questionnaire")
230230
.search(_id=request.route_params["id"])
231231
.get()
232232
)
233233

234-
env = await parameter_to_env(client, request.resource, request.is_fhir)
234+
env = await parameter_to_env(client, request.resource)
235235
env["Questionnaire"] = fhir_questionnaire
236236

237237
populated_qr = await populate(

app/sdc/utils.py

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,7 @@ def is_sdc_api(parameters: dict | None) -> bool:
165165
return any(p.get("name") in ("context", "subject") for p in parameters.get("parameter", []))
166166

167167

168-
async def parameter_to_env(
169-
client: AsyncFHIRClient, resource, is_fhir: bool = True
170-
) -> dict[str, Any]:
168+
async def parameter_to_env(client: AsyncFHIRClient, resource) -> dict[str, Any]:
171169
# TODO: add support for repeating values (with same name)
172170
env: dict[str, Any] = {}
173171
for param in resource["parameter"]:
@@ -184,7 +182,7 @@ async def parameter_to_env(
184182
elif "resource" in param:
185183
env[param["name"]] = param["resource"]
186184
else:
187-
value, kind = parse_parameter_value(param, is_fhir)
185+
value, kind = parse_parameter_value(param)
188186
if value:
189187
if param["name"] == "subject" and kind == "Reference":
190188
env[param["name"]] = await client.reference(
@@ -202,25 +200,20 @@ async def parameter_to_env(
202200
return env
203201

204202

205-
def parse_parameter_value(parameter, is_fhir: bool) -> tuple[Any, str]:
206-
if is_fhir:
207-
_name_key, value_key = parameter.keys()
208-
return parameter[value_key], value_key.removeprefix("value")
203+
def parse_parameter_value(parameter) -> tuple[Any, str]:
204+
_name_key, value_key = parameter.keys()
205+
return parameter[value_key], value_key.removeprefix("value")
209206

210-
value = parameter["value"]
211-
polimorphic_key = first(value.keys())
212-
return value[polimorphic_key] if polimorphic_key else None, polimorphic_key
213207

214-
215-
def get_external_fhir_base_url_from_resource(resource: dict | None, is_fhir: bool):
208+
def get_external_fhir_base_url_from_resource(resource: dict | None):
216209
if not resource or resource.get("resourceType") != "Parameters":
217210
return None
218211
for param in resource.get("parameter", []):
219212
if param.get("name") != EXTERNAL_FHIR_BASE_URL_PARAM_KEY:
220213
continue
221214
if "resource" in param:
222215
continue
223-
value, _key = parse_parameter_value(param, is_fhir)
216+
value, _key = parse_parameter_value(param)
224217
return value or None
225218
return None
226219

tests/test_utils.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -268,16 +268,12 @@ def test_is_sdc_api(payload, expected):
268268

269269

270270
@pytest.mark.parametrize(
271-
"is_fhir,launch_param",
271+
"launch_param",
272272
[
273-
(True, {"name": "launch-patientId", "valueString": "patient-123"}),
274-
(
275-
False,
276-
{"name": "launch-patientId", "value": {"string": "patient-123"}},
277-
),
273+
{"name": "launch-patientId", "valueString": "patient-123"},
278274
],
279275
)
280-
async def test_parameter_to_env_handles_parameters_correctly(is_fhir, launch_param):
276+
async def test_parameter_to_env_handles_parameters_correctly(launch_param):
281277
client = MagicMock()
282278
questionnaire = {
283279
"resourceType": "Questionnaire",
@@ -298,7 +294,7 @@ async def test_parameter_to_env_handles_parameters_correctly(is_fhir, launch_par
298294
],
299295
}
300296

301-
env = await parameter_to_env(client, parameters, is_fhir)
297+
env = await parameter_to_env(client, parameters)
302298

303299
assert env["questionnaire"] == questionnaire
304300
assert env["questionnaire_response"] == questionnaire_response
@@ -328,7 +324,7 @@ async def test_parameter_to_env_skips_empty_launch_param():
328324
],
329325
}
330326

331-
env = await parameter_to_env(client, parameters, is_fhir=False)
327+
env = await parameter_to_env(client, parameters)
332328

333329
assert "launch-patientId" not in env
334330
assert env["Questionnaire"] == questionnaire
@@ -360,7 +356,7 @@ async def test_parameter_to_env_resolves_context_reference(fhir_client, safe_db)
360356
],
361357
}
362358

363-
env = await parameter_to_env(fhir_client, parameters, is_fhir=True)
359+
env = await parameter_to_env(fhir_client, parameters)
364360

365361
assert is_sdc_api(parameters) is True
366362
resolved = env["Observation"]
@@ -383,7 +379,7 @@ async def test_parameter_to_env_resolves_subject_reference(fhir_client, safe_db)
383379
],
384380
}
385381

386-
env = await parameter_to_env(fhir_client, parameters, is_fhir=True)
382+
env = await parameter_to_env(fhir_client, parameters)
387383

388384
assert is_sdc_api(parameters) is True
389385
assert env["subject"]["resourceType"] == "Patient"
@@ -404,7 +400,7 @@ async def test_parameter_to_env_does_not_resolve_non_subject_reference(fhir_clie
404400
],
405401
}
406402

407-
env = await parameter_to_env(fhir_client, parameters, is_fhir=True)
403+
env = await parameter_to_env(fhir_client, parameters)
408404

409405
assert is_sdc_api(parameters) is False
410406
assert env["PatientRef"]["display"] == "Integration Patient"
@@ -444,7 +440,7 @@ async def test_sdc_api_params(fhir_client, safe_db):
444440
],
445441
}
446442

447-
env = await parameter_to_env(fhir_client, parameters, is_fhir=False)
443+
env = await parameter_to_env(fhir_client, parameters)
448444

449445
assert is_sdc_api(parameters) is True
450446
resolved = env["Patient"]
@@ -481,7 +477,7 @@ async def test_sdc_api_params_with_resource(fhir_client, safe_db):
481477
],
482478
}
483479

484-
env = await parameter_to_env(fhir_client, parameters, is_fhir=False)
480+
env = await parameter_to_env(fhir_client, parameters)
485481

486482
assert is_sdc_api(parameters) is True
487483
resolved = env["Patient"]

0 commit comments

Comments
 (0)