Skip to main content

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

This version

1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

django_hkis-1.0-py3-none-any.whl (604.2 kB view details)

Uploaded Python 3

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

Hashes for django_hkis-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 510941ecd21588c6b8f4863b25e53cefa338e5771dd1d6eed623dd3be2a989f9
MD5 429de694794ea8d171e694f960428f9c
BLAKE2b-256 18d8ab3aef8e82a3a5969c1fde8034d65455fbecc2bd3a1b940fc73dd6016be3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page