Development environment
To start with developing on Zou, you need Python 3 installed and a Postgres database instance.
Database
To run Postgres, we recommend using Docker (it's simpler, and it won't impact your local system):
sudo docker pull postgres
sudo docker run \
--name postgres \
-pĀ 5432:5432 \
-e POSTGRES_PASSWORD=mysecretpassword \
-d postgres
Key-value store
To run Redis, we recommend using Docker again:
sudo docker pull redis
sudo docker run \
--name redis \
-p 6379:6379 \
-d redis
Indexer
To run Meilisearch, we recommend using Docker again:
sudo docker pull getmeili/meilisearch:v1.8.3
sudo docker run -it --rm \
--name meilisearch \
-p 7700:7700 \
-e MEILI_ENV='development' \
-e MEILI_MASTER_KEY='meilimasterkey' \
-v $(pwd)/meili_data:/meili_data \
-d getmeili/meilisearch:v1.8.3
FFMPEG
For video operations, FFMPEG is required. For that, install it through your OSĀ package manager:
sudo apt-get install ffmpeg
Source and dependencies
Then get Zou sources:
git clone git@github.com:cgwire/zou.git
Install virtualenvwrapper:
pip install virtualenvwrapper
Add configuration for virtualenvwrapper to your .bashrc:
export WORKON_HOME=directory_for_virtualenvs
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source ~/.local/bin/virtualenvwrapper.sh
Create a virtual environment with mkvirtualenv:
mkvirtualenv zou
workon zou
Install dependencies:
pip install -r requirements.txt
Init data
Create a database in Postgres named zoudb with user postgres and password
mysecretpassword. Then init db:
python zou/cli.py clear-db
python zou/cli.py init-db
python zou/cli.py init-data
Create a first user:
python zou/cli.py create-admin super.user@mycgstudio.com --password=mysecretpassword
Run server:
PREVIEW_FOLDER=$PWD/previews DEBUG=1 MAIL_DEBUG=1 FLASK_DEBUG=1 FLASK_APP=zou.app INDEXER_KEY=meilimasterkey python zou/debug.py
You can now use the API by requesting http://localhost:5000.
Update database
In case of adding/removing attributes of models, you must generate the DB update file:
python zou/cli.py migrate-db
Event server
To run the Server Events server used to update the web GUI in realtime, use the following command.
gunicorn --worker-class geventwebsocket.gunicorn.workers.GeventWebSocketWorker -b 127.0.0.1:5001 -w 1 zou.event_stream:app
Tests
To run unit tests, we recommend using another database.
Add ffmpeg
To run all tests, ffmpeg and ffprobe are required.
Init the search index
The search index can be initialized and reset with the following command:
INDEXER_KEY=meilimasterkey DB_DATABASE=zoutest zou reset-search index
Create a testing database
In the CLI of the hosting, the PostgreSQL DB executes the following:
If Docker, connect with: docker exec -it postgres bash
sudo su -l postgres
psql -c 'create database zoutest;' -U postgres
Run the tests
In your zou environment workon zou, execute the tests with the DB_DATABASE environment variable:
INDEXER_KEY=meilimasterkey DB_DATABASE=zoutest py.test
If you want to run a specific test (you can list several):
DB_DATABASE=zoutest py.test tests/models/test_entity_type.py
Debug email sending
If you set properly the MAIL_DEBUG=1 flag, the body of each sent email is
displayed in the console.