Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IMPORT] Embed reusable import module into GeoNature core #2833

Open
wants to merge 496 commits into
base: develop
Choose a base branch
from

Conversation

bouttier
Copy link
Contributor

@bouttier bouttier commented Dec 18, 2023

Reste à faire avant merge :

  • Corriger le problème avec Celery [@jacquesfize]
  • Commentaires de review sur cette PR [@bouttier]
  • Corrections des tests frontent [@Pierre-Narcisi] PR #3939
  • Contrôler lorsque l’on importe un habitat dans une station déjà existante que l’on a les droits (C ou U ?) dessus.
  • Dans les contrôles des JDD ligne par ligne, vérifier que ceux-cis sont actifs (il y a sans doute un nouveau type d’erreur à rajouter). [@Pierre-Narcisi]
  • Dans la synthèse, le contrôle sur les JDD privées doit être adapté aux JDD ligne par ligne (
    and imprt.dataset.nomenclature_data_origin.mnemonique == "Privée"
    )
  • Rajouter un contrôle sur le champs technical_precision : celui-ci devient obligatoire si le champs id_nomenclature_collection_technique vaut 10 (« Autre, préciser ») [@Pierre-Narcisi] Exemple :
    def check_nomenclature_source_status(imprt, entity, source_status_field, ref_biblio_field):
    transient_table = imprt.destination.get_transient_table()
    litterature = TNomenclatures.query.filter(
    TNomenclatures.nomenclature_type.has(BibNomenclaturesTypes.mnemonique == "STATUT_SOURCE"),
    TNomenclatures.cd_nomenclature == "Li",
    ).one()
    report_erroneous_rows(
    imprt,
    entity,
    error_type=ImportCodeError.CONDITIONAL_MANDATORY_FIELD_ERROR,
    error_column=source_status_field.name_field,
    whereclause=sa.and_(
    transient_table.c[source_status_field.dest_field] == litterature.id_nomenclature,
    transient_table.c[ref_biblio_field.dest_field] == None,
    ),
    )
  • Rendre le nom cité facultatif [@Pierre-Narcisi]
  • Masquer (display=False) le field unique_dataset_id (en attendant les colonnes virtuelles et la suppression de la sélection du jdd à l’étape 1)
  • Merger la refacto « mixins > actions » [@bouttier]
  • Factorisation de compute_bounding_box > PR import: factorize bounding box #3184
  • Rajouter un filtre dans le module de saisie Occhab permettant de filtrer sur un id_import (cf [IMPORT][OCCHAB] Feat import/occhab id import #2932). Vu avec Camille :
    • on affiche les stations importées et les stations contenant des habitats ayant été importés (filtre proposé dans la PR à reprendre) [@Pierre-Narcisi]
    • pour les stations affichées, on retourne tous leurs habitats (ceux ajouté par l’import, mais également les autres) (i.e. pas de chose compliqué à faire) [@Pierre-Narcisi]
  • Corriger la fonctionnalité « voir dans la destination » depuis le rapport d’import (intégré via [IMPORT][OCCHAB] Feat import/occhab id import #2932) :
    • Passer d’un truc hard-codé pour la synthèse à quelque chose de générique
    • Rajouter un hook permettant à une destination de retourner l’URL de visualisation filtrée
    • Le filtre en synthèse doit porter sur l’id_source, pas sur l’id_jdd !
  • Filtrer les destinations en fonction des droits sur celle-ci
    • Filtre SQL sur la liste (~ filter_by_scope -> hook permettant de renvoyer un filtre SQL)
    • Filtre unitaire dans le preprocessor resolve_import (~ has_instance_permission)
  • La bbox Occhab ne se base que sur les stations, mais ignore les habitats. Il faudrait l’étendre aux stations sur lesquelles ont été importé des habitats (sans quoi lorsque l’on importe uniquement des habitats, la bbox est nulle).
  • Relecture globale ?

PR restantes :

Améliorations frontend :

  • Rapport d’import : le périmètre géographique est un rectangle très peu haut, pas très lisible …
  • Liste d’import : bouton de téléchargement des données invalides : ne s’affiche pas et le lien est faux (manque la destination)
  • Rapport d’import PDF :
    • Remplacer « date d’import : none » par « en cour » si import non terminé
    • Ne pas afficher la bbox ni les erreurs si import non vérifié
    • Ne pas afficher les stats si import non terminé
    • Correspondance de valeurs : remplacer « null » par « pas de valeur » (en italique)
    • Correspondance des champs : ne pas afficher les champs non mappé + corriger l’inversion champs source <> champs cible

Juste avant de merge :

  • Supprimer la CI sur les branches de dev
  • Merge de la dernière develop sur feat/import
  • Linéariser les migrations alembic

À vérifier :

  • Pouvoir sauter le field mapping et le content mapping (utilisation de DEFAULT_FIELD_MAPPING_ID et DEFAULT_CONTENT_MAPPING_ID) (cas d’usage GINCO) > pas sûr qu’on en ait encore beaucoup usage
  • Virer le metaclass_resolver si encore présent dans le code source)
  • Vérification de l’existence des UUID : un paramètre permet de rechercher uniquement dans un JDD (propre à dépobio qui a autorisé les duplicats d’UUID inter-jdd dans la synthèse - et pour des raisons de performances). Cassé avec les jdd ligne par ligne ! [@bouttier]

Non bloquant :

  • Fonctionnel mais non conforme aux discussion : lorsqu’une station est dupliquée, les erreurs ne sont levées que sur la première occurrence de la station et non pour l’ensemble des lignes. Est-ce qu’on valide ce comportement ou est-ce qu’on planifie de reprendre pour lever une erreur par ligne ?

Pour le futur :

  • Rajouter une alternative au cd_hab : code typo (cd_typo ou cd_table) + lb_code [issue à ouvrir]
  • Dans la liste des imports, si l’on filtre par une destination donnée puis que l’on crée un nouvel import, la destination pourrait être pré-sélectionnée.

@bouttier bouttier force-pushed the feat/import branch 6 times, most recently from f3fc016 to e459ff4 Compare December 22, 2023 16:01
Copy link

codecov bot commented Dec 22, 2023

Codecov Report

Attention: Patch coverage is 88.21729% with 308 lines in your changes missing coverage. Please review.

Project coverage is 83.50%. Comparing base (30e42d9) to head (9979383).

Files with missing lines Patch % Lines
backend/geonature/core/imports/routes/imports.py 85.42% 58 Missing ⚠️
...le_occhab/backend/gn_module_occhab/imports/plot.py 31.66% 41 Missing ⚠️
...kend/geonature/core/gn_synthese/imports/actions.py 82.00% 36 Missing ⚠️
backend/geonature/core/imports/models.py 90.11% 34 Missing ⚠️
...nd/geonature/core/imports/checks/dataframe/cast.py 77.27% 30 Missing ⚠️
backend/geonature/core/imports/utils.py 87.37% 26 Missing ⚠️
backend/geonature/core/imports/tasks.py 85.93% 9 Missing ⚠️
backend/geonature/core/imports/admin.py 82.60% 8 Missing ⚠️
...occhab/backend/gn_module_occhab/imports/actions.py 95.81% 8 Missing ⚠️
backend/geonature/core/imports/actions.py 77.41% 7 Missing ⚠️
... and 17 more
Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #2833      +/-   ##
===========================================
+ Coverage    81.62%   83.50%   +1.88%     
===========================================
  Files           86      121      +35     
  Lines         6945     9538    +2593     
===========================================
+ Hits          5669     7965    +2296     
- Misses        1276     1573     +297     
Flag Coverage Δ
pytest 83.50% <88.21%> (+1.88%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

jacquesfize and others added 3 commits August 14, 2024 15:57
- Remove AbstractMixin
- Rename Destination's property from import_mixin to actions
- Modules do not heritate import functions anymore
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

6 participants