diff --git a/eossr/api/zenodo/__init__.py b/eossr/api/zenodo/__init__.py index 0758e2748510a376382c315a2f9c93f5ee5a976e..7b7bf7cbd0f9272ec502f026c7f6508b6182ab9a 100644 --- a/eossr/api/zenodo/__init__.py +++ b/eossr/api/zenodo/__init__.py @@ -11,6 +11,7 @@ from urllib.request import urlopen import warnings from ...metadata.codemeta2zenodo import parse_codemeta_and_write_zenodo_metadata_file from . import http_status +from bs4 import BeautifulSoup __all__ = [ 'ZenodoAPI', @@ -444,7 +445,14 @@ class Record: return f"Record #{self.id} : {self.title}" def __repr__(self): - return json.dumps(self.data, indent=4, sort_keys=True) + return f"Record({self.id})" + + def write_zenodo(self, filename='.zenodo.json', overwrite=False): + if Path(filename).exists() and not overwrite: + raise FileExistsError(f"The file {filename} exists. Use overwrite.") + else: + with open(filename, 'w') as file: + json.dump(self.data, file) @property def id(self): @@ -456,7 +464,7 @@ class Record: def print_info(self): metadata = self.data['metadata'] - descrp = metadata['description'] + descrp = BeautifulSoup(metadata['description']).text print(f"=== Record #{self.id} ===") print(f"Title: {self.title} ===") print(f"DOI: {self.data['doi']}") @@ -480,9 +488,9 @@ class Record: @property def doi(self): - if not 'conceptdoi' in self.data: - raise KeyError(f"Record {self.id} does not have a conceptdoi") - return self.data['conceptdoi'] + if not 'doi' in self.data: + raise KeyError(f"Record {self.id} does not have a doi") + return self.data['doi'] def get_mybinder_url(self): binder_zenodo_url = 'https://mybinder.org/v2/zenodo/' diff --git a/eossr/api/zenodo/tests/test_zenodo.py b/eossr/api/zenodo/tests/test_zenodo.py index c9b51bdb5aad88a4015cefcaf932151b3d52cd28..7393e93a0fceac8173f9ea005ad13b7c9b39798a 100644 --- a/eossr/api/zenodo/tests/test_zenodo.py +++ b/eossr/api/zenodo/tests/test_zenodo.py @@ -167,3 +167,10 @@ def test_record(test_get_record_4923992): def test_get_record_sandbox(): record = get_record(520735, sandbox=True) assert record.data['doi'] == '10.5072/zenodo.520735' + +def test_write_record_zenodo(test_get_record_4923992, tmpdir): + record = test_get_record_4923992 + record.write_zenodo(filename=tmpdir/'.zenodo.json') + with open(tmpdir/'.zenodo.json') as file: + json_dict = json.load(file) + assert json_dict['conceptdoi'] == '10.5281/zenodo.3572654' diff --git a/setup.py b/setup.py index 353cd982e40e93e7b2ba25f00555f4e738bc1c5d..f62ace101b7b753872c7f1440d4bf67bc47b305b 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,8 @@ setup( version=get_property('__version__', 'eossr'), description="ESCAPE OSSR library", install_requires=[ - "requests" + "requests", + "bs4", ], packages=find_packages(), scripts=['eossr/scripts/parse_last_release_git.sh'],