Skip to content

A REST-API wrapper around PyHPO to handle the Human Phenotype Ontology (HPO) through HTTP(S)

License

Notifications You must be signed in to change notification settings

anergictcell/pyhpoapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

14d5409 · Jul 28, 2023

History

35 Commits
Jul 28, 2023
Jul 28, 2023
Jul 28, 2023
Nov 7, 2020
Nov 7, 2020
Nov 7, 2020
Nov 7, 2020
Jan 31, 2021
Jul 28, 2023
Jul 28, 2023
Jul 28, 2023
Jul 27, 2023
Jul 28, 2023

Repository files navigation

PyHPO-API

A HTTP REST-API wrapper for PyHPO

Main features

This package allows an easy setup of a REST API to interact with HPO Terms using the PyHPO package.

API Documentation

To see an interactive API documentation, install PyHPO-API, run the app and visit http://127.0.0.1:8000/docs

Installation / Setup

The easiest way to install PyHPO-API is via pip

pip install pyhpoapi

Note

PyHPO-API ships with pyhpo as the underlying Ontology by default. it is also possible to use hpo3 instead. hpo3 is a drop-in replacement of pyhpo written in Rust and is much faster. It is not 100% feature complete, so use it with caution. To switch to hpo3 unintstall pyhpo and then install hpo3

pip uninstall -y pyhpo
pip install hpo3

Usage

Getting started

The easiest way to get started is to run the API via

uvicorn pyhpoapi.main:app

Parallel processing

If you want better performance for parallel request handling, you can run PyHPO-API with multiple workers

uvicorn pyhpoapi.main:app --workers 15

Note

Don't use more workers than available CPUs as it will backfire and slow down processing due to constant context-switches

CORS

If you need to allow cross-origin requests, you specify CORS settings through environment variables:

export PYHPOAPI_CORS_ORIGINS="*"
export PYHPOAPI_CORS_METHODS="GET,POST"
export PYHPOAPI_CORS_HEADERS="*"

Dev

Getting started for development

Clone the repository

git clone https://github.com/anergictcell/pyhpoapi.git
cd pyhpoapi

Use Docker for development

One way to do this is to run a docker container during development

docker run --rm -v $(pwd):/src -p 8000:8000 -it python:3.9-slim-buster bash

cd src
pip3 install -r requirements.txt
pip3 install -r requirements-dev.txt

python3 -m unittest discover tests

uvicorn --host 0.0.0.0 --reload pyhpoapi.main:app

Or local development without Docker

Create a virtual environment and install requirements in the virtual environment

virtualenv venv_pyhpoapi
source venv_pyhpoapi/bin/activate

pip3 install -r requirements.txt
pip3 install -r requirements-dev.txt

python3 -m unittest discover tests

uvicorn --reload pyhpoapi.main:app