Skip to main content

FHIR support code for the Cumulus project

Project description

Cumulus FHIR Support

This library holds FHIR support code for the Cumulus project as a whole.

Installing

pip install cumulus-fhir-support

API

list_multiline_json_in_dir

Lists available multiline JSON files in the target directory (allowing filtering by FHIR resource).

Files with the .jsonl or .ndjson suffixes are supported. Files with an additional .gz suffix will also be returned.

import cumulus_fhir_support as cfs

cfs.list_multiline_json_in_dir("/")
# {
#     "/con1.ndjson.gz": "Condition",
#     "/pat1.jsonl": "Patient",
#     "/random.jsonl": None,
# }

cfs.list_multiline_json_in_dir("/", "Patient")
# {
#     "/pat1.jsonl": "Patient",
# }

cfs.list_multiline_json_in_dir("/", ["Condition", "Patient"])
# {
#     "/con1.ndjson.gz": "Condition",
#     "/pat1.jsonl": "Patient",
# }

cfs.list_multiline_json_in_dir("/does-not-exist/")
# {}

cfs.list_multiline_json_in_dir("s3://mybucket/", fsspec_fs=s3_fs)
# {
#     "/mybucket/procs.ndjson": "Procedure",
# }

read_multiline_json

Iterates over a single multiline JSON file.

Files with the .gz extension are automatically uncompressed.

import cumulus_fhir_support as cfs

list(cfs.read_multiline_json("/pat1.jsonl"))
# [
#     {"resourceType": "Patient", "id": "pat1", "birthDate": "2020-10-16"},
#     {"resourceType": "Patient", "id": "pat2", "birthDate": "2013-04-18"},
# ]

list(cfs.read_multiline_json("/does-not-exist.ndjson"))
# []

list(cfs.read_multiline_json("/mybucket/procs.ndjson", fsspec_fs=s3_fs))
# [
#     {"resourceType": "Procedure", "id": "proc1", "status": "stopped"},
# ]

read_multiline_json_with_details

Lower level function to iterate over a single multiline JSON file, with extra line metadata.

Files with the .gz extension are automatically uncompressed.

import cumulus_fhir_support as cfs

list(cfs.read_multiline_json_with_details("/pat1.jsonl"))
# [
#     {
#         "json": {"resourceType": "Patient", "id": "pat1", "birthDate": "2020-10-16"},
#         "line_num": 0,
#         "byte_offset": 0,
#     },
#     {
#         "json": {"resourceType": "Patient", "id": "pat2", "birthDate": "2013-04-18"},
#         "line_num": 1,
#         "byte_offset": 69,
#     },
# ]

list(cfs.read_multiline_json_with_details("/pat1.jsonl"), offset=69)
# [
#     {
#         "json": {"resourceType": "Patient", "id": "pat2", "birthDate": "2013-04-18"},
#         "line_num": 0,
#         "byte_offset": 0,
#     },
# ]

read_multiline_json_from_dir

Iterates over every JSON object in a directory (allowing filtering by FHIR resource).

Files with the .gz extension are automatically uncompressed.

import cumulus_fhir_support as cfs

list(cfs.read_multiline_json_from_dir("/"))
# [
#     {"resourceType": "Condition", "id": "con1", "onsetDateTime": "2011-11-24"},
#     {"resourceType": "Patient", "id": "pat1", "birthDate": "2020-10-16"},
#     {"resourceType": "Patient", "id": "pat2", "birthDate": "2013-04-18"},
#     {"description": "not a fhir object"},
# ]

list(cfs.read_multiline_json_from_dir("/", "Condition"))
# [
#     {"resourceType": "Condition", "id": "con1", "onsetDateTime": "2011-11-24"},
# ]

list(cfs.read_multiline_json_from_dir("/", ["Condition", "Patient"]))
# [
#     {"resourceType": "Condition", "id": "con1", "onsetDateTime": "2011-11-24"},
#     {"resourceType": "Patient", "id": "pat1", "birthDate": "2020-10-16"},
#     {"resourceType": "Patient", "id": "pat2", "birthDate": "2013-04-18"},
# ]

list(cfs.read_multiline_json_from_dir("/does-not-exist/"))
# []

list(cfs.read_multiline_json_from_dir("/mybucket/", fsspec_fs=s3_fs))
# [
#     {"resourceType": "Procedure", "id": "proc1", "status": "stopped"},
# ]

pyarrow_schema_from_rows

Calculates a schema that can cover a given collection of FHIR objects.

import cumulus_fhir_support as cfs

rows = [
    {
        "resourceType": "Patient",
        "id": "1",
        "extension": [{
            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
            "extension": [{
                "url": "ombCategory",
                "valueCoding": {
                    "code": "2135-2",
                    "display": "Hispanic or Latino",
                    "system": "urn:oid:2.16.840.1.113883.6.238",
                },
            }],
        }],
    },
]

# The resulting schema will be both wide (every toplevel column)
# and deep enough for every field in `rows`.
# That is, both the non-present toplevel field "telecom" and the deeper
# field "extension.extension.valueCoding.system" will be in the schema.
schema = cfs.pyarrow_schema_from_rows("Patient", rows)

FhirClient

Connect to a FHIR server with a variety of authentication options and retries built-in.

import cumulus_fhir_support as cfs

client = cfs.FhirClient("https://r4.smarthealthit.org", {"Patient"})

async with client:
    response = await client.request("GET", "Patient/2cda5aad-e409-4070-9a15-e1c35c46ed5a")
    print(response.json())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cumulus_fhir_support-1.11.0.tar.gz (47.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cumulus_fhir_support-1.11.0-py3-none-any.whl (35.0 kB view details)

Uploaded Python 3

File details

Details for the file cumulus_fhir_support-1.11.0.tar.gz.

File metadata

  • Download URL: cumulus_fhir_support-1.11.0.tar.gz
  • Upload date:
  • Size: 47.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cumulus_fhir_support-1.11.0.tar.gz
Algorithm Hash digest
SHA256 67396447f81eb604ecd803c4ada6b3517262909cb6275db3d95138a774d76fc4
MD5 539f373f47bbc73ff4b1fe2c8cfbd2fb
BLAKE2b-256 86aaedd99393060b50cd789037bbfc90948b84b4a63a0945edd5ea051e92d167

See more details on using hashes here.

Provenance

The following attestation bundles were made for cumulus_fhir_support-1.11.0.tar.gz:

Publisher: pypi.yaml on smart-on-fhir/cumulus-fhir-support

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cumulus_fhir_support-1.11.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cumulus_fhir_support-1.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 02318c7e1b4b33660d82c70111fe4d8b77112e190ca426d201f370d410071892
MD5 4fe5cfb4b17fec46494166ca192015b0
BLAKE2b-256 6fc56c089a867870cc8b907388dad16f780d1892b5ca5bbee074857a5a3e09f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for cumulus_fhir_support-1.11.0-py3-none-any.whl:

Publisher: pypi.yaml on smart-on-fhir/cumulus-fhir-support

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page