Aller au contenu

Développement

Organisation du dépôt

Chemin Contenu
geoduc_dt/main.py Intégration à QGIS : menu, barre d'outils, messages
geoduc_dt/dialog.py Fenêtre de chargement
geoduc_dt/loader.py Chargement du GML et application des styles
geoduc_dt/styles/<THÈME>/ Symbologies (QML) par thème DT-DICT, un fichier par couche
docs/ Sources de cette documentation
properdocs.yml Configuration de la documentation
scripts/package.sh Construction du ZIP de l'extension
scripts/import_styles.py Import des styles QML StaR-DT dans geoduc_dt/styles/
scripts/release.py Outils de release (vérification du tag, notes, plugins.xml)
tests/test_smoke.py Test de fumée QGIS 3 / QGIS 4
CHANGELOG.md Historique des versions

Tester l'extension en local

Créer un lien symbolique vers le dossier des extensions du profil QGIS, puis activer l'extension dans le gestionnaire d'extensions (l'extension Plugin Reloader facilite les rechargements) :

ln -s "$PWD/geoduc_dt" ~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/geoduc_dt

Styles

Au chargement, l'extension lit le code du thème dans la couche ReseauUtilite (ELEC, GAZ, AEP…) et applique à chaque couche le fichier geoduc_dt/styles/<THÈME>/<NomDeLaCouche>.qml s'il existe.

Les styles proviennent de la symbologie DT d'OpenStarApd. Ils sont convertis par scripts/import_styles.py pour correspondre aux couches d'un GML StaR-DT :

  • un dossier par code de thème (ELEC-Electricite devient ELEC) ;
  • un fichier par couche GML (DT_CableElectrique.qml devient CableElectrique.qml, DT_Accessoire_Electricity.qml devient Accessoire.qml) ;
  • les listes de codes sont lues dans les champs *_href du GML, qui contiennent une URI ("statut" devient regexp_substr("statut_href", '[^/]+$')) ;
  • les fonctions d'OpenStarApd (ose_get_associated_theme, ose_join_strings) sont remplacées par des expressions QGIS standard.

Pour régénérer les styles après une mise à jour des QML sources :

./scripts/import_styles.py /chemin/vers/StarDT-QML

Les variantes *_RPD.qml (style « RPD » d'Enedis, thèmes ELEC*) sont conservées mais ne sont pas appliquées automatiquement.

Tests et compatibilité QGIS 3 / QGIS 4

Le code doit rester compatible PyQt5 (QGIS 3) et PyQt6 (QGIS 4) :

  • importer Qt uniquement via qgis.PyQt ;
  • écrire les énumérations sous leur forme complète (Qt.AlignmentFlag.AlignLeft et non Qt.AlignLeft).

Le test de fumée se lance avec le Python de QGIS, éventuellement avec un GML StaR-DT :

QT_QPA_PLATFORM=offscreen python3 tests/test_smoke.py [fichier.gml]

Pour QGIS 4 installé en Flatpak :

flatpak run --command=sh --filesystem="$PWD" org.qgis.qgis -c \
  'PYTHONPATH=/app/share/qgis/python QT_QPA_PLATFORM=offscreen python3 tests/test_smoke.py'

La CI GitLab lance ce test sur QGIS 3.34, 3.44 LTR et QGIS 4.

Construire le ZIP

./scripts/package.sh

Publier une version

Une release est déclenchée en poussant un tag vX.Y.Z :

  1. Mettre à jour version= dans geoduc_dt/metadata.txt et ajouter en tête de changelog= une ligne X.Y.Z - [FR] … et une ligne X.Y.Z - [EN] … (QGIS ne traduit pas ce champ).
  2. Ajouter la section ## [X.Y.Z] - AAAA-MM-JJ dans CHANGELOG.md.
  3. Commiter, puis créer et pousser le tag :

    git tag -a vX.Y.Z -m "géoduc dt X.Y.Z"
    git push origin vX.Y.Z
    

La CI GitLab :

  • vérifie que le tag correspond à metadata.txt et à une section du CHANGELOG (scripts/release.py check) ;
  • lance les tests sur QGIS 3 et QGIS 4, puis construit le ZIP ;
  • dépose le ZIP dans le registre de paquets GitLab ;
  • crée la release GitLab avec les notes du CHANGELOG et le lien vers le ZIP ;
  • republie GitLab Pages avec le plugins.xml du dépôt d'extensions QGIS, qui pointe vers ce ZIP.

Le plugins.xml décrit toujours la dernière version taguée : les utilisateurs qui ont ajouté le dépôt géoduc dans QGIS sont alors avertis de la mise à jour.

Documentation

python3 -m venv .venv
.venv/bin/pip install -r requirements/docs.txt
.venv/bin/properdocs serve   # aperçu sur http://127.0.0.1:8000