Django HackInScience exercises app.
Project description
HackInScience
Setup
First firejail
and redis
(from your package manager), like:
apt install firejail redis
Install the dependencies:
python -m pip install requirements.txt
Then run the classical Django things:
./manage.py migrate
./manage.py loaddata initial
./manage.py compilemessages --ignore '.tox' --ignore '.venv'
./manage.py createsuperuser
Then in two distinct terminals, or by detaching one of them:
./manage.py correction_bot
and:
./manage.py runserver
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
The pages
A page is literaly a URL in your site, it can contain text (stored Markdown) and/or exercises.
For example the automatically created page at /help
is aimed to
store text but no exercises, and the page at /exercises
is aimed to
present some exercises, maybe after an intro text, or without any
text.
You can live with only those two pages, or create a whole set of pages like one exercise page per programming language, or per topic, per student class, ...
Once logged, the users are redirected to the first page (the one with
the smallsest position
).
The categories
Inside a page, you can optionally group exercises in categories, instead of displaying them as a whole single big list. It becomes handy around 50~70 exercises.
How to contribute
Updating the intial 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
Translations
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
$ ./manage.py compilemessages --ignore '.tox' --ignore '.venv'
Exercises (title and wording) are translated via the admin (or the API), we use django-modeltranslation.
How does the checker bot work?
The answers are load-balanced to correction workers using Celery, so you can have multiple machines dedicated to correct loads of answers.
Once received by a worker the worker runs two things:
-
An optional
pre_check.py
script, that sets-up anything specific for this answers (required files and directories, translations, whatever is needed). -
A
check.py
script is then started in a sandbox (no internet connectivity, restricted filesystem, CPU, memory usage, …). This is the script that check the student answer, the protocol is simple: if the script exits with non-zero, then then answer is wrong. And what's been printed (both stdout and stderr) is displayed, as Markdown, to the student. If the answer is right and nothing is printed, a default congratulation message is used.
Both pre_check.py
and check.py
are in Python, but they're not
limited to check for Python answers, if you want to check for shell
script or C, or whatever, the check.py
can use subprocess
to run
the answer script, or compile the answer code, or whatever needed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file django_hkis-1.0-py3-none-any.whl
.
File metadata
- Download URL: django_hkis-1.0-py3-none-any.whl
- Upload date:
- Size: 604.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 510941ecd21588c6b8f4863b25e53cefa338e5771dd1d6eed623dd3be2a989f9 |
|
MD5 | 429de694794ea8d171e694f960428f9c |
|
BLAKE2b-256 | 18d8ab3aef8e82a3a5969c1fde8034d65455fbecc2bd3a1b940fc73dd6016be3 |