/les-emplois

Plate-forme numérique de l'inclusion

Primary LanguagePythonGNU Affero General Public License v3.0AGPL-3.0

Itou - Les emplois de l'inclusion

Les emplois de l'inclusion est un service numérique de délivrance des PASS IAE et de mise en relation d'employeurs inclusifs avec des candidats éloignés de l'emploi par le biais de tiers (prescripteurs habilités, orienteurs) ou en autoprescription.

Environnement de développement

Définition des variables d'environnement

Les valeurs par défaut de dev.py permettent de lancer un environnement fonctionnel.

Cependant, il est recommandé d'en prendre connaissance pour noter par exemple que les emails ne sont pas réellement envoyés mais que leur contenu est simplement écrit dans la sortie standard.

Le reste de la configuration se fait avec des variables d'environnement.

Celles concernant notre hébergeur CleverCloud sont définis au niveau du déploiement et de l'app CleverCloud tandis que les autres paramètres applicatifs indépendants du PaaS sont définis dans le projet itou-secrets.

Installation

L’application est développée avec Django, la base de données est gérée par PostgreSQL et le stockage objet type S3 MinIO.

Les instructions ci-dessous vous permettront d’obtenir un environnement de développement pratique à utiliser au quotidien. Pour obtenir un environnement fonctionnel très rapidement, mais moins ouvert au développement, suivre les instructions containerization.

Services nécessaires

Les dépendances (base de données PostgreSQL et le stockage objet type S3) sont rendues disponibles par Docker et Docker Compose.

Démarrez les dépendances de développement avec la commande :

docker compose up

Note : Vous pouvez personnaliser la configuration des dépendances gérées par Docker Compose en créant un fichier .env au même niveau que le fichier README.md.

Dépendances Python

Base de données

L’adaptateur Python pour PostgreSQL, psycopg, a quelques pré-requis auxquels votre système doit répondre. https://www.psycopg.org/docs/install.html#runtime-requirements

Par ailleurs, le projet utilise GDAL, et nécessite son installation préalable.

Sur MacOS :

$ brew install gdal

Sur Ubuntu :

$ apt-get install gdal-bin

Virtualenv

La commande make suivante crée un virtualenv et installe les dépendances pour le développement. Elle peut être exécutée régulièrement pour s’assurer que les dépendances sont bien à jour.

$ make venv

Dans un virtualenv, vous pouvez utiliser les commandes Django habituelles (./manage.py) mais également les recettes du Makefile.

Par défaut l'environment sera stocké dans le répertoire .venv. En bash/zsh c'est activé avec la commande source .venv/bin/activate (doc).

Il est recommandé d'utiliser direnv qui permet l'activation de l'environment automatique.

Création des buckets S3

Les fichiers téléversés sont enregistrés dans un stockage objet type S3. En local, le service est rendu par MinIO. Sa console d’administration est disponible à l’adresse http://localhost:9001/.

Login : minioadmin Password : minioadmin

Afin de créer les buckets nécessaires au développement et aux tests, lancer la commande :

$ make buckets

Accéder au serveur de développement

Démarrer le serveur de développement avec la commande :

$ make runserver

Vous pouvez y accéder à l'adresse http://localhost:8000/.

Obtenir une base de données de développement

$ make resetdb

Charger une base de données de production

Inspirez-vous de la suite de commandes suivante :

$ rclone copy --max-age 24h --progress emplois:/encrypted-backups ./backups
$ pg_restore --jobs=4 --no-owner backups/backup.dump
$ python manage.py set_fake_passwords
$ python manage.py shell --command 'from itou.users.models import User; print(User.objects.update(identity_provider="DJANGO"))'

Rendez-vous sur la doc de itou-backups pour plus d’infos.

Qualité de code

make quality

Automatiquement avant chaque commit

Pre-commit est un outil qui gère des hooks de pre-commit Git.

Cela remplace les configurations individuelles par un fichier de configuration présent dans le projet.

$ pre-commit install

Lancer les tests

Le projet utilise pytest.

Lancer la suite complète, comme sur la CI :

make test

Lancer un test en particulier :

pytest itou/utils/tests.py::JSONTest::test_encoder

Mettre à jour les dépendances Python

La liste des dépendances est consignée dans les fichiers requirements/*.in. Une fois ces fichiers modifiés, les dépendances sont figées avec l’outil pip-tools. La commande suivante permet de mettre à jour une dépendance, par exemple flake8 :

$ PIP_COMPILE_OPTIONS="-P flake8" make compile-deps

Si les changements paraissent corrects, ils peuvent être ajoutés à git et commit.

Front-end