Améliorer la prise en compte de l'environnement dans les projets d'urbanisme.
Cette page concerne le code source du projet EnvErgo. Pour en savoir plus sur le projet lui-même, se référer au site EnvErgo.beta.gouv.fr.
Les outils principaux suivants sont utilisés :
- le framework Django
- le système de design de l'état français
- le projet Cookiecutter-Django pour l'initialisation du dépôt.
Cookiecutter-Django est un initialiseur de projet, par les auteurs de Two Scoops of Django.
Par conséquent, on se référera à sa doc pour en savoir plus sur l'organisation du projet et les différents outils mis en place.
Pour développer en local, deux solutions :
1/ Créer un environnement local sur sa machine.
Il est recommandé de se baser sur la version docker.
Pour lancer l'environnement rapidement :
$ docker-compose build
$ docker-compose up
Pour construire la base de données (dans un autre shell) :
$ docker-compose run --rm django python manage.py migrate
Pour avoir accès aux fichiers static
depuis le serveur de debug :
$ npm install
$ python manage.py collectstatic
De nombreux outils sont mis en place pour garantir la qualité et l'homogénéité du code.
- pre-commit qui lance plusieurs outils de validation au moment du commit (cf. sa configuration)
- flake8 pour la validation du code python
- black pour l'auto-formattage du code python
- isort pour l'ordonnancement des imports python
- Djhtml pour l'indentation des templates
Pour activer tout ça :
pre-commit install
L'intégration continue est réalisée par des actions Github.
Le projet propose un fichier Editorconfig pour configurer globalement les éditeurs de code.
Pour VSCode, il est recommandé d'utiliser la configuration suivante.
Installer les extensions :
- EditorConfig pour vscode
- External formatter (pour djhtml)
Pour activer le formatage à l'enregistrement et correctement affecter les bons "linters" aux bons types de fichiers :
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true,
"files.associations": {
"**/templates/*.html": "django-html",
"**/templates/*": "django-txt",
"**/requirements{/**,*}.{txt,in}": "pip-requirements"
},
"emmet.includeLanguages": {
"django-html": "html"
},
"[django-html]": {
"editor.defaultFormatter": "SteefH.external-formatters"
},
"externalFormatters.languages": {
"django-html": {
"command": "djhtml",
"arguments": [
"-t 2"
],
},
},
"beautify.language": {
"html": [
"htm",
"html",
"django-html"
]
},
"beautify.config": {
"brace_style": "collapse,preserve-inline",
"indent_size": 2,
"indent_style": "space",
},
"[python]": {
"pythonPath": ".venv/bin/python",
"linting.enabled": true,
"linting.flake8Enabled": true,
"linting.pylintEnabled": false,
"formatting.provider": "black",
"formatting.blackArgs": [
"--line-length=88"
],
"sortImports.args": [
"--profile",
"black"
],
}
}
Pour être certain de la présence de tous les outils configurés, il est recommandé de créer un environnement virtuel python, puis d'installer toutes les dépendances locales (cf. plus bas).
Les dépendances sont gérées avec pip-tools.
Pour installer une nouvelle dépendance, il faut éditer l'un des fichiers *.in présents dans le répertoire /requirements
.
cd requirements
echo "<nomdupaquet>" >> local.in
./compile.sh
pip-sync local.txt
Pour mettre à jour l'image Docker, relancer build
puis up
.
Les tests sont écrits avec pytest. Tous les helpers de pytest-django sont disponibles.
Pour lancer les tests :
En local :
pytest
Via Docker :
docker-compose run --rm django pytest
Le déploiement se fait sur la plateforme Scalingo. Pour lancer un déploiement, il suffit de pousser de nouveaux commits sur la branche prod
.
Le point d'entrée se trouve dans le fichier Procfile
.
Les scripts utilisés sont dans le répertoire bin
.
EnvErgo utilise GeoDjango, une version de Django s'appuyant sur des dépendances externes pour les fonctions géographiques (gdal, geos, proj…).
Pour installer ces dépendances, Scalingo proposait un buildpack dédié, qui est tombé en désuétude.
À titre de solution temporaire, les actions suivantes ont été réalisées :
1/ Forker le heroku-geo-buildpack
et modifier cette ligne pour obtenir la bonne url.
2/ Remplacer le buildpack scalingo par l'url du buildpack clôné : https://github.com/MTES-MCT/envergo/blob/fix_geo_buildpack/.buildpacks#L3
3/ Configurer la variable d'environnement DISABLE_COLLECTSTATIC
. (On appelle déjà manuellement collectstatic dans notre build https://github.com/MTES-MCT/envergo/blob/main/bin/build_assets.sh#L35).
4/ Lancer le déploiement. L'app build sans soucis. Je n'ai pas encore noté de bugs sur les fonctions geo.
Se référer à cette documentation.
$ scalingo -a envergo env | grep POSTGRESQL
$ scalingo -a envergo db-tunnel DATABASE_URL
Building tunnel to envergo-1234.postgresql.dbs.scalingo.com:35314
You can access your database on:
127.0.0.1:10000
Depuis un autre shell :
pg_dump --dbname postgresql://<user>:<pass>@localhost:10000/<db> > /tmp/envergo.dump
$ . envs/postgres
$ docker-compose exec postgres bash -c 'dropdb envergo -U "$POSTGRES_USER" -f'
$ docker-compose exec postgres bash -c 'createdb envergo -U "$POSTGRES_USER" -O "$POSTGRES_USER"'
$ cat /tmp/envergo.dump | docker exec -i envergo_postgres psql -U $POSTGRES_USER -d $POSTGRES_DB
$ docker-compose run --rm django python manage.py migrate
Voici un petit index des acronymes et termes métiers fréquemment rencontrés.
- LSE : Loi sur l'eau
- 3.2.2.1, 2.1.5.0… : références à certaines rubriques de la Loi sur l'eau, décrivant les critères qui font que certains projets sont soumis ou non à déclaration Loi sur l'eau.
- IOTA : Installations, ouvrages, travaux et aménagements, i.e un « projet ».
- DREAL : Direction régionale de l'Environnement, de l'aménagement et du logement.
- CEREMA : Centre d'études et d'expertise sur les risques, l'environnement, la mobilité et l'aménagement
- DGALN : Direction générale de l'Aménagement, du Logement et de la Nature