Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[03] Folder redisign #93

Merged
merged 35 commits into from
Mar 8, 2024
Merged

Conversation

rv2931
Copy link
Collaborator

@rv2931 rv2931 commented Mar 4, 2024

  • Retour du README.md principal + intégration du README de william

  • déplacement de tous les fichiers sources dans un sous-dossiers src (renommage bloom=>src)

  • On remonte tous les fichiers qui ne sont pas réellement du code à la racine

    • fichier pyproject.toml
    • fichier tow.ini
    • fichiers poetry
    • dossier docs
    • paramétrage docker dans un dossier docker dédié
    • pour docker docker-compose.yml posé à la racine pour qu'il trouve le .env par défaut
    • le répertoire /data + petit README
  • Généralisation du nom des fichiers data

    • Création d'un paramètre applicatif DATA_FOLDER désignant le répertoire ou se trouvent les données CSV
      Par défaut il est situé à la racine du projet mais cette variable permet de le place ailleurs
    • Les subsets de données sont fournis avec des noms de fichier contenant la date. Cela
      Signifie qu'à chaque mise à jour il faut modifier le code. Je propose de fixer le nom des
      fichiers et de la généraliser pour généraliser de la même manière les scripts de chargement
      Ainsi :
      • load_vessels_data.py va chercher [settings.data_folder]/chalutiers_pelagiques.csv
      • load_positions_data.py va chercher [settings.data_folder]/spire_positions_subset.csv
      • load_amp_data.py va chercher [settings.data_folder]/zones_subset.csv
  • mise à jour du .env.template

    • Ajout du paramètre DATA_FOLDER: répertoire où trouver les données csv
    • Ajout LOGGING_LEVEL: Configuration du niveau de log (INFO, DEBUG, ...) du bloom.logger
    • Ajout de IMAGE_PYTHON (optionnelle): image de build du container Docker. Permet notamment
      de construire facilement un conteneur dans différentes
      version de python en passant en argument de build
    • Ajout de POETRY_VERSION (optionnelle): version de POETRY à utiliser pour le build
    • STREAMLIT_SERVER_ADDRESS (optionnelle): Permet de précise l'adresse réseau de bind du serveur
      streamlit. Par défault 0.0.0.0
  • mise à jour du Makefile

    • Ajout du point de montage /data en plus de project
    • mise à jour du répertoire d'accueil /source_code => /project & /project/src
    • utilisation du plugin "docker compose" plutôt que de la commande docker-compose
  • Docker Compose

    • Mise à jour du conteneur postgres_bloom pour utiliser l'image POSTGIS et non le conteneur
      pre-initialisé de william (souci de partage de données)
    • Création d'un conteneur init qui se charge de faire un premier check postgres/alembic avant
      de lancer l'application ensuite si succès
    • On extrait le paramètre POSTGRES_PORT de common-env car cela pose un souci vu que common-env
      est prioritaire sur la section environment: des services, ce qui fait que lorsqu'on
      change POSTGRES_PORT dans le .env il est aussi modifié dans la stack docker alors qu'il
      faut le laisser à 5432 entre les deux conteneur
    • Ajout du paramètre LOGGING_LEVEL pour fixer le niveau de log du conteneur bloom
  • Dockerfile

    • Mise en argument IMAGE_PYTHON de l'image FROM: permet de compiler sur différentes versions
      de python avec le même dockerfile
    • Ajout de deux pré-requis g++ et libgeos-dev pour python 3.11/3.12
    • modification du répertoire d'accueil de /source_code à /project suite réorganisation
    • Optimisation des enchaînement de commandes RUN pour limiter le nombre de layers dans l'image
  • pyproject.toml

    • réorganisation alphabétique des dépendances
    • mise à jour des contraintes python >=3.9,<3.9.7 || >3.9.7,<3.12 proposé par poetry à partir
      des contraintes du packet geopandas. Cela signifie qu'officiellement on est pas compatible python 3.8
      même si ça s'installe à priori correctement
  • Modification de la récupération et du chargement des paramètres bloom.config

    • Ajout de la gestion d'une configuration par fichier précisé par la variable d'environnement
      BLOOM_CONFIG=/path/to/env.file. En natif cela permet de préciser un fichier de config et
      de switcher facilement d'un env à l'autre en modifiant signifie la variable BLOOM_CONFIG avant
      lancement. BLOOM_CONFIG=.env par défaut pour être cohérent avec docker compose
      * Exemple: export BLOOM_CONFIG=/path/to/.env.local.dev
      * Pour docker ça peut permet de désigner un fichier configs (/config.env par exemple) et de le préciser par variable d'environnement BLOOM_CONFIG=/config.env
    • Gestion des paramètres à partir du fichier ET des variables d'environnement avec une priorité
      aux variables d'environnement si présentes. Cela signifie que la valeur donnée par une variable
      d'environnement écrase la variable qui a pu être chargé à partir du fichier BLOOM_CONFIG
    • Mise à jour des différents endroit utilisant les variables d'environnement afin d'utiliser
      le module bloom.config import settings pour accéder aux bonnes valeurs (FILE+ENV)
  • Général:

    • Utilisation de Path(file) afin de ne pas dépendre du current directory qui n'est pas
      déterministe mais utilisation du répertoire relatif au fichier courant Path(file).parent

@rv2931 rv2931 force-pushed the folder_redisign branch 3 times, most recently from 88aa1c4 to 6ea1bf8 Compare March 5, 2024 22:41
@rv2931
Copy link
Collaborator Author

rv2931 commented Mar 6, 2024

Test réalisé pour validation

  • docker compose build --no-cache
  • docker compose up -d
  • Attente de 20 secondes suite souci de double initialisation de postgres + postgis (au premier lancement et l'init de l'extension)
  • docker compose exec bloom bash
  • source /venv/bin/activate
  • python alembic/init_script/load_vessels_data.py
  • python alembic/init_script/load_positions_data.py
  • python alembic/init_script/load_amp_data.py
  • Connexion au site web http://127.0.0.1:8501
  • Selection du menu Vessel Exploration
  • Selection d'un MMSI parmi
    • 244938000
    • 226347000
    • 261084090
    • 228066900
    • 246749000
    • 227302000
    • 228215800
    • 263581000
    • 224378000
    • 232031183
  • On s'assure que Load MPA est décoché sinon on a une erreur AttributeError: 'MPA' object has no attribute 'gov_type' (créer une Issue)
  • J'obtiens bien une trajectoire pour le navire
  • Si on modifie la valeur Voyage Id jusqu'à la valeur maximum, on a une erreur : ValueError: cannot convert float NaN to integer
    image

@rv2931
Copy link
Collaborator Author

rv2931 commented Mar 6, 2024

test du makefile

  • copy of subset in root directory /data
  • renommage des fichiers .csv en enlevant la date, conforme au set de fichier
    • /spire_positions_subset.csv
    • /vessels_subset.csv
    • /zones_subset.csv
  • Si le chemin data est différent de celui du dépôt, mettre à jour le paramètre DATA_FOLDER dans le .env*
  • make build
  • make launch-dev-db
  • make launch-dev-container
  • make launch-dev-app (FAIL: trying to access spire endpoint but no Token valid (NORMAL FAIL) )

@rv2931 rv2931 marked this pull request as ready for review March 6, 2024 21:32
@rv2931 rv2931 mentioned this pull request Mar 6, 2024
@rv2931 rv2931 changed the title Folder redisign [03] Folder redisign Mar 6, 2024
Makefile Show resolved Hide resolved
src/bloom/config.py Show resolved Hide resolved
@RonanMorgan
Copy link
Collaborator

merci beaucoup, beau boulot !

@rv2931
Copy link
Collaborator Author

rv2931 commented Mar 8, 2024

Faut que je fasse des tests sous linux en docker et natif et jeboensr qu'on peut intégrer. Je fais ça ce matin

@rv2931 rv2931 marked this pull request as draft March 8, 2024 07:01
@rv2931
Copy link
Collaborator Author

rv2931 commented Mar 8, 2024

Bon j'ai fait quelques tests sous Linux en docker compose et en natif
Pour le natif dans les fait et pour choisir son fichier de config il y a deux solutions:
export BLOOM_CONFIG=/path/to/my/config/.env.localhost && python src/app.py
ou
source .env.localhost && python src/app.y

C'est l'intérêt que bloom.config puisse gérer autant un paramétrage par fichier ou par variable d'environnement, c'est flexible

@rv2931
Copy link
Collaborator Author

rv2931 commented Mar 8, 2024

Je repasse le PR en ready, pour intégration
Je vais pas être dispo 10h-12h, mais je pense qu'on peut commencer à faire des Issues quand on rencontre des souci, je les corrigerait d'ici ce soir s'il y en a je pense

Je pense que si les issues sur la partie front sont simples on les corrige, si c'est plus compliqué faudra se poser la question de la pérennité de streamlit (pas d'avis mais sujet en cours)

@rv2931 rv2931 marked this pull request as ready for review March 8, 2024 08:08
herve.le-bars and others added 20 commits March 8, 2024 11:11
# Conflicts:
#	bloom/bloom/config.py
# Conflicts:
#	.gitignore
#	.pre-commit-config.yaml
#	bloom/.gitignore
#	bloom/.pre-commit-config.yaml
#	src/.gitignore
#	src/.pre-commit-config.yaml
#	src/alembic/init_script/load_amp_data.py
#	src/alembic/init_script/load_positions_data.py
#	src/alembic/init_script/load_vessels_data.py
…overloading to 5432 in docker compose stack
@rv2931 rv2931 marked this pull request as draft March 8, 2024 10:18
@rv2931 rv2931 marked this pull request as ready for review March 8, 2024 10:25
@RonanMorgan RonanMorgan merged commit e9a86a8 into dataforgoodfr:main Mar 8, 2024
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants