TaxHub

TaxHub

Taxonomy management service within the GeoNature ecosystem, with 4 PRs (1 merged) and 10 personal issues over 2024–2026. Contributions cover backend taxonomic route optimization and improved nested relation loading.

🎯 Context and goals

  • Evolve production-grade naturalist applications across critical flows: import, synthesis, monitoring, taxonomy, and user management.
  • Stabilize backend/frontend interfaces through stronger API contracts, filtering/pagination, dynamic forms, and more consistent error handling.
  • Reduce manual business-side corrections by improving data model consistency, admin feedback, and UI flows.

🧩 Design

  • #project-taxhub: Merged PR: #684 optimized bulk cd_nom import through batched validation, idempotent inserts, and detailed admin feedback.

💻 Development

  • #project-taxhub: #684 optimized bulk cd_nom import through batched validation, ON CONFLICT DO NOTHING, and admin-facing feedback counters. 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())
    

📈 Results

  • PR count: 1
  • Commit count: 1
  • Issue count: 10
  • Period: November 21, 2024 to March 9, 2026
🌐 View the project

Tech Stack

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