diff --git a/eossr/api/zenodo/__init__.py b/eossr/api/zenodo/__init__.py index 3f055e5c2c31b289580397dfec03580844d95af2..4c050c4f85133ba6cd3da6cec6c1feb9f0499001 100644 --- a/eossr/api/zenodo/__init__.py +++ b/eossr/api/zenodo/__init__.py @@ -10,6 +10,7 @@ from urllib.parse import urlencode from urllib.request import urlopen from ...metadata.codemeta2zenodo import parse_codemeta_and_write_zenodo_metadata_file from . import http_status +from bs4 import BeautifulSoup __all__ = [ 'ZenodoAPI', @@ -432,7 +433,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): @@ -444,7 +452,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']}") @@ -468,9 +476,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 a486a611a41efc428f72edbb44bb173171e236eb..4bda942a3abf2526f6ede6a5c5ee4d47dacda3a8 100644 --- a/eossr/api/zenodo/tests/test_zenodo.py +++ b/eossr/api/zenodo/tests/test_zenodo.py @@ -177,3 +177,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'],