Une application pour appliquer des transformations XML aux catalogues Geonetwork du MTECT.
- Sélection du catalogue, des fiches à migrer et des traitements à appliquer
- Traitement des données (application des transformations)
- Migration des données sur le catalogue distant (optionnel)
Le parti-pris pour les étapes 2. et 3. est d'utiliser (actuellement simulé) un fichier binaire d'échange qui peut être téléchargé par l'usager à l'issue de l'étape et/ou appliqué par l'application à l'étape 3.
L'application Flask intègre :
- le DSFR pour une charte graphique cohérente,
- htmx pour dynamiser certains comportements (prévisualisation de la sélection, polling du statut des jobs)
- RQ pour une gestion de jobs/queue simple, basé sur Redis,
- NB: ce composant est jugé nécessaire car certains traitements peuvent prendre du temps, notamment les opérations sur le catalogue distant. L'architecture permet également de stocker des éléments volumineux (fichier de sortie) entre les requêtes. Si la notion de job/queue n'est plus jugée nécessaire, le Redis pourra être utilisé pour stocker des données de sessions volumineuses.
- un frontend HTML Flask classique.
Les variables d'environnement suivantes sont nécessaires :
export FLASK_APP=isomorphe.app
export FLASK_DEBUG=1
export FLASK_SECRET_KEY=s3cr3t
export REDIS_URL=redis://localhost:6379
Lancement du service Redis éphémère :
docker compose up
Installation des dépendances :
pip install -r requirements.txt
Lancement de l'application principale :
flask run
Lancement du worker RQ (traitement des jobs en asynchrone) :
rq worker --url $REDIS_URL
Lancer les services de test :
docker compose -f docker-compose.tests.yml up
Lancer les tests :
pytest
Sur MacOS, il peut être nécessaire d'utiliser la variable d'environnement suivante pour éviter un crash du worker RQ :
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
Référence : rq/rq#2058
Linting, formatting and import sorting are done automatically by Ruff launched by a pre-commit hook. So, before contributing to the repository, it is necessary to initialize the pre-commit hooks:
pre-commit install
Once this is done, code formatting and linting, as well as import sorting, will be automatically checked before each commit.
If you cannot use pre-commit, it is necessary to format, lint, and sort imports with Ruff before committing:
ruff check --fix .
ruff format .
WARNING: running
ruff
on the codebase will lint and format all of it, whereas usingpre-commit
will only be done on the staged files.