From 49676cfe7618d97b00d1cf7dfc1ec12995984805 Mon Sep 17 00:00:00 2001 From: Elias Chetouane <elias.chetouane@univ-grenoble-alpes.fr> Date: Fri, 7 Feb 2025 16:34:40 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20commentaires=20=C3=A0=20la=20fonc?= =?UTF-8?q?tion=20get=5Forigin=5Fversion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../z_personal_functions.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/1-enrich-with-datacite/z_personal_functions.py b/1-enrich-with-datacite/z_personal_functions.py index bf19cd4..86352cf 100644 --- a/1-enrich-with-datacite/z_personal_functions.py +++ b/1-enrich-with-datacite/z_personal_functions.py @@ -1,18 +1,21 @@ import requests, json +# Fonction pour éviter la redondance des données associées à des DOIs différents mais pointant vers les mêmes fichiers : +# Dans Zenodo par exemple, il y a un DOI associé à chaque version d'un dépôt et il faut remonter au DOI "chapeau" +# Si le DOI "chapeau" obtenu ou un "is_identical_to" fait référence à un DOI déjà existant dans le csv, il doit être ignoré. def get_origin_version(doi, history=[], first=True): if first: history=[] # ligne ajoutée pour éviter certains soucis de cache où history n'est pas vide au premier appel de la fonction req = requests.get( f"https://api.datacite.org/dois/{doi}" ) res = req.json() final = [] - result = (doi, history, final) + result = (doi, history, final) # doi est le DOI qui sera ajouté au csv, history retrace les dois et les relations ayant permis les recherches et final enregistre les relations du doi final ajouté au csv try: - related = res["data"]["attributes"]["relatedIdentifiers"] + related = res["data"]["attributes"]["relatedIdentifiers"] # test si des relations existent pour le doi courant except: - pass + pass # si pas de relation, on renvoie le doi courant else: - ignore = False - duplicate = False + ignore = False # ignore correspond à un doi ayant une version "chapeau" qui doit être trouvée. Le doi courant doit donc être ignoré + duplicate = False # duplicate correspond à un doi étant identique à un autre for i in related: final.append(i.get("relationType")) if i.get("relationType") == "IsVersionOf" and i.get("relatedIdentifierType") == "DOI": @@ -21,11 +24,11 @@ def get_origin_version(doi, history=[], first=True): history.append([i.get("relationType"), i.get("relatedIdentifier")]) if i.get("relationType") == "IsIdenticalTo" and i.get("relatedIdentifierType") == "DOI": duplicate = True - elem_to_save_d = i.get("relatedIdentifier") + elem_to_save_d = i.get("relatedIdentifier") # pas de symétrie pour les is_identical_to, donc il suffit de prendre l'autre (pas le doi courant) pour éviter les doublons history.append([i.get("relationType"), i.get("relatedIdentifier")]) if duplicate and not(ignore): - result = (elem_to_save_d, history, final) - if ignore: result = get_origin_version(elem_to_save_i, history, False) + result = (elem_to_save_d, history, final) # si identique mais pas de version chapeau on peut s'arrêter + if ignore: result = get_origin_version(elem_to_save_i, history, False) # si version chapeau, on avance sans regarder les identiques return result def get_md_from_datacite( doi ) : -- GitLab