Skip to content
Snippets Groups Projects
Commit 89470238 authored by Vuillaume's avatar Vuillaume Committed by Enrique Garcia
Browse files

Fix fetch user entries

parent b86d7b61
No related branches found
No related tags found
1 merge request!70Fix fetch user entries
...@@ -93,8 +93,9 @@ class ZenodoAPI: ...@@ -93,8 +93,9 @@ class ZenodoAPI:
:return: request.get method :return: request.get method
""" """
url = f"{self.api_url}/deposit/depositions" url = f"{self.api_url}/deposit/depositions"
answer = requests.get(url, params=self.parameters)
return requests.get(url, params=self.parameters) http_status.ZenodoHTTPStatus(answer.status_code, answer.json())
return answer
def create_new_entry(self): def create_new_entry(self):
""" """
...@@ -126,7 +127,9 @@ class ZenodoAPI: ...@@ -126,7 +127,9 @@ class ZenodoAPI:
# To fetch any other entry, already published, use: # To fetch any other entry, already published, use:
url = f"{self.api_url}/records/{entry_id}" url = f"{self.api_url}/records/{entry_id}"
return requests.get(url, params=self.parameters) req = requests.get(url, params=self.parameters)
http_status.ZenodoHTTPStatus(req.status_code, req.json())
return req
def upload_file_entry(self, entry_id, name_file, path_file): def upload_file_entry(self, entry_id, name_file, path_file):
""" """
...@@ -523,7 +526,7 @@ class ZenodoAPI: ...@@ -523,7 +526,7 @@ class ZenodoAPI:
def get_user_records(self): def get_user_records(self):
"""Finds all the records associated with a user (defined by the zenodo token)""" """Finds all the records associated with a user (defined by the zenodo token)"""
request = self.fetch_user_entries() request = self.fetch_user_entries()
return [Record(hit) for hit in request.json()] return [Record(hit) for hit in request.json() if hit['state'] == 'done']
def find_similar_records(self, record): def find_similar_records(self, record):
""" """
...@@ -562,6 +565,11 @@ class Record: ...@@ -562,6 +565,11 @@ class Record:
for k in ['id', 'metadata']: for k in ['id', 'metadata']:
if k not in data.keys(): if k not in data.keys():
raise ValueError(f"key {k} not present in data") raise ValueError(f"key {k} not present in data")
# list of keys mandatory to create a Zenodo entry.
# Other keys are either optional, or can be hidden in case of Closed Access entries.
for meta_key in ['title', 'description', 'creators', 'doi', 'publication_date', 'access_right']:
if meta_key not in data['metadata'].keys():
raise ValueError(f"Mandatory key {meta_key} not in data['metadata']")
self.data = data self.data = data
def __str__(self): def __str__(self):
...@@ -594,7 +602,7 @@ class Record: ...@@ -594,7 +602,7 @@ class Record:
return self.data['metadata']['relations']['version'][0]['last_child']['pid_value'] return self.data['metadata']['relations']['version'][0]['last_child']['pid_value']
def get_last_version(self): def get_last_version(self):
if self.data['metadata']['relations']['version'][0]['is_last']: if 'relations' not in self.data['metadata'] or self.data['metadata']['relations']['version'][0]['is_last']:
return self return self
else: else:
record_id = self.last_version_id record_id = self.last_version_id
......
...@@ -7,6 +7,7 @@ import argparse ...@@ -7,6 +7,7 @@ import argparse
import json import json
from pathlib import Path from pathlib import Path
from distutils.util import strtobool from distutils.util import strtobool
from copy import deepcopy
from eossr.api.zenodo import ZenodoAPI, Record, SimilarRecordError from eossr.api.zenodo import ZenodoAPI, Record, SimilarRecordError
from eossr.metadata.codemeta2zenodo import converter from eossr.metadata.codemeta2zenodo import converter
from eossr.utils import zip_repository from eossr.utils import zip_repository
...@@ -64,11 +65,12 @@ def upload(zenodo_token, sandbox_flag, upload_directory, record_id=None, zip_roo ...@@ -64,11 +65,12 @@ def upload(zenodo_token, sandbox_flag, upload_directory, record_id=None, zip_roo
else: else:
raise FileNotFoundError("No metadata provided") raise FileNotFoundError("No metadata provided")
metadata_for_check = {'metadata': metadata} metadata_for_check = {'metadata': deepcopy(metadata)}
metadata_for_check['id'] = 1 # fake id to create fake record metadata_for_check['id'] = 1 # fake id to create fake record
metadata_for_check['metadata']['doi'] = 1 # fake doi to create fake record
record = Record(metadata_for_check) record = Record(metadata_for_check)
# Searches for similar records ## Searches for similar records
similar_records = zenodo.find_similar_records(record) similar_records = zenodo.find_similar_records(record)
if similar_records and not force_new_record and not record_id: if similar_records and not force_new_record and not record_id:
raise SimilarRecordError( raise SimilarRecordError(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment