FHIR Resources as Model Class
Project description
FHIR® Resources (R4, STU3, DSTU2)
Powered by pydantic, all FHIR Resources are available as python class with built-in data validation, faster in performance. Written in modern python.
Easy to construct, easy to extended validation, easy to export.
Full support of FHIR® Extensibility for Primitive Data Types are available.
Previous release of FHIR® Resources are available.
Free software: BSD license
FHIR® Version Info
FHIR® (Release R4, version 4.0.1) is available as default. Also previous versions are available as Python sub-package (each release name string becomes sub-package name, i.e STU3 ).
Available Previous Versions:
STU3 (3.0.2)
DSTU2 (1.0.2) [partially see issue#13]
Installation
Just a simple pip install fhir.resources or easy_install fhir.resources is enough. But if you want development version, just clone from https://github.com/nazrulworld/fhir.resources and pip install -e .[all].
Usages
Example: 1: Construct Resource Model object:
>>> from fhir.resources.organization import Organization >>> from fhir.resources.address import Address >>> data = { ... "id": "f001", ... "active": True, ... "name": "Acme Corporation", ... "address": [{"country": "Swizterland"}] ... } >>> org = Organization(**data) >>> org.resource_type == "Organization" True >>> isinstance(org.address[0], Address) >>> True >>> org.address[0].country == "Swizterland" True >>> org.dict()['active'] is True True
Example: 2: Resource object created from json string:
>>> from fhir.resources.organization import Organization >>> from fhir.resources.address import Address >>> json_str = '''{"resourceType": "Organization", ... "id": "f001", ... "active": True, ... "name": "Acme Corporation", ... "address": [{"country": "Swizterland"}] ... }''' >>> org = Organization.parse_raw(json_str) >>> isinstance(org.address[0], Address) >>> True >>> org.address[0].country == "Swizterland" True >>> org.dict()['active'] is True True
Example: 3: Resource object created from json object(py dict):
>>> from fhir.resources.patient import Patient >>> from fhir.resources.humanname import HumanName >>> from datetime import date >>> json_obj = {"resourceType": "Patient", ... "id": "p001", ... "active": True, ... "name": [ ... {"text": "Adam Smith"} ... ], ... "birthDate": "1985-06-12" ... } >>> pat = Patient.parse_obj(json_obj) >>> isinstance(pat.name[0], HumanName) >>> True >>> org.birthDate == date(year=1985, month=6, day=12) True >>> org.active is True True
Example: 4: Construct Resource object from json file:
>>> from fhir.resources.patient import Patient >>> import os >>> import pathlib >>> filename = pathlib.Path("foo/bar.json") >>> pat = Patient.parse_file(filename) >>> pat.resource_type == "Patient" True
Example: 5: Construct resource object in python way:
>>> from fhir.resources.organization import Organization >>> from fhir.resources.address import Address >>> json_obj = {"resourceType": "Organization", ... "id": "f001", ... "active": True, ... "name": "Acme Corporation", ... "address": [{"country": "Swizterland"}] ... } >>> org = Organization.construct() >>> org.id = "f001" >>> org.active = True >>> org.name = "Acme Corporation" >>> org.address = list() >>> address = Address.construct() >>> address.country = "Swizterland" >>> org.address.append(address) >>> org.dict() == json_obj True
Example: 4: Using Resource Factory Function:
>>> from fhir.resources import construct_fhir_element >>> json_dict = {"resourceType": "Organization", ... "id": "mmanu", ... "active": True, ... "name": "Acme Corporation", ... "address": [{"country": "Swizterland"}] ... } >>> org = construct_fhir_element('Organization', json_dict) >>> org.address[0].country == "Swizterland" True >>> org.dict()['active'] is True True
Example: 5: Auto validation while providing wrong datatype:
>>> try: ... org = Organization({"id": "fmk", "address": ["i am wrong type"]}) ... raise AssertionError("Code should not come here") ... except ValueError: ... pass
Migration (from later than 6.X.X)
This migration guide states some underlying changes of API and replacement, those are commonly used from later than 6.X.X version.
fhir.resources.fhirelementfactory.FHIRElementFactory::instantiate
Replacement: fhir.resources.construct_fhir_element
First parameter value is same as previous, the Resource name.
Second parameter is more flexible than previous! it is possible to provide not only json dict but also json string or json file path.
No third parameter, what was in previous version.
fhir.resources.fhirabstractbase.FHIRAbstractBase::__init__
Replacement: fhir.resources.fhirabstractmodel.FHIRAbstractModel::parse_obj<classmethod>
First parameter value is same as previous, json dict.
No second parameter, what was in previous version.
fhir.resources.fhirabstractbase.FHIRAbstractBase::as_json
Replacement: fhir.resources.fhirabstractmodel.FHIRAbstractModel::dict
Output are almost same previous, but there has some difference in case of some date type, for example py date, datetime, Decimal are in object representation.
It is possible to use fhir.resources.fhirabstractmodel.FHIRAbstractModel::json as replacement, when json string is required (so not need further, json dumps from dict)
Note:
All resources/classes are derived from fhir.resources.fhirabstractmodel.FHIRAbstractModel what was previously from fhir.resources.fhirabstractbase.FHIRAbstractBase.
Release and Version Policy
Starting from version 5.0.0 we are following our own release policy and we although follow Semantic Versioning scheme like FHIR® version. Unlike previous statement (bellow), releasing now is not dependent on FHIR®.
removed statement
This package is following FHIR® release and versioning policy, for example say, FHIR releases next version 4.0.1, we also release same version here.
Credits
All FHIR® Resources (python classes) are generated using fhir-parser which is forked from https://github.com/smart-on-fhir/fhir-parser.git.
This package skeleton was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
© Copyright HL7® logo, FHIR® logo and the flaming fire are registered trademarks owned by Health Level Seven International
History
6.0.0b1 (2020-07-05)
Revolutionary evolution has been made, now fully rewritten with modern python, underlying APIs (almost all) have been changed. Please have look at readme section, for howto.
Improvements
Full support of FHIR Extensibility for Primitive Data Types
Breaking
Drop support for python 2.7.
5.1.0 (2020-04-11)
Improvements
FHIR STU3 release version upgraded from 3.0.1 to 3.0.2, Please find changes history here https://www.hl7.org/fhir/history.html.
FHIR R4 release version upgraded from 4.0.0 to 4.0.1, find changes history here https://www.hl7.org/fhir/history.html.
5.0.1 (2019-07-18)
Bugfixes:
Issue#5 confusing error message “name ‘self’ is not defined” [nazrulworld]
5.0.0 (2019-06-08)
Nothing but release stable version.
5.0.0b3 (2019-05-14)
New features
Isuue#1 Add DSTU2 Support
5.0.0b2 (2019-05-13)
Breaking or Improvments
elementProperties: element now has extra property type_name. Now format like (name, json_name, type, type_name, is_list, "of_many", not_optional) The type_name refers original type name (code) from FHIR Structure Definition and it would be very helpful while making fhir search, fhirpath navigator.
5.0.0b1 (2019-01-19)
New features
Implemented own build policy, now previous version of FHIR® resources are available as python sub-package.
Build info
Default version is R4 (see version info at 4.0.0b1 (2019-01-13) section)
STU3 (see version info at 3.0.1 (2019-01-13) section)
4.0.0 (2019-01-14)
see version info at 4.0.0b1 section.
4.0.0b1 (2019-01-13)
[FHIR] FhirVersion=4.0.0-a53ec6ee1b version=4.0.0 buildId=a53ec6ee1b date=20181227223754
3.0.1 (2019-01-13)
[FHIR] FhirVersion=3.0.1.11917 version=3.0.1 revision=11917 date=20170419074443
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for fhir.resources-6.0.0b1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b15c76666ab96d78708570d056dc5073f661dd8aace7d84e0bd2107ee5134da7 |
|
MD5 | b79cee4e7c4ce97a2ed1d4f8192085eb |
|
BLAKE2b-256 | d7b33a9333d7ba85f535c1f76ad99100d19b58e4c1c5e605e0c7ff41d9812417 |