Skip to main content

fhir_parse_qs

PyPI version

A library to parse FHIR query strings.

  • Validates type and returns correct object
  • Built-in search parameters from FHIR standard
  • Supports modifiers, prefixes, and chains

Releases 0.7.x and below used FHIR R3. Releases 0.8.x and greater use FHIR R4.

The update_mappings.py script generates the mappings from the HL7 FHIR releases.

Development (uv)

This project uses uv for dependency management and packaging.

  • Install uv: curl -LsSf https://astral.sh/uv/install.sh | sh or pipx install uv
  • Create env and install deps: uv sync --group dev
  • Run tests: uv run pytest
  • Lint: uv run black --check fhir_parse_qs tests

Usage

Provide the endpoint and query_string arguments:

from fhir_parse_qs import Search
search = Search('Patient', 'name=bob') # Search(<endpoint>, <query_string>)

# supported endpoints
Search.supported ==> [...]

# endpoint
search.endpoint ==> 'Patient'

Each parameter/value pair is parsed into a FHIRSearchPair with attached FHIRParameter and FHIRValue namedtuples.

# all the namedtuples
search.parsed ==> [FHIRSearchPair(...)]

FHIRSearchPair.parameter ==> FHIRParameter
FHIRSearchPair.value ==> [FHIRValue, ...]

    FHIRParameter:
        value
        modifier
        chain
            [FHIRChain...]
        type_

        FHIRChain:
            endpoint
            target
            ttype

    FHIRValue:
        value
        prefix
        system
        code

Further features:

# index as key; each parameter/value pair parsed into a namedtuple
search[0] ==> FHIRSearchPair:
    parameter ==> FHIRParameter:
        value ==> 'name'
        modifier ==> None
        chain ==> None
        type_ ==> 'string'
    value ==> [FHIRValue(
        prefix ==> None
        value ==> 'bob'
        system ==> None
        code ==> None
        ]

# act like dict with parameter as key
search['name'] ==> FHIRSearchPair(...) #list if non-unique parameter

# iterate over the parameter/value pairs
for x in search:
     print(x) ==> FHIRSearchPair(...)

# supports comma-separated list of values
search = Search('Patient', 'name=peter,travis')
search["name"] ==> [FHIRValue(...), FHIRValue(...)]

# ignores and logs unrecognized parameters
search = Search('Patient', 'random=test')
search.error ==> [...]

# supports chaining
search = Search('Observation', 'patient.name=peter')
search[0].parameter.value ==> 'name' # last parameter in chain
search[0].value[0].value ==> 'peter'
search[0].parameter.chain ==> [FHIRChain(...), FHIRChain(...)]
search[0].parameter.chain[0].endpoint ==> 'Observation'
search[0].parameter.chain[0].target ==> 'patient'
search[0].parameter.chain[0].ttype ==> 'reference'
search[0].parameter.chain[1].endpoint ==> 'Patient'
search[0].parameter.chain[1].target ==> 'name'
search[0].parameter.chain[1].ttype ==> 'string'

# supports systems and codes
search = Search("Observation", "value-quantity=gt234|http://loinc.org|mg")
search["value-quantity"].value[0].value ==> 234
search["value-quantity"].value[0].prefix ==> "gt"
search["value-quantity"].value[0].system ==> "http://loinc.org"
search["value-quantity"].value[0].code ==> "mg"

# return control parameters (eg, _sort, _count, etc)
search.control ==> [...]

TODO

  • Narrow allowed chains (return error for ambiguous chains) (unreleased)
  • The _filter parameter
  • Reverse chains
  • Composite searches

Metadata

Release files for fhir-qs-parser 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fhir-qs-parser 0.10.0
File Size Uploaded
fhir_qs_parser-0.10.0.tar.gz 54.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fhir-qs-parser 0.10.0
File Interpreter ABI Platform
fhir_qs_parser-0.10.0-py3-none-any.whl Python 3 none any Details

Total release size: 177.2 kB

Release files / fhir_qs_parser-0.10.0.tar.gz

Download URL fhir_qs_parser-0.10.0.tar.gz
Size 54.2 kB
Tags Source
SHA-256 checksum
How to use checksums
68438495e44f57f860266692ca0f3b39fd8ce40a3957ddffa2f19ea88ae0c8ea
BLAKE2b-256 checksum
How to use checksums
c8d47d9925112015407f9ccbfdaceb8c1dff05fe3a7983b2be81b9059c4360ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Release files / fhir_qs_parser-0.10.0-py3-none-any.whl

Download URL fhir_qs_parser-0.10.0-py3-none-any.whl
Size 123.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c1776bc9e0631cb0dd807f6c5dd164f4e7c6454ccafbe19b61c03d1fe234a183
BLAKE2b-256 checksum
How to use checksums
cac3f42efd0471797f363841479499a4912f47038bae637cfd934e5bd6e2e3d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.13

Release history Release notifications | RSS feed

This release

0.10.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page