TaxHub

TaxHub

Service de gestion taxonomique de l'ecosysteme GeoNature avec 4 PR (1 mergee) et 10 issues personnelles entre 2024 et 2026. Les contributions couvrent l'optimisation des routes taxonomiques backend et l'amelioration du chargement des relations imbriquees.

🎯 Contexte et objectifs

  • Faire évoluer des applications naturalistes en production sur des flux critiques: import, synthèse, monitoring, taxonomie et gestion des utilisateurs.
  • Stabiliser les interfaces backend/frontend via des contrats API plus robustes, du filtrage/pagination, des formulaires dynamiques et une gestion d'erreurs homogène.
  • Réduire les corrections manuelles côté métier en améliorant la cohérence des modèles de données, les retours d'administration et les parcours UI.

🧩 Conception

  • #projet-taxhub : PR mergée : #684 a optimisé l'import massif de cd_nom avec traitement par lots, insertion idempotente et retour d'administration détaillé.

💻 Développement

  • #projet-taxhub : #684 a optimisé l'import massif de cd_nom par validation en lots, ON CONFLICT DO NOTHING et calcul de statistiques de retour pour l'administration. Source: PR #684.

    def _populate_bib_liste_batch(id_list, input_cd_noms):
        valid_cd_noms = set()
        unique_input_cd_noms = sorted(set(input_cd_noms))
        for batch in _chunked(unique_input_cd_noms, 5000):
            query = select(Taxref.cd_nom).where(Taxref.cd_nom.in_(batch))
            valid_cd_noms.update(db.session.execute(query).scalars().all())
    
        inserted_count = 0
        sorted_valid_cd_noms = sorted(valid_cd_noms)
        for batch in _chunked(sorted_valid_cd_noms, 5000):
            values = [{"id_liste": id_list, "cd_nom": cd_nom} for cd_nom in batch]
            insert_stmt = (
                pg_insert(cor_nom_liste)
                .values(values)
                .on_conflict_do_nothing(
                    index_elements=[cor_nom_liste.c.id_liste, cor_nom_liste.c.cd_nom]
                )
                .returning(cor_nom_liste.c.cd_nom)
            )
            inserted_count += len(db.session.execute(insert_stmt).scalars().all())
    

📈 Résultats

  • Nb PR: 1
  • Nb commits: 1
  • Nb issues: 10
  • Période: 21 novembre 2024 au 9 mars 2026
🌐 Voir le projet

Technologies utilisées

Backend
Flask
Python
Bases de donnees (SGBD & SQL)
PostgreSQL
Design Patterns & Architecture
SQLAlchemy