Skip to content
Snippets Groups Projects
README.md 2.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • David Trattnig's avatar
    David Trattnig committed
    # Engine API Server
    
    David Trattnig's avatar
    David Trattnig committed
    
    ## Overview
    
    
    David Trattnig's avatar
    David Trattnig committed
    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.
    
    David Trattnig's avatar
    David Trattnig committed
    
    ## Requirements
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    Python 3.7+
    
    David Trattnig's avatar
    David Trattnig committed
    MariaDB (or similar Database)
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## Installation
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    Install the required dependencies:
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```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
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## Getting started
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    To run the server, please execute the following from the root directory:
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    ./run.sh api
    ```
    
    To run the API in an local development server execute:
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    ./run.sh api-dev
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## 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
    ```
    
    ## Using the API
    
    Adding some entry to the playlog:
    
    ```bash
    curl -d '{ "track_start": "2020-06-25 15:38:44", "track_artist": "Aphex Twin", "track_title": "Windowlicker", "log_source": 1 }' -H "Content-Type: application/json" -X POST http://localhost:8008/api/v1/playlog/store
    ```
    
    The attribute `log_source` is a numeric presentation of the engine (`1` or `2`) where this log entry
    is coming from. If you are using additional audio sources, such as automated music player, you can
    define your own numeric id for such device.
    
    All other API endpoints are listed in the interactive documentation:
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    http://localhost:8008/api/v1/ui/
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    Your OpenAPI definition lives here:
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    http://localhost:8008/api/v1/openapi.json
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## Testing
    
    
    David Trattnig's avatar
    David Trattnig committed
    To launch the integration tests, use tox:
    
    David Trattnig's avatar
    David Trattnig committed
    
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    sudo pip install tox
    
    David Trattnig's avatar
    David Trattnig committed
    ./run.sh test
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    > Note, the test-cases are currently not functional.