Skip to content
Snippets Groups Projects

Engine API Server

Overview

The Project serves the Engine API and handles state management of multiple Engine instances.

This project is based on a swagger-enabled Flask server using an API First approach. It also uses the Connexion library on top of Flask.

Requirements

Python 3.7+ MariaDB (or similar Database)

Installation

Install the required dependencies:

pip3 install -r requirements.txt
# Additional requirements for the chosen database
pip3 install -r contrib/mariadb-requirements.txt
# Create database and user (change password in script)
sudo mysql -u root -p < contrib/mariadb-database.sql

Getting started

To run the server, please execute the following from the root directory:

./run.sh api

To run the API in an local development server execute:

./run.sh api-dev

Running with Docker

To run the server on a Docker container, please execute the following from the root directory:

# Building the image
./run.sh docker:build

# Push the current image to dockerhub.com
./run.sh docker:push

# Starting up a container
./run.sh docker:api

Using the API

Adding some entry to the playlog:

curl -d '{ "track_start": "2020-06-27 19:14:00", "track_artist": "Mazzie Star", "track_title": "Fade Into You", "log_source": 1 }' -H "Content-Type: application/json" -X POST http://localhost:8008/api/v1/playlog/store

This newly added entry can be queried using your browser in one of the following ways:

# Get the latest entry
http://localhost:8008/api/v1/trackservice/current
# Get a set of the most recent entries
http://localhost:8008/api/v1/trackservice/
# Filter some specific page (the three most recent entries)
http://localhost:8008/api/v1/trackservice?page=0&limit=3

All other API endpoints are listed in the interactive documentation.

http://localhost:8008/api/v1/ui/

Your OpenAPI definition lives here:

http://localhost:8008/api/v1/openapi.json

Testing

To launch the integration tests, use tox:

sudo pip install tox
./run.sh test

Note, the test-cases are currently not functional.