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

Évolution du chargement des modules GeoNature #1272

Closed
4 of 6 tasks
bouttier opened this issue Feb 11, 2021 · 4 comments
Closed
4 of 6 tasks

Évolution du chargement des modules GeoNature #1272

bouttier opened this issue Feb 11, 2021 · 4 comments

Comments

@bouttier
Copy link
Contributor

bouttier commented Feb 11, 2021

Le packaging des modules GeoNature permet notamment :

  • d’indiquer la version de GeoNature requise
  • d’éviter les chemins d’import relatif à plusieurs points
  • d’effectuer des imports depuis un autre module

Le mécanisme d’import des modules par GeoNature actuellement repose sur des chemins bien connu à la racine du module. Ceci est peu souple et ne permet pas le packaging où les sources sont généralement dans un dossier « src/{nom du module} ».

L’objectif de cet ticket est donc de faire évoluer le mécanisme d’import des modules par GeoNature afin de pouvoir importer des modules packagés. L’idée est la suivante :

  • Rétro-compatibilité avec les modules v1

  • Import du blueprint et du schéma de configuration à partir d’indication d’entry point dans le setup.py du module

  • Import d’un module packagé

    • Blueprint
    • Schéma de configuration
    • Sous-commandes geonature fournies par le module
  • Mise-à-jour de la documentation

  • Mise-à-jour du template

bouttier added a commit that referenced this issue Feb 11, 2021
bouttier added a commit that referenced this issue Feb 11, 2021
@camillemonchicourt camillemonchicourt changed the title Évolution du chargement des modules GéoNature Évolution du chargement des modules GeoNature Feb 11, 2021
@camillemonchicourt
Copy link
Member

Si cela impacte la structure ou la documentation des modules, il faut peut-être adapter le template de module fourni dans un dépôt dédié ?

@bouttier
Copy link
Contributor Author

J’ai commencé une liste des choses à faire, en y précisant ces points.

bouttier added a commit that referenced this issue Feb 15, 2021
@bouttier
Copy link
Contributor Author

bouttier commented Apr 7, 2021

Support des modules packagés dans ces commits :

Un module packagé doit définir un certains nombres d’entry point, exemple pour le module d’import (en cours de dev) :

    entry_points={
        'gn_module': [
            'code = gn_module_import:MODULE_CODE',
            'blueprint = gn_module_import.blueprint:blueprint',
            'config_schema = gn_module_import.conf_schema_toml:GnModuleSchemaConf',
            'migrations = gn_module_import:migrations',
        ],
    }

L’entry point code doit pointer sur une chaîne de texte contenant le code du module, i.e. IMPORT, permettant de faire la liaison entre le module et l’objet TModules en bdd.
L’entry point blueprint pointe vers le blueprint définissant les routes du module.
L’entry point config_schema pointe vers la classe Marshmallow permettant de parser le fichier de configuration du module.
L’entry point migrations pointe vers le dossier contenant les fichiers de migrations alembic.

Pour installer le module :

  • pip install --editable path/to/module
  • FLASK_APP=geonature.app flask db upgrade import@head
    Les migrations alembic ont pour rôle de créer l’entrée dans la table gn_commons.t_modules
  • ln -s path/to/module external_module/{MODULE_CODE} (pour activer le frontend)
  • Ajout du code du module dans la configuration de GeoNature (pour activer le backend):
  ENABLED_MODULES = [
    'IMPORT',
  ]
  • Les commandes usuelles de re-génération des fichiers de configurations (travail en cours de @joelclems pour simplifier cette partie) :
    • geonature update_module_configuration import
    • geonature generate_frontend_tsconfig_app
    • geonature generate_frontend_modules_route

@bouttier
Copy link
Contributor Author

bouttier commented Apr 8, 2021

Après discussion, afin de simplifier le processus d’installation notamment, le paramètre ENABLED_MODULES va être retiré, au profit du flag « active_backend » dans la BDD.
Alembic nécessite de connaître la liste des modules pour lesquelles des migrations existent (sans accéder à la BDD), mais la méthode de recherche introduite dans a7cdeaf ne nécessite pas de connaître la liste explicite des modules, rendant le paramètre ENABLED_MODULES superflu.

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

No branches or pull requests

2 participants