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/.