Skip to content

Develop#256

Open
pierre56 wants to merge 2 commits into
PnX-SI:developfrom
Bretagne-Vivante:develop
Open

Develop#256
pierre56 wants to merge 2 commits into
PnX-SI:developfrom
Bretagne-Vivante:develop

Conversation

@pierre56

Copy link
Copy Markdown

Bonjour,
J'ai fait des modifications sur usershub que je mets a dispo.
Nous avons atteint les +20k comptes avec l'intégration des données/comptes de faune-france.
La pagination était nécessaire pour rendre l'application utilisable chez nous et les collègues ont menacés d'abandonner l'outil car chaque chargement/modification demandait plusieurs minutes et tapait des timeout, désormais ça prend a peine quelques secondes.

J'en ai profité pour répondre aux demandes des collègues et améliorer 2/3 trucs en reprenant les bonnes idées présentes dans les PR.
En intégrant/modifiant le travail de :
#241
#185
(merci pour le travail)

Le dev a été fait en bonne partie avec codex et ça tourne en prod depuis 1 mois sans soucis
Aucune route essentielle n'a été modifiée, ce sont les mm lib, j'ai essayé de faire le moins de changements de fond possible mais quand même pas mal de petites améliorations qui était obligatoire pour mon install.
En espérant que ça serve

🚀 Nouveautés

  • [Observabilité] Ajout d'une couche d'observabilité centralisée Flask avec X-Request-ID, logs de fin de requête, logs de requêtes lentes et logs SQL lents.
  • [Erreurs] Mise en place de handlers globaux pour les erreurs SQLAlchemy et les erreurs applicatives avec messages HTML plus explicites et traces corrélées par request_id.
  • [Utilisateurs] Passage de /users/list en pagination, tri et recherche côté serveur tout en conservant la route et l'écran fonctionnel existants.
  • [Organismes] Passage de /organisms/list en pagination, tri et recherche côté serveur tout en conservant la route et l'écran fonctionnel existants.
  • [Groupes] Passage de /group/members/<id_groupe> en pagination serveur pour les membres disponibles et sélectionnés.
  • [Listes] Passage de /list/members/<id_liste> en pagination serveur pour les membres disponibles et sélectionnés.
  • [Utilisateurs] Ajout d'un filtre activable Tous / Actifs / Inactifs sur la liste des utilisateurs, avec valeur par défaut Tous.
  • [Formulaire utilisateur] Remplacement du sélecteur d'organisme par une autocomplétion distante sur user/add et user/update.
  • [Formulaire utilisateur] Remplacement du sélecteur de groupes par une liste de cases à cocher plus lisible, avec tri alphabétique des groupes.
  • [API] Ajout d'une route d'autocomplétion pour les organismes utilisée par le formulaire utilisateur.
  • [Fiches] Affichage générique des champs additionnels dans les fiches utilisateur et organisme, y compris pour des structures variables et imbriquées.

🐛 Corrections

  • [Fiches utilisateur] Correction des accès fragiles aux champs additionnels, notamment lorsque champs_addi est absent, vide ou partiellement renseigné.
  • [Fiches organisme] Ajout d'un affichage optionnel des champs additionnels liés aux organismes, sans dépendre d'une colonne additional_data présente sur tous les schémas.

🧪 Tests

  • Ajout d'un socle de tests d'intégration sur l'application principale UsersHub.
  • Ajout de tests de non-régression sur le login, la redirection des routes protégées, les contrats utilisés par GeoNature et les listes paginées.
  • Ajout de tests sur l'observabilité, la présence de X-Request-ID, les erreurs SQL capturées, l'autocomplétion organisme, le filtre de statut utilisateur, les champs additionnels et les écrans membres paginés.

pierre56 added 2 commits June 18, 2026 17:09
**🚀 Nouveautés**

- [Observabilité] Ajout d'une couche d'observabilité centralisée Flask avec `X-Request-ID`, logs de fin de requête, logs de requêtes lentes et logs SQL lents.
- [Erreurs] Mise en place de handlers globaux pour les erreurs SQLAlchemy et les erreurs applicatives avec messages HTML plus explicites et traces corrélées par `request_id`.
- [Utilisateurs] Passage de `/users/list` en pagination, tri et recherche côté serveur tout en conservant la route et l'écran fonctionnel existants.
- [Organismes] Passage de `/organisms/list` en pagination, tri et recherche côté serveur tout en conservant la route et l'écran fonctionnel existants.
- [Groupes] Passage de `/group/members/<id_groupe>` en pagination serveur pour les membres disponibles et sélectionnés.
- [Listes] Passage de `/list/members/<id_liste>` en pagination serveur pour les membres disponibles et sélectionnés.
- [Utilisateurs] Ajout d'un filtre activable `Tous / Actifs / Inactifs` sur la liste des utilisateurs, avec valeur par défaut `Tous`.
- [Formulaire utilisateur] Remplacement du sélecteur d'organisme par une autocomplétion distante sur `user/add` et `user/update`.
- [Formulaire utilisateur] Remplacement du sélecteur de groupes par une liste de cases à cocher plus lisible, avec tri alphabétique des groupes.
- [API] Ajout d'une route d'autocomplétion pour les organismes utilisée par le formulaire utilisateur.
- [Fiches] Affichage générique des champs additionnels dans les fiches utilisateur et organisme, y compris pour des structures variables et imbriquées.

**🐛 Corrections**

- [Fiches utilisateur] Correction des accès fragiles aux champs additionnels, notamment lorsque `champs_addi` est absent, vide ou partiellement renseigné.
- [Fiches organisme] Ajout d'un affichage optionnel des champs additionnels liés aux organismes, sans dépendre d'une colonne `additional_data` présente sur tous les schémas.
- [Membres groupes/listes] Conservation des rôles inactifs dans les écrans d'affectation des groupes et des listes.

**🧪 Tests**

- Ajout d'un socle de tests d'intégration sur l'application principale UsersHub.
- Ajout de tests de non-régression sur le login, la redirection des routes protégées, les contrats utilisés par GeoNature et les listes paginées.
- Ajout de tests sur l'observabilité, la présence de `X-Request-ID`, les erreurs SQL capturées, l'autocomplétion organisme, le filtre de statut utilisateur, les champs additionnels et les écrans membres paginés.
prise en compte du patch
@pierre56

pierre56 commented Jun 23, 2026

Copy link
Copy Markdown
Author

Bonjour @camillemonchicourt @jacquesfize @bouttier
Voici quelques exemples des améliorations.

Errors

image image

Champs additionnels

image

Update User

image image

Mais le changement principal, c'est la vitesse de chargement qui est passé de parfois plusieurs minutes à quelques secondes

@camillemonchicourt

Copy link
Copy Markdown
Member

OK, merci pour cette contribution conséquente, et pour avoir bien précisé le contexte et l'utilisation d'IA.
Justement le sujet des contributions avec de l'IA à des projets open source est au cœur de beaucoup de discussions et débats en ce moment, et le projet GeoNature n'y échappe pas. :-)

De nombreux projets open source voient le rythme des contributions augmenter/exploser et les mainteneurs ne peuvent pas suivre le rythme. Car à chaque fois, il faut relire tout le code, le tester, vérifier sa cohérence, qu'il est factorisé et ne va pas trop alourdir la maintenance globale du projet.
La relecture, le test et la reprise d'une PR peut être un travail humain conséquent, et ensuite il faut maintenir le code intégré dans le temps.

Mais l'IA peut aussi aider et améliorer certaines choses.

En s'appuyant que ce qu'a fait récemment la DINUM (https://www.ouvert.numerique.gouv.fr/actualites/atelier-ia-et-contributions-open-source/), j'ai proposé une première base de guide de contribution dans GeoNature (https://github.com/PnX-SI/GeoNature/pull/4199/changes#diff-b2496e80299b8c3150b1944450bd81c622e04e13d15c411d291db0927d75fd6bR24).

Là pour cette PR, il y a beaucoup de choses mélangées, donc je pense que cela va être compliqué et difficile de pouvoir la relire et tester en l'état.
Pour que les mainteneurs puissent relire, tester, reprendre et maintenir une contribution, il est préférable qu'une PR ne corresponde qu'à un sujet et n'en mélange pas plusieurs différents. Ou du moins, d'avoir des commits séparés pour chaque sujet dans la PR.
Car là, si on veut relire la partie Pagination, on ne peut pas l'isoler, et c'est mélangé avec les autres sujets, donc difficilement identifiable, avec plus de 2000 lignes de changements.

Donc c'est très intéressant, merci pour le partage, ce sont des évolutions très utiles et certaines attendues comme la pagination, mais là je ne sais pas si on pourra débloquer le temps nécessaire pour relire et analyser cette grosse PR qui regroupe plusieurs sujets, sans les distinguer.

Dans tous les cas, ça alimente aussi le débat sur les contributions et confirme qu'il faut qu'on clarifie des choses sur la manière de contribuer, comme commencé au niveau de GeoNature.

Merci !

@pierre56

pierre56 commented Jun 23, 2026

Copy link
Copy Markdown
Author

Merci @camillemonchicourt pour le retour.

Je comprends tout à fait les problématiques, et effectivement la contrib est assez massive.
Le dev a été fait en plusieurs fois en quelques semaines et j'ai amélioré via codex ou a la mano.
J'ai recréé une branche finale avec les devs, j'aurais du laisser l'historique pour faciliter la lecture de la progression.
Il y a potentiellement moyen de redécouper la pr et améliorer en respectant le lint ( et enlever la section performance des query, pas utile avec une petite instance)
L'objectif était de ne pas avoir de régression, ne pas ajouter de dépendances tout en répondant a des besoins en attente depuis longtemps.

Pour le test, voilà a quoi ressemblerait la PR template

Checklist

  • J'ai suivi la documentation de développement
  • J'ai réalisé une revue de mon code
  • J'ai commenté mon code, en particulier dans les parties complexes -> pas de commentaires sauf pour la description des fonctions, le code est facilement lisible
  • J'ai apporté les modifications correspondantes à la documentation -> pas de modifications des fonctionnalités existantes
  • J'ai ajouté des tests qui garantissent que mon développement est fonctionnel et sera maintenable dans le temps -> test unitaires pour chaque fonction
  • Les tests unitaires (nouveaux et existants) passent localement avec mes modifications -> test multiple de non-regression
  • J'ai ajouté une entrée dans le fichier de suivi des modifications
  • Le titre de ma PR mentionne le ticket associé -> pas de tickets dédiés mais mention des tickets concernés

Utilisation de l'IA

Ignorez les cases à cocher ci-dessous 👇 si vous n'avez pas utilisé d'IA pour votre contribution.

  • J'ai utilisé une assistance IA pour produire une partie ou la totalité de cette contribution
  • J'ai lu, revu, compris et je peux expliquer le code que je soumets
  • Je peux expliquer et discuter de mon travail avec un mainteneur
  • J'ai collé le prompt utilisé et mentionné le modèle utilisé ci-dessous
    GTP5.5, multiples aller-retour via codex et tests en prod après tests en local

@camillemonchicourt

Copy link
Copy Markdown
Member

OK trop bien.
Merci pour ce retour et pour le test de la check-list.
Ça va m'aider à l'ajuster, compléter, clarifier.
Parfait ! 😀

Pour la PR, je ne sais pas si et quand on pourra la relire, tester et intégrer en l'état, d'autant que UsersHub est en fin de vie.
Mais on va voir si on peut dégager du temps.

Et pour les sujets plus globaux sur la contribution, l'IA, etc... Ça amène de la matière qu'on discutera certainement aux prochaines rencontres GeoNature.

Merci.

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