An ASGI framework to build HTTP API's from a Python module structure.
Go to file
Maxime Alves LIRMM 8930e065d2 [query] add fields list to query 2020-07-20 11:20:58 +02:00
conf [query] add fields list to query 2020-07-20 11:20:58 +02:00
halfapi [query] add fields list to query 2020-07-20 11:20:58 +02:00
scripts [query] add fields list to query 2020-07-20 11:20:58 +02:00
tests [debug] better handling of debug routes 2020-07-10 12:58:53 +02:00
.gitignore [middleware] put AclCallerMiddleware in lib file 2020-07-08 17:12:58 +02:00
README.md [doc] README systemd details 2020-07-15 00:11:31 +02:00
__init__.py [WIP] Import halfapi OK dans test_jwt_middleware. 2020-07-03 21:39:59 +02:00
poetry.lock [deps] added apidb to dependencies 2020-07-12 22:10:16 +02:00
pyproject.toml [deps] added pyods3 for organigramme..., deleted CSVresponse from libs 2020-07-16 17:54:07 +02:00
pytest.ini [test] add default DEBUG flag for pytest, add tests for jwt_middleware 2020-07-09 10:29:17 +02:00
requirements.txt merge avec cli_update_db 2020-07-03 11:58:13 +02:00

README.md

HalfAPI

This Python-based ASGI application aims to provide the core functionality to multiple API domains.

It's developed at the LIRMM in Montpellier, France.

The name "halfAPI" comes from the deep relationship between it and halfORM, a project authored by Joël Maizi.

You'll need a database with the API details. You can find the database model in halfapi/models/api.sql

With halfORM's "hop" command, we generate the models that describe the database from the database schema itself. You can find the details in hop_api repository.

NOTE : The authentication module is deeply linked with auth_lirmm, so if you need to use the acl.connected function, you will need a running auth_lirmm server to get a token.

TODO : include a token generation tool for testing purpose.

Dependencies

  • python3
  • python3-pip
  • python3-virtualenv
  • python3-venv

pip

  • poetry

Installing

As the project uses the poetry package manager, you first have to install it globally. It will replace virtualenv, pip, etc...

pip3 install poetry

Be sur to include the bin directory of pip in your PATH.

Virtual Environment (optional)

Then, cd in the halfapi repo, and chose your python version :

POETRY_VIRTUALENVS_PATH=$HOME/.pyvenv poetry env use 3.7

NOTE : The virtualenv will be automatically be activated each time you run a command with the poetry tool. If you want to do it the classical way, or even without virtual environment, it's up to your choice.

Installation of the deps :

poetry install

If you need a domain, i.e: organigramme, just add -E organigramme to the command.

NOTE : You need to run poetry install before installing any domains (that depends on halfapi).

API database

Populate the API database with te server information, the domain's routes, and their ACL by running the following command :

poetry run halfapi dbupdate

NOTE: You need to have the domain's package installed if you want to populate the api routes module, as it check for the existence of the acl functions.

Database configuration

The api and domains' databases connection settings are stored by default in /etc/half_orm. Check halfORM documentation for more information on how to write these configuration files.

You can set the HALFORM_SECRET environment variable if you want to specify an authentication secret.

TODO : find a modular way to configure the database connection for each mounted domain

Running

Development mode

In the halfapi repository, type :

poetry run halfapi

If you need to launch the test suite (only works if you have pytest installed) :

poetry run pytest

Production

The production server may use different init systems. As our main server is Debian-based, we use systemd services to manage the api server. Find the right service files and configure them properly in order to make your production setup perfect.

cp conf/systemd/lirmm_api* /etc/systemd/system/
systemctl daemon-reload
systemctl start lirmm_api

To make it start at boot :

systemctl enable lirmm_api

To get the logs :

journalctl -f --unit lirmm_api