Skip to main content

FHIR classes for Python

Project description

py-fhir

FHIR Resources/Elements for Python. Code generated by py-fhir-codegen.

Introduction

This python package provides a python version of the Resources and Elements specified in the FHIR specification. Additionally, the package includes first steps towards database persistance (using SQLAlchemy) and a client.

How to use Resources and DataTypes

Running the following code creates a Patient and assigns values to different attributes. Finally, the object is serialized to JSON representation and the result is printed.

# Import the relevant classes from fhir.model
from fhir.model import Patient, HumanName, Identifier, CodeableConcept, Coding, uri

# Create a new Patient object. Resource attributes can be passed in the constructor. Note
# that 'id' is the logical id of the Resource and has no relation to the Medical Record
# Number (MRN)
p = Patient(id='patient1')

# Give the patient an MRN
identifier = Identifier(
    type=CodeableConcept(coding=[Coding(system="http://hl7.org/fhir/v2/0203", code="MR")]),
    system='urn:oid:1.2.36.146.595.217.0.1',
    value='123456789'
)

# Lists can be assigned to attributes.
# Alternatively p.identifier.append(identifier) could have been used.
p.identifier = [identifier]

# Native python values are automatically coerced to FHIR classes
p.active = True
print(type(p.active))
# output: <class 'fhir.model._boolean.boolean'>

name = HumanName()
name.use = 'official'
name.given = ['Melle', 'Sjoerd']
name.family = 'Sieswerda'
p.name = [name]

# Serialize to JSON and print the result. To serialize to XML use 'p.toXML()'.
print(p.dumps('json'))

This should yield the following output:

{
    "resourceType": "Patient",
    "id": "patient1",
    "identifier": [
        {
            "type": {
                "coding": [
                    {
                        "system": "http://hl7.org/fhir/v2/0203",
                        "code": "MR"
                    }
                ]
            },
            "system": "urn:oid:1.2.36.146.595.217.0.1",
            "value": "123456789"
        }
    ],
    "active": true,
    "name": [
        {
            "use": "official",
            "family": [
                "Sieswerda"
            ],
            "given": [
                "Melle",
                "Sjoerd"
            ]
        }
    ]
}

It is also possible to marshall an object from JSON (or XML) representation:

jsonstring = p.dumps('json')
p2 = Patient.loads(jsonstring, 'json')
p2.id == p.id
# output: True

Using the client

import fhir.model
import fhir.client
from fhir.model import Patient, HumanName

URL = fhir.client.SERVERS['spark']
client = fhir.client.Client(URL)
client.set_properties(fhir.model.Resource)

# The following is equivalent to
# bundle = client.query('Patient')
bundle = fhir.model.Patient.query()

# Print the first result we received
for p in bundle:
    print(p.dumps('json'))
    break

# Create a new patient on the server
p = Patient()
p.active = True

name = HumanName(
	use='official',
	given=['Melle'],
	family='Testpatient'
)
p.name = [name]

p.save()
print('The server assigned id "{}"'.format(p.id))

Using persistant storage

Cave: the current implementation should be considered a stub. Searching/querying, updating, etc. is not (yet) supported.

from fhir.persistance import FHIRStore
import fhir.model

# By default FHIRStore creates a sqlite database in the current directory.
# Still, be careful when using 'drop_all'!
store = FHIRStore(drop_all=True)

# Create a new Patient
p = fhir.model.Patient()
p.id = 'patient1'
p.active = True

name = fhir.model.HumanName(
    use='official',
    given=['Melle', 'Sjoerd'],
    family='Sieswerda'
)
p.name = [name]

# Store the patient
store.post(p)

# Retrieve the patient from the store and print the result.
print(store.get('patient1'))
# output: <fhir.model.patient.Patient object at 0x1096dd828>

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

py-fhir-0.1.1a5.tar.gz (81.0 kB view details)

Uploaded Source

Built Distribution

py_fhir-0.1.1a5-py3-none-any.whl (161.1 kB view details)

Uploaded Python 3

File details

Details for the file py-fhir-0.1.1a5.tar.gz.

File metadata

  • Download URL: py-fhir-0.1.1a5.tar.gz
  • Upload date:
  • Size: 81.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.3

File hashes

Hashes for py-fhir-0.1.1a5.tar.gz
Algorithm Hash digest
SHA256 a5d419ad85712c48dede7e5f08be9543d8caa29260487c6057698e80e21a2b16
MD5 07cd47223fc6c1a8a7489ccf9905cb1e
BLAKE2b-256 a141085656029bba8b951969946c43a82bb07319b5b2f362e97eb98f851b08d9

See more details on using hashes here.

File details

Details for the file py_fhir-0.1.1a5-py3-none-any.whl.

File metadata

  • Download URL: py_fhir-0.1.1a5-py3-none-any.whl
  • Upload date:
  • Size: 161.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.3

File hashes

Hashes for py_fhir-0.1.1a5-py3-none-any.whl
Algorithm Hash digest
SHA256 3e47986a8ae61b59bbc05b235c92ac95fc7d256bd95845dfab1c4263e8458b18
MD5 a2137ea141619ac5074da732b4e8c9db
BLAKE2b-256 ea68b9849f026ca5b99adfd3f270badffb9d42f97ead213dec0e16902ebaae51

See more details on using hashes here.

Supported by

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