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_nomimport through batched validation, idempotent inserts, and detailed admin feedback.
💻 Development
- #project-taxhub: #684 optimized bulk
cd_nomimport 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
Tech Stack
Backend
Flask
Python
Bases de donnees (SGBD & SQL)
PostgreSQL
Design Patterns & Architecture
SQLAlchemy