Skip to content

Pour une meilleure prise en compte de l'environnement dans les projets d'urbanisme

License

Notifications You must be signed in to change notification settings

hugoleborso/envergo

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EnvErgo

Améliorer la prise en compte de l'environnement dans les projets d'urbanisme.

À propos

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.

Solution technique

Les outils principaux suivants sont utilisés :

Démarrage

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.

Développement local

Pour développer en local, deux solutions :

1/ Créer un environnement local sur sa machine.

2/ Utiliser l'image Docker.

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

Qualité du code

De nombreux outils sont mis en place pour garantir la qualité et l'homogénéité du code.

Pour activer tout ça :

pre-commit install

Intégration continue

L'intégration continue est réalisée par des actions Github.

Configurer son environnement

Le projet propose un fichier Editorconfig pour configurer globalement les éditeurs de code.

VSCode

Pour VSCode, il est recommandé d'utiliser la configuration suivante.

Installer les extensions :

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).

Gestion des dépendances

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.

Tests

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

Déploiement

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.

Installation des dépendances Géo sur Scalingo

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.

Faire un dump de la base de prod

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

Comment charger une BD de dev depuis un 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

Glossaire

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

About

Pour une meilleure prise en compte de l'environnement dans les projets d'urbanisme

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 54.8%
  • HTML 36.0%
  • JavaScript 5.4%
  • SCSS 2.1%
  • Shell 1.3%
  • Dockerfile 0.3%
  • Procfile 0.1%