Contributing#

Running the website locally#

To run locally you’ll need a venv:

python -m venv .venv
source .venv/bin/activate

You’ll need to install some dependencies:

pip install requirements.txt

You’ll also need a local database (no need to install postgresql, we’re using sqlite3 in development):

./manage.py migrate

Now that we have a database, let’s load some examle data in it:

./manage.py loaddata initial

While we’re at it, let’s create an admin account for you:

./manage.py createsuperuser

You’re ready to run the website:

./manage.py runserver

That should work but you don’t have a correction bot yet. To start a correction bot you’ll need to install a redis server:

sudo apt install redis

And to secure the execution of the exercises we use firejail, install it too:

sudo apt install firejail

(or whatever installation thing you use on your distrib).

With redis running, you now can run a correction bot:

./manage.py correction_bot

Now you can login to /admin, from here you can change everything about your installation: manage users, create pages, create exercises, teams, review answers, and so on.

A /exercises page, and a /help page has been created automatically for you, you may want to start by adding some exercises to the exercises page.

Alternatively, one can use the hkis app alone, in order to personalize registration, urls, and so on, for this you can install hkis as a django app in your own project:

pip install django-hkis

A simple example project can be seen at:

=> https://framagit.org/hackinscience/hkis-example

Updating the initial fixture#

To save the initial.json file, use:

./manage.py dumpdata --indent 4 -e admin -e auth.Permission -e contenttypes -e sessions -o hkis/fixtures/initial.json

Translating#

Templates are translated using django makemessages and compilemessages commands:

./manage.py makemessages --locale fr
./manage.py makemessages --locale fr --domain djangojs

Edit the po files and run:

./manage.py compilemessages --ignore '.tox' --ignore '.venv'

Exercises (title and wording) are translated via the admin (or the API), we use django-modeltranslation.