Development setup

Installation

A venueless installation currently contains four components:

  • A frontend web application with our user interface

  • A server application exposing our API

  • A PostgreSQL database server

  • A redis database server

While you can execute them all independently, our recommended development setup uses docker-compose to make sure everyone works with the same setup and to make it easy to run all these components. So the only prerequisites for development on your machine are:

  • Docker

  • docker-compose

To get started, you can use the following command to create the docker containers and start them up:

docker-compose up --build

Our server application will now run on your computer on port 8375, and our web application on port 8880. Both of them are configured to automatically restart whenever you change the code, so you can now pick your favorite text editor and get started.

To make things more interesting, you should import a sample configuration with some basic event data:

docker-compose exec server python manage.py import_config sample/worlds/sample.json

Then, you can visit http://localhost:8880/ in your browser to access the event as a guest user.

Running tests

Our server component comes with an extensive test suite. After you made some changes, you should give it a run and see if everything still works:

docker-compose exec server pytest

Code style

For our server component, we enforce a specific code style to make things more consistent and diffs easier to read. Any pull requests you send us will automatically be checked against these rules.

To check locally, it is convenient to have a local Python environment (such as a virtual environemnt) in which you can install the dependencies of the server component:

(venueless) $ cd server
(venueless) $ pip install -r requirements.txt

To auto-format the code according to the code style and to check for linter issues, you can run the following commands:

(venueless) $ black venueless tests
(venueless) $ isort -rc venueless tests
(venueless) $ flake8 venueless tests

To automatically check before commits, add a script like the following to .git/hooks/pre-commit and apply chmod +x .git/hooks/pre-commit:

#!/bin/bash
source ~/.virtualenvs/venueless/bin/activate
cd server
for file in $(git diff --cached --name-only | grep -E '\.py$' | grep -Ev "venueless/celery_app\.py|venueless/settings\.py")
do
  echo Scanning $file
  git show ":$file" | black -q --check - || { echo "Black failed."; exit 1; } # we only want to lint the staged changes, not any un-staged changes
  git show ":$file" | flake8 - --stdin-display-name="$file" || exit 1 # we only want to lint the staged changes, not any un-staged changes
  git show ":$file" | isort -df --check-only - | grep ERROR && exit 1 || true
done

Non-docker development setup

If you prefer to run the components independently, you can do so as well. Here is a brief overview of how to set up on Linux OS.

  • Create a Python environment, activate it, and install the dependencies:

    # Activate Python virtual environemnt with your preferred method.
    # Go to "server" directory.
    cd server
    pip install -r requirements.txt
    
  • Create a PostgreSQL user with the same username as your Linux user:

    sudo -u postgres createuser -s $USER
    
  • Create a PostgreSQL database named eventyay-video:

    createdb eventyay-video
    
  • Create a config file named venueless.cfg in the server directory with the following content:

    [database]
    backend = postgresql
    name = eventyay-video
    
  • Run migrations:

    ./manage.py migrate
    
  • Create your superuser:

    ./manage.py createsuperuser
    
  • Run the development server:

    ./manage.py runserver
    

Then you can access the admin page at http://localhost:8000/control/.