Skip to main content

fhirbase connector

Project description

Build Status pypi

fhirbase.py

FHIRBase connector for python. This package provides wrapper over psycopg2 connection which provides CRUD for resources in fhirbase.

Install

pip install fhirbase

Usage

Import fhirbase and psycopg2 libraries:

import fhirbase
import psycopg2

Create a connection using psycopg2.connect;

connection = psycopg2.connect(
    dbname='postgres', user='postgres',
    host='localhost', port='5432')

Create an instance of FHIRBase:

fb = fhribase.FHIRBase(connection)

Now you can use the following methods of FHIRBase instance:

  • .execute(sql, params=None, commit=False)
  • .execute_without_result(sql, params=None, commit=False)
  • .row_to_resource(row)

CRUD methods work with FHIR resources. Resource represented as a dict with specified resourceType key as required key. The following methods works with resource and returns resources.

  • .create(resource, txid=None, commit=True)
  • .update(resource, txid=None, commit=True)
  • .delete(resource, txid=None, commit=True)/.delete(resource_type, id, txid=None, commit=True)
  • .read(resource)/.read(resource_type, id)
  • .list(sql, params=None)

Methods

.execute

Executes sql with params.

Syntax: .execute(sql, params=None, commit=False)

Returns: context manager with cursor as context

Example:

with fb.execute('SELECT * FROM patient WHERE id=%s', ['id']) as cursor:
    print(cursor.fetchall())

.execute_without_result

Executes sql with params.

Syntax: .execute_without_result(sql, params=None, commit=False)

Returns: nothing

Example:

fb.execute_without_result('INSERT INTO transaction (resource) VALUES (%s)', ['{}'])

.row_to_resource

Transforms row raw from DB to resource.

Syntax: .row_to_resource(row)

Returns: resource representation (dict)

Example:

fb.row_to_resource({
    'resource': {'name': []},
    'ts': 'ts',
    'txid': 'txid',
    'resource_type': 'Patient',
    'meta': {'tag': 'created'},
    'id': 'id',
}))

will return resource representation:

{
    'id': 'id',
    'meta': {'lastUpdated': 'ts', 'versionId': 'txid'},
    'name': [],
    'resourceType': 'Patient',
}

.create

Creates resource. If txid is not specified, new unique logical transaction id will be generated.

Syntax: .create(resource, txid=None, commit=True)

Returns: resource representation (dict)

Example:

fb.create({
    'resourceType': 'Patient',
    'name': [{'text': 'John'}],
})

returns

{
    'resourceType': 'Patient',
    'id': 'UNIQUE ID',
    'name': [{'text': 'John'}],
    'meta': {'lastUpdated': 'timestamp', 'versionId': 'txid'},
}

.update

Updates resource. If txid is not specified, new unique logical transaction id will be generated.

Key id is required in resource argument.

Syntax: .update(resource, txid=None, commit=True)

Returns: resource representation (dict)

Example:

fb.update({
    'resourceType': 'Patient',
    'id': 'id',
    'name': [{'text': 'John'}],
})

returns

{
    'resourceType': 'Patient',
    'id': 'UNIQUE ID',
    'name': [{'text': 'John'}],
    'meta': {'lastUpdated': 'timestamp', 'versionId': 'txid'},
}

.delete

Deletes resource. If txid is not specified, new unique logical transaction id will be generated. Keys id and resourceType are required in resource argument in first variant of usage.

Syntax: .delete(resource, txid=None, commit=True) or .delete(resource_type, id, txid=None, commit=True)

Returns: nothing

Example:

fb.delete({
    'resourceType': 'Patient',
    'id': 'id',
})

or

fb.delete(resource_type='Patient', id='id')

.read

Reads resource. Keys id and resourceType are required in resource argument in first variant of usage.

Syntax: .read(resource) or .read(resource_type, id)

Returns: resource representation (dict)

Example:

fb.read({
    'resourceType': 'Patient',
    'id': 'id',
})

or

fb.read(resource_type='Patient', id='id')

.list

Executes SQL and returns iterator of resources. Note: sql query must return all fields of resource table.

Syntax: .list(sql, params)

Returns: iterator of resources

Example:

for patient in fb.list('SELECT * FROM patient'):
    print(patient)

or

patients = list(fb.list('SELECT * FROM patient'))

Example application

To run example, just do:

docker-compose build
docker-compose up -d

Wait until db starting process will be completed, and run:

docker-compose run --rm fhirbase fhirbase init 3.0.1
docker-compose run --rm fhirbasepy python examples/example.py

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

fhirbase-0.0.1.tar.gz (5.0 kB view details)

Uploaded Source

File details

Details for the file fhirbase-0.0.1.tar.gz.

File metadata

  • Download URL: fhirbase-0.0.1.tar.gz
  • Upload date:
  • Size: 5.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/39.2.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.5

File hashes

Hashes for fhirbase-0.0.1.tar.gz
Algorithm Hash digest
SHA256 530408651a35a96e779ba2a2b22dc14eed1c47d026c296d300185ccf5574433f
MD5 b62fd592b0130cd88c2cfebc7a0cb878
BLAKE2b-256 94765f7cd40c23216d5bf21037ef225bce66e7a8c5c37f4ee9e4f0e4a287e80e

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