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
export TRANSFORMATIONS_PATH=/path/to/xslt/repositoryLancement du service Redis éphémère :
docker compose upInstallation des dépendances :
pip install -r requirements.txtLancement de l'application principale :
flask runLancement du worker RQ (traitement des jobs en asynchrone) :
rq worker --url $REDIS_URLLancer les services de test :
docker compose -f docker-compose.tests.yml upLancer les tests :
pytestSur 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=YESRé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 installOnce 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
ruffon the codebase will lint and format all of it, whereas usingpre-commitwill only be done on the staged files.