# 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](https://github.com/zalando/connexion) library on top of Flask.

## Requirements

Python 3.7+
MariaDB (or similar Database)

# Setup

Install the required dependencies:

```bash
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
```

You can access the interactive documentation here:

```
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
```

## Running with Docker

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

```bash
# 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
```