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