Skip to main content

The Thalamus project provides a RESTful API hub to all the GNU Health Federation nodes. The main functions are:

# Message server: A concentrator and message relay from and to the participating nodes in the GNU Health Federation and the GNU Health Information System (MongoDB). Some of the participating nodes include the GNU Health HMIS (Tryton based), MyGNUHealth mobile PHR application, laboratories, research institutions and civil offices.

# Authentication Server : Thalamus also serves as an authentication and authorization server to interact with the GNUHealth Information System

Thalamus is part of the GNU Health project, but it is a self contained, independent server that can be used in different health related scenarios.

Installation

Thalamus is pip-installable.

>>> pip install thalamus

Technology

RESTful API: Thalamus uses a REST (Representional State Transfer) architectural style, powered by Flask technology

Thalamus will perform CRUD (Create, Read, Update, Delete) operations. They will be achived via the following methods upon resources and their instances.

# GET : Read

# POST : Create

# PUT / PATCH : Update

# DELETE : Minimal (or even none)

JSON: The information will be encoded in JSON format.

Resources

Some examples of resources and end-points are:

People (/people)

DomiciliaryUnits (/domiciliary-units)

Institutions (/institutions)

Encounters (/encounters)

Events (/events)

PersonalDocs (/personal-documents)

Running Thalamus from a WSGI Container

In production settings, for performance reasons you should use a HTTP server. We have chosen Gunicorn , but you can use any WSGI server.

Gunicorn supports WSGI natively and it comes as Python package. We have included a very simple config file (etc/gunicorn.cfg) to run Thalamus from Gunicorn with SSL enabled.

For example, you can run the Thalamus application from Gunicorn as follows. The default configuration file uses secure (SSL) connections

gunicorn –config etc/gunicorn.cfg thalamus:app

If you want to run it directly from the Flask Werkzeug server,

python ./thalamus.py

Examples

Command-line, using httpie

Retrieve the demographic information of person.

http –verify no –auth ITPYT999HON:gnusolidario https://localhost:8443/people/ESGNU777ORG

HTTP/1.1 200 OK Connection: close Content-Length: 411 Content-Type: application/json Date: Fri, 21 Apr 2017 16:22:38 GMT Server: gunicorn/19.7.1

{

“_id”: “ESGNU777ORG”, “active”: true, “biological_sex”: “female”, “dob”: “Fri, 04 Oct 1985 13:05:00 GMT”, “education”: “tertiary”, “ethnicity”: “latino”, “gender”: “female”, “lastname”: “Betz”, “marital_status”: “married”, “name”: “Ana”, “password”: “$2b$12$cjrKVGYEKUwCmVDCtEnwcegcrmECTmeBz526AAD/ZqMGPWFpHJ4FW”, “profession”: “teacher”, “roles”: [ “end_user” ]

}

Retrieve the demographics information globally

http –verify no –auth ITPYT999HON:gnusolidario https://localhost:8443/people

HTTP/1.1 200 OK Connection: close Content-Length: 933 Content-Type: application/json Date: Fri, 21 Apr 2017 16:31:23 GMT Server: gunicorn/19.7.1

[
{

“_id”: “ITPYT999HON”, “active”: true, “biological_sex”: “female”, “dob”: “Fri, 05 Oct 1984 09:00:00 GMT”, “education”: “tertiary”, “ethnicity”: “latino”, “gender”: “female”, “lastname”: “Cordara”, “marital_status”: “married”, “name”: “Cameron”, “password”: “$2b$12$Y9rX7PoTHRXhTO1H78Tan.8mVmyayGAUIveiYxu2Qeo0ZDRvJQ8/2”, “profession”: “teacher”, “roles”: [ “end_user”, “health_professional” ]

},

{

“_id”: “ESGNU777ORG”, “active”: true, “biological_sex”: “female”, “dob”: “Fri, 04 Oct 1985 13:05:00 GMT”, “education”: “tertiary”, “ethnicity”: “latino”, “gender”: “female”, “lastname”: “Betz”, “marital_status”: “married”, “name”: “Ana”, “password”: “$2b$12$cjrKVGYEKUwCmVDCtEnwcegcrmECTmeBz526AAD/ZqMGPWFpHJ4FW”, “profession”: “teacher”, “roles”: [ “end_user” ]

}

]

Using Python requests

python3

>>> import requests
>>> person = requests.get('https://localhost:8443/people/ESGNU777ORG', auth=('ITPYT999HON', 'gnusolidario'), verify=False)
>>> person.json()
{'_id': 'ESGNU777ORG', 'active': True, 'biological_sex': 'female','dob': 'Fri, 04 Oct 1985 13:05:00 GMT',
'education': 'tertiary', 'ethnicity': 'latino', 'gender': 'female', 'lastname': 'Betz', 'marital_status': 'married',
'name': 'Ana', 'password': '$2b$12$cjrKVGYEKUwCmVDCtEnwcegcrmECTmeBz526AAD/ZqMGPWFpHJ4FW', 'profession': 'teacher',
'roles': ['end_user']}

Note: The user “ITPYT999HON” is a health professional (health_professional role), so she has global access to demographic information. Check the roles.cfg file fo examples information about roles and ACLs

Development

Thalamus is part of the GNU Health project.

The development will be done on GNU Savannah, using the Mercurial repository.

Tasks, bugs and mailing lists will be on health-dev@gnu.org , for development.

General questions can be done on health@gnu.org mailing list.

You can visit http://health.gnu.org

Release Cycle

Thalamus will follow its own release process, independent from GNU Health HMIS.

Packaging

There will be a tarball, as well as a Python package (pypi)

Author:

Luis Falcon <lfalcon@gnusolidario.org>

Download files

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

Source Distribution

thalamus-0.0.2.tar.gz (45.4 kB view details)

Uploaded Source

File details

Details for the file thalamus-0.0.2.tar.gz.

File metadata

  • Download URL: thalamus-0.0.2.tar.gz
  • Upload date:
  • Size: 45.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for thalamus-0.0.2.tar.gz
Algorithm Hash digest
SHA256 61004792988f95b9afda67c622b029b2cfdceca4e6ab8f578138ef8d1cacad55
MD5 c87eaae2d2510760d93cde7f15c248db
BLAKE2b-256 65ede0e21f804b31f3e1b97a5b473aff1d1e0d9ec6649394d2fa6ac7acebdff9

See more details on using hashes here.

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