From 0268ee67b2e91d3528f83b7c6adaad01e738e879 Mon Sep 17 00:00:00 2001
From: JOUNEAU Thomas <thomas.jouneau@univ-lorraine.fr>
Date: Thu, 13 Jan 2022 16:00:06 +0000
Subject: [PATCH] Replace generate_citation.py

---
 dorel_export_v0.2/generate_citation.py | 226 ++++++++++++++-----------
 1 file changed, 123 insertions(+), 103 deletions(-)

diff --git a/dorel_export_v0.2/generate_citation.py b/dorel_export_v0.2/generate_citation.py
index a7a64de..0e55dce 100644
--- a/dorel_export_v0.2/generate_citation.py
+++ b/dorel_export_v0.2/generate_citation.py
@@ -95,118 +95,138 @@ bibliography_list = []
 
 for doi,metadata in complete_list.items(): # 
 	print (f"\n{doi} : \n") # Retour du DOI. Décommenter pour débogage
+
 	authors_list=[]
 	subjects_list=[]
 
+	# On vérifie la présence de "latestVersion" dans metadata
+
 	metadata = metadata[0] # le dictionnaire étant enserré entre des crochets, on prend le premier et unique élément de cette "liste"
-	# on récupère tout ce qu'on peut au niveau 1 de l'entrée et dans "latestVersion"
-	
-	dataset_id = metadata["id"]
-	# print (dataset_id)
+
+	if "latestVersion" in metadata:
 	
-	dataset_identifier = metadata["identifier"]
-	# mapping de champs seulement s'ils existent (tests avec if)
-	if "persistentUrl" in metadata :
-		dataset_persistentUrl = metadata["persistentUrl"]
-		# print (dataset_persistentUrl)
-	elif "persistentUrl" not in metadata :
-		dataset_persistentUrl = ""
-	else : 
-		print ("Vérifier la partie du code concernant le mapping de persistentUrl")
+	# ------------------------------------------------------------------------------
+	# on récupère tout ce qu'on peut au niveau 1 de l'entrée et dans "latestVersion"
+	# ------------------------------------------------------------------------------
+		
+		dataset_id = metadata["id"]
+		# print (dataset_id)
+		
+		dataset_identifier = metadata["identifier"]
+		# mapping de champs seulement s'ils existent (tests avec if)
+		if "persistentUrl" in metadata :
+			dataset_persistentUrl = metadata["persistentUrl"]
+			# print (dataset_persistentUrl)
+		elif "persistentUrl" not in metadata :
+			dataset_persistentUrl = ""
+		else : 
+			print ("Vérifier la partie du code concernant le mapping de persistentUrl")
+		
+		if "publicationDate" in metadata :
+			dataset_publicationDate = metadata["publicationDate"]
+			# print (dataset_publicationDate)
+		elif "publicationDate" not in metadata :
+			dataset_publicationDate = ""
+		else : 
+			print ("Vérifier la partie du code concernant le mapping de publicationDate")
+
+		if "publisher" in metadata :
+			dataset_publisher = metadata["publisher"]
+			# print (dataset_publisher)
+		elif "publisher" not in metadata :
+			dataset_publisher = ""
+		else : 
+			print ("Vérifier la partie du code concernant le mapping de publisher")
+
+		dataset_yearofPublication = dataset_publicationDate[0:4]
+
+		if "license" in metadata["latestVersion"] :
+			dataset_license = metadata["latestVersion"]["license"]
+			# print (dataset_license)
+		elif "license" not in metadata["latestVersion"] :
+			dataset_license = ""
+		else : 
+			print ("Vérifier la partie du code concernant le mapping de license")
+
+		if "versionNumber" in metadata["latestVersion"] :
+			dataset_versionNumber = metadata["latestVersion"]["versionNumber"]
+			# print (dataset_versionNumber)
+		elif "versionNumber" not in metadata["latestVersion"] :
+			dataset_versionNumber = ""
+		else : 
+			print ("Vérifier la partie du code concernant le mapping de versionNumber")
+
+		if "versionMinorNumber" in metadata["latestVersion"] :
+			dataset_versionMinorNumber = metadata["latestVersion"]["versionMinorNumber"]
+			# print (dataset_versionMinorNumber)
+		elif "versionMinorNumber" not in metadata["latestVersion"] :
+			dataset_versionMinorNumber = "0"
+		else : 
+			print ("Vérifier la partie du code concernant le mapping de versionMinorNumber")	
+
+		if "UNF" in metadata["latestVersion"] :
+			dataset_unf = metadata["latestVersion"]["UNF"]
+			# print (dataset_unf)
+		elif "UNF" not in metadata["latestVersion"] :
+			dataset_unf = ""
+		else :
+			print ("Vérifier la partie du code concernant le mapping de UNF")
+
+			print ("y")
+
+		# ----------------------------------------------------------------
+		# Exploration des sous-blocs et récupération des champs répétables
+		# ----------------------------------------------------------------
+
+		fields = metadata["latestVersion"]["metadataBlocks"]["citation"]["fields"]
+		for field in fields: # chaque champ est pris l'un après l'autre. field est un dictionnaire
+			# print (field) 
+			# print (f"{field['typeName']} : {field['value']}")
+			typeName = field['typeName']
+			# title = "" # on définit par avance l'ensemble des champs en leur attribuant une valeur vide
+			# authors = ""
+			# datasetContacts = ""
+			# dsDescriptions = ""
+			# subjects = ""
+			# keywords = ""
+			# languages = ""
+			# depositors = ""
+			# dateOfDeposit = ""
+			if typeName == 'title':
+				title = field['value'] # champ unique
+			if typeName == 'author':
+				authors = field['value'] # liste de dictionnaires donc chaque élément est un auteur
+				for author in authors:
+					authorName = author["authorName"]["value"]
+					authors_list.append(authorName)
+			if typeName == 'datasetContact':
+				datasetContacts = field['value'] # champ multiple
+			if typeName == 'dsDescription':
+				dsDescriptions = field['value'] # champ multiple
+			if typeName == 'subject':
+				subjects = field['value'] # champ multiple
+			if typeName == 'language':
+				languages = field['value'] # liste
+			if typeName == 'depositor':
+				depositors = field['value']
+			if typeName == 'keyword':
+				keywords = field['value']
+			if typeName == 'dateofDeposit':
+				dateofDeposit = field['value']
+
+		# Appel de la fonction de génération de citation
+
+		citation_current = citation_generation(cit_authors = authors_list,cit_title=title,cit_year=dataset_yearofPublication,cit_data_repository=dataset_publisher,cit_version_number=dataset_versionNumber,cit_version_minor_number=dataset_versionMinorNumber, cit_doi=doi,cit_unf=dataset_unf)
+		print (citation_current)
+		bibliography_list.append(citation_current)
 	
-	if "publicationDate" in metadata :
-		dataset_publicationDate = metadata["publicationDate"]
-		# print (dataset_publicationDate)
-	elif "publicationDate" not in metadata :
-		dataset_publicationDate = ""
-	else : 
-		print ("Vérifier la partie du code concernant le mapping de publicationDate")
-
-	dataset_yearofPublication = dataset_publicationDate[0:4]
+	elif "latestVersion" not in metadata : 
+		print ("Pas de version trouvée pour ce jeu de données. Pas d'export.")
 
-
-	if "license" in metadata["latestVersion"] :
-		dataset_license = metadata["latestVersion"]["license"]
-		# print (dataset_license)
-	elif "license" not in metadata["latestVersion"] :
-		dataset_license = ""
-	else : 
-		print ("Vérifier la partie du code concernant le mapping de license")
-
-	if "publisher" in metadata :
-		dataset_publisher = metadata["publisher"]
-		# print (dataset_publisher)
-	elif "publisher" not in metadata :
-		dataset_publisher = ""
-	else : 
-		print ("Vérifier la partie du code concernant le mapping de publisher")
-
-	if "versionNumber" in metadata["latestVersion"] :
-		dataset_versionNumber = metadata["latestVersion"]["versionNumber"]
-		# print (dataset_versionNumber)
-	elif "versionNumber" not in metadata["latestVersion"] :
-		dataset_versionNumber = ""
-	else : 
-		print ("Vérifier la partie du code concernant le mapping de versionNumber")
-
-	if "versionMinorNumber" in metadata["latestVersion"] :
-		dataset_versionMinorNumber = metadata["latestVersion"]["versionMinorNumber"]
-		# print (dataset_versionMinorNumber)
-	elif "versionMinorNumber" not in metadata["latestVersion"] :
-		dataset_versionMinorNumber = "0"
-	else : 
-		print ("Vérifier la partie du code concernant le mapping de versionMinorNumber")	
-
-	if "UNF" in metadata["latestVersion"] :
-		dataset_unf = metadata["latestVersion"]["UNF"]
-		# print (dataset_unf)
-	elif "UNF" not in metadata["latestVersion"] :
-		dataset_unf = ""
 	else :
-		print ("Vérifier la partie du code concernant le mapping de UNF")
-
+		print ("Problème d'exception sur le test de présence de latestVersion, corriger le code.")
+	
 	
-	fields = metadata["latestVersion"]["metadataBlocks"]["citation"]["fields"]
-	for field in fields: # chaque champ est pris l'un après l'autre. field est un dictionnaire
-		# print (field) 
-		# print (f"{field['typeName']} : {field['value']}")
-		typeName = field['typeName']
-		# title = "" # on définit par avance l'ensemble des champs en leur attribuant une valeur vide
-		# authors = ""
-		# datasetContacts = ""
-		# dsDescriptions = ""
-		# subjects = ""
-		# keywords = ""
-		# languages = ""
-		# depositors = ""
-		# dateOfDeposit = ""
-		if typeName == 'title':
-			title = field['value'] # champ unique
-		if typeName == 'author':
-			authors = field['value'] # liste de dictionnaires donc chaque élément est un auteur
-			for author in authors:
-				authorName = author["authorName"]["value"]
-				authors_list.append(authorName)
-		if typeName == 'datasetContact':
-			datasetContacts = field['value'] # champ multiple
-		if typeName == 'dsDescription':
-			dsDescriptions = field['value'] # champ multiple
-		if typeName == 'subject':
-			subjects = field['value'] # champ multiple
-		if typeName == 'language':
-			languages = field['value'] # liste
-		if typeName == 'depositor':
-			depositors = field['value']
-		if typeName == 'keyword':
-			keywords = field['value']
-		if typeName == 'dateofDeposit':
-			dateofDeposit = field['value']
-
-	# Appel de la fonction de génération de citation
-
-	citation_current = citation_generation(cit_authors = authors_list,cit_title=title,cit_year=dataset_yearofPublication,cit_data_repository=dataset_publisher,cit_version_number=dataset_versionNumber,cit_version_minor_number=dataset_versionMinorNumber, cit_doi=doi,cit_unf=dataset_unf)
-	print (citation_current)
-	bibliography_list.append(citation_current)
 
 # -------------------------------------
 # Génération de la bibliographie finale
-- 
GitLab