PnX-SI / GeoNature

Application de saisie et de synthèse des observations faune et flore
GNU General Public License v3.0
99 stars 101 forks source link

import données dans GEONATURE avec possibilités de modification dans OCCTAX #1502

Closed christianbieche closed 2 years ago

christianbieche commented 2 years ago

Bonjour, La documentation GEONATURE indique comment importer des données dans l'application GEONATURE. Nous utilisons cette fonctionnalité qui alimente la table gn_synthese.synthese. Fort bien.

Les utilisateurs voudraient pouvoir corriger les données qui sont importées, or ce n'est pas possible.

En regardant les données il semble que les données importées la colonne unique_id_sinp_grp est vide (c'est normal on ne l'alimente pas) mais pour les données saisies dans OCCTAX cette donnée est systèmatiquement renseignée.

Cette colonne fait référence visiblement à la table t_releves_occtax du schéma occtax. J'en déduit que lorsque l'on saisit des données dans le module OCCTAX on alimente les tables du schéma OCCTAX et que l'on créé après validation une référence dans la table synthèse sur la table t_releves_occtax (table des relevés, probablement)

Pour permettre la modification importées, il faudrait donc aussi créer les données dans occtax ? Y a t-il un moyen simple de faire cela ? Quel sont les tables minimales à mettre à jour ? t_releves_octax, t_occurences_occtax et cor_counting_occtax ?

Quelqu'un aurait-il un exemple d'alimentation de ces tables en relation avec un import.

Christian Bièche Cistude Nature

DonovanMaillard commented 2 years ago

Bonjour,

En effet, la synthèse remet à plat des données provenant de différentes sources pour la consultation, le requêtage et l'export. Parmis ces sources, il y a occtax, ou des imports externes, ou d'autres modules. Dans tous les cas, les modifications sont à apporter au niveau de la source :

Il est possible de repousser dans occtax des données qui viennent de la synthèse (formats proches) mais il faut régénérer la relativité entre les tables d'occtax à partir de ces données à plat, c'est la partie la plus "gymnastique".

J'avais fait et partagé un script d'exemple pour ça, à adapter selon les versions et données de votre contexte Synthese_to_occtax_diffusion.txt :

camillemonchicourt commented 2 years ago

En effet la logique globale de GN est que OCCTAX est un module de saisie, la synthèse regroupe les données saisies dans Occtax, Monitoring ou importées. La logique de GN voudrait donc que l'on n'importe pas de données dans le module Occtax. On le déconseille.

Mais en effet se pose pour la modification des données externes importées.

Une réflexion est initiée ici : https://github.com/PnX-SI/GeoNature/issues/1455

Je pense qu'il vaut mieux créer la possibilité de modifier des données importées, plutôt que d'essayer d'importer les données dans Occtax, que je déconseille.

DonovanMaillard commented 2 years ago

Le script est un exemple à adapter mais en effet, ca reste une gymnastique qui n'est pas anodine, ça relance les triggers d'occtax vers la synthèse (donc supprimer les données de la synthèse avant, sinon doublons d'uuid qui ne passe pas) ca casse les séquences d'id dans occtax donc les relevés suivants prennent des id qui sont déjà dans les tables donc erreur pour l'utilisateur, la gestion des utilisateurs est en texte ou alors demande un traitement fastidieux pour récupérer les id_roles... c'est vraiment un long moment de manipulations et pas mal de controles à prévoir

christianbieche commented 2 years ago

Merci pour toutes ses informations Camille, je vais regarder, mais les données qui me parviennent viennent de différentes sources, pas toujours de la même manière, pas toujours cohérentes et on peut "facilement" corriger et insérer les données via SQL. Autant après coup, si l'on s'aperçoit qu'une donnée est erronée ou si l'on veut changer quelque chose, un commentaire, cela semble plus logique pour l'utilisateur, puisque il a un module de saisie dans GEONATURE qu'il connait de faire la modification comme il en a l'habitude dans OCCTAX.

christianbieche commented 2 years ago

Merci Donovan, je m'en doutais. je vais quand même regarder mais effectivement cela semble compliqué. De plus Camille déconseille. je vais en discuter avec l'utilisateur. Au moins cela me permettra probablement de mieux comprendre.

hypsug0 commented 2 years ago

Bien que déconseillé dans la pratique, cela peut toutefois être utile et fortement souhaité dans le cadre d'une migration d'outil de gestion de données (bdd access, tableur, etc.).

Voici un exemple de migration de données depuis un tableur vers OccTax le module métadonnées.

https://github.com/dbwildlife/arthropologia_geonature2

christianbieche commented 2 years ago

Merci bien

jpm-cbna commented 2 years ago

..., ça relance les triggers d'occtax vers la synthèse (donc supprimer les données de la synthèse avant, sinon doublons d'uuid qui ne passe pas) ca casse les séquences d'id dans occtax ...

Pour le problème de la copie dans la Synthese, n'était il pas possible de désactiver le trigger d'OccTax qui copie les données dans la synthese le temps de la manipulation puis de le réactiver ensuite ?

Pour les séquences, n'était-il pas possible de les mettre jour après chaque manip d'insertion ?

DonovanMaillard commented 2 years ago

@jpm-cbna Oui oui biensur, (c'est peut-être dans le script d'ailleurs je ne l'ai plus en tête). Mais autant de choses à penser et qui font que c'est pas une manip à faire fréquemment avec de nouveaux imports qui tomberaient au fil de l'eau

jbrieuclp commented 2 years ago

Salut, J'avais de mon côté créé des fonctions pour faire ce job de passage de la synthese vers occtax https://github.com/PnX-SI/GeoNature/issues/945#issuecomment-648777199

Il faudrait peut-être retranscrire l'évolution de la nouvelle structuration des tables d'occtax dans la vue et la fonction (prise en compte des nouveaux champs json entre autres). Mais outre ce petit arrangement sur la structuration des tables, une fois le paramétrage des sources à transférer fait, l'usage est ultra simple avec l'utilisation des 2 fonctions indiquées en bas du post :

Heg0Damask commented 2 years ago

Personnellement j'utilise l'API pour intégrer des données en masse dans occtax https://TONSERVEUR/geonature/api/occtax/only/releve avec les bons paramètres ça enregistre un relevé en base. Je trouve que la méthode est plus "sécure" que de passer par la base de données.

christianbieche commented 2 years ago

Personnellement j'utilise l'API pour intégrer des données en masse dans occtax https://TONSERVEUR/geonature/api/occtax/only/releve avec les bons paramètres ça enregistre un relevé en base. Je trouve que la méthode est plus "sécure" que de passer par la base de données.

Merci de l'information, j'avais idée d'utiliser les apis dispo éventuellement cela conforte mon idée de faire quelque chose dans ce sens. Et visiblement une api existe pour cela 👍

christianbieche commented 2 years ago

@Heg0Damask rebonjour, dis j'ai testé l'idée en utilisant une autre api sur taxhub : https://serveur/taxhub/api/bibnoms/ pour enregistrer automatiquement un taxon. Je l'ai fait à partir d'un petit script python pour voir mais cela ne fonctionne pas car bien sûr il faut une authentification. Tu peux me donner un exemple simple avec un post comme tu sembles l'utiliser. Je n'arrive pas à m'authentifier à l'api pour faire le post.

christianbieche commented 2 years ago

@Heg0Damask bon inutile de me fournir un script d'exemple sur l'api bibnoms. J'ai finalement trouvé comment faire même si pas trop trivial et j'ai donc maintenant un script Python capable d'enregistrer un taxon spécifique en utilisant l'api bibnoms. je vais du coup regarder l'api que tu m'as donné pour voir si je peux effectivement alimenter un relevé.

christianbieche commented 2 years ago

@Heg0Damask Bon finalement j'ai besoin d'aide. Je n'arrive pas à trouver les bons paramètres. Puisque tu l'as déjà fait peux-tu me donner les paramètres à renseigner pour cet API https://TONSERVEUR/geonature/api/occtax/only/releve D'avance merci, Christian Bièche Cistude Nature

Heg0Damask commented 2 years ago

Bonjour, je vous trouve ça dans la journée.

Heg0Damask commented 2 years ago

@christianbieche

J'utilise deux fichiers JSON :

Le premier pour créer un relevé : releve.json avec https://TONSERVEUR/geonature/api/occtax/only/releve

{ "geometry": { "type": "Point", "coordinates": [ 2.217459463470686, 48.680576637452994 ] }, "properties": { "id_dataset": 1, "id_digitiser": 1, "date_min": "2021-07-01", "date_max": "2021-07-01", "hour_min": null, "hour_max": null, "altitude_min": 152, "altitude_max": 152, "depth_min": null, "depth_max": null, "place_name": null, "meta_device_entry": "web", "comment": null, "cd_hab": null, "id_nomenclature_tech_collect_campanule": 314, "observers": [ 1 ], "observers_txt": null, "id_nomenclature_grp_typ": 129, "grp_method": null, "id_nomenclature_geo_object_nature": 170, "precision": null } }

Cet appel donnera un identifiant unique de relevé, et ensuite j'utilise la seconde API pour ajouter une occurrence "https://[MONSERVEUR]/geonature/api/occtax/releve/**[id_releve]**/occurrence"

Ensuite un second JSON pour ajouter l'occurrence :

Occurrence.json

{ "id_nomenclature_obs_technique": 37, "id_nomenclature_bio_condition": 154, "id_nomenclature_bio_status": 30, "id_nomenclature_naturalness": 157, "id_nomenclature_exist_proof": 77, "id_nomenclature_behaviour": 544, "id_nomenclature_observation_status": 84, "id_nomenclature_blurring": 172, "id_nomenclature_source_status": 73, "determiner": "Administrateur test", "id_nomenclature_determination_method": 438, "nom_cite": "Lynx lynx = Lynx lynx (Linnaeus, 1758) - [ES - 60612]", "cd_nom": 60612, "meta_v_taxref": null, "sample_number_proof": null, "digital_proof": null, "non_digital_proof": null, "comment": null, "cor_counting_occtax": [ { "id_counting_occtax": null, "id_nomenclature_life_stage": 3, "id_nomenclature_sex": 163, "id_nomenclature_obj_count": 143, "id_nomenclature_type_count": 91, "count_min": 1, "count_max": 16, "medias": [

  ]
}

] }

christianbieche commented 2 years ago

@Heg0Damask Merci beaucoup, cela correspond à ce que j'avais finalement trouvé, mais je n'avais pas complétement testé. Du coup cela confirme bien la méthode à utiliser. Encore merci. Christian Bièche Cistude Nature

christianbieche commented 2 years ago

Bonjour, Merci @Heg0Damask

J'ai finalement écrit un script Python, qui permet de mettre à jour via les APIS occtax à partir des données qui ont été importées dans la synthèse en suivant la documentation GEONATURE.

Le anciennes données de synthèse en double sont supprimées automatiquement.

Le script utilise 2 tables spécifiques pour la création des données et le suivi des mises à jour.

Le script créée les données occtax et synthèse en traitant environ 40 000 lignes en 2 heures.

Il faut faire attention aux données insérées car des contrôles sont mis en place dans les tables et quand il y a des exceptions cela ne passe très bien. Il faut alors supprimer les données insérées et refaire tourner le script. En particulier, il faut absolument vérifier que les cd_ref utilisés font bien partie des taxons spécifiques de GEONATURE.

Du coup, je vais dorénavant importer les données via ce script pour permettre la modification ensuite des données importées.

Il y a des optimisation à faire car on ne peut pas traiter plus de 10 000 lignes à la fois.

Merci pour vos idées, conseils et informations.

Christian Bièche Cistude Nature

camillemonchicourt commented 2 years ago

OK merci pour ce retour. Mais pourquoi ne pas partager ce script ? 🤔😀

christianbieche commented 2 years ago

bonjour Camille, Je vais le faire bien sûr. J'avais initialement prévu de le faire mais il faut que modifie des choses avant publication pour le rendre anonyme d'une part et d'autre part, après renseignement pris, il semble que peut être mon script s'arrête périodiquement sur un time-out de de base probablement. Du coup je vais modifier le script pour être un peu indépendant de mes plateformes et le lancer via un script shell. Je mets au point la dernière version et je publierais une version anonymisée pour info.

camillemonchicourt commented 2 years ago

OK, merci. Pas grave si ce n'est pas parfait, ça permettra à d'autres de s'en inspirer, de l'améliorer ou le corriger si besoin.

christianbieche commented 2 years ago

Script Python occtax.zip

christianbieche commented 2 years ago

Le script python utilisé pour créer automatiquement les données OCCTAX et SYNTHESE à partir d'enregistrement de synthèse déjà existant en base (cas des imports niveau 1 indiqué dans la doc GEONATURE) ou en ajout pour de nouveaux imports. il utilise 2 tables : la table gn_synthese.synthese_ajout contenant les lignes à traiter en ajout ou maj la table gn_synthese.synthase_maj qui permet la trace des actions et le contrôle des lignes déjà traitées. Remarque : La table synthese_ajout reprend les mise à jour par défaut des nomenclatures. Comme le script python prend les informations depuis cette table cela permet soit automatiquement de garder le défaut soit de mettre les nomenclatures désirées.

Le script python contient des valeurs par défaut pour les connexions, les noms de serveurs à renseigner. Il prend en paramètre le serveur de base de données et le serveur des apis. Il donc utilisable soit à partir d'un PC en utilisant les valeurs par défaut sur un serveur particulier ou sur les serveurs GEONATURE en passant les paramètres. Il est lancé sur nos serveurs à partir d'un script shell. Dernière chose, les lignes traitées sont volontairement limitées à 10 000 lignes pour éviter des erreurs python probablement due à des time-out sur la base au bout d'une heure de traitement. Il suffit de relance le script pour traiter les 10 000 lignes suivantes.

A disposition pour des explications complémentaires.

Christian Bièche Cistude Nature

camillemonchicourt commented 2 years ago

Super, merci.

lpofredc commented 2 years ago

Merci. A mettre dans PnX-SI/Ressources-techniques?

christianbieche commented 2 years ago

Ah oui j'ai oublié. Le script python affiche des informations sur le traitement et les erreurs éventuelles. Exemple : Début à 2022-01-12 16:09:51.902675 Fin à 2022-01-12 16:40:17.505163 Lignes traitées : 8387 Database connection closed.

camillemonchicourt commented 2 years ago

Voila, c'est partagé sur Ressources-techniques : https://github.com/PnX-SI/Ressources-techniques/pull/25 Dispo directement sur : https://github.com/PnX-SI/Ressources-techniques/tree/master/GeoNature/V2/import-occtax