From efb4cd3bbcc9ca98bcec944d08b238259df5f567 Mon Sep 17 00:00:00 2001 From: Simon Li Date: Sun, 15 Oct 2023 13:43:15 +0100 Subject: [PATCH] Attempt to fix Zenodo Done by inspecting API responses - https://zenodo.org/api/records/3242074 - https://zenodo.org/api/records/3242074/files --- repo2docker/contentproviders/zenodo.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/repo2docker/contentproviders/zenodo.py b/repo2docker/contentproviders/zenodo.py index 5d02f723..b597cf6d 100644 --- a/repo2docker/contentproviders/zenodo.py +++ b/repo2docker/contentproviders/zenodo.py @@ -24,17 +24,19 @@ class Zenodo(DoiProvider): "http://sandbox.zenodo.org/record/", ], "api": "https://sandbox.zenodo.org/api/records/", - "filepath": "files", - "filename": "filename", - "download": "links.download", + "files": "links.files", + "filepath": "entries", + "filename": "key", + "download": "links.content", "type": "metadata.upload_type", }, { "hostname": ["https://zenodo.org/record/", "http://zenodo.org/record/"], "api": "https://zenodo.org/api/records/", - "filepath": "files", - "filename": "filename", - "download": "links.download", + "files": "links.files", + "filepath": "entries", + "filename": "key", + "download": "links.content", "type": "metadata.upload_type", }, { @@ -43,6 +45,7 @@ class Zenodo(DoiProvider): "http://data.caltech.edu/records/", ], "api": "https://data.caltech.edu/api/record/", + "files": "", "filepath": "metadata.electronic_location_and_access", "filename": "electronic_name.0", "download": "uniform_resource_identifier", @@ -69,9 +72,17 @@ class Zenodo(DoiProvider): f'{host["api"]}{record_id}', headers={"accept": "application/json"}, ) - record = resp.json() + if host["files"]: + yield f"Fetching Zenodo record {record_id} files.\n" + files_url = deep_get(record, host["files"]) + resp = self.urlopen( + files_url, + headers={"accept": "application/json"}, + ) + record = resp.json() + files = deep_get(record, host["filepath"]) only_one_file = len(files) == 1 for file_ref in files: