Skip to content

Commit f721c52

Browse files
committed
fix resolved_ref_url and resolved_spec for zenodo and figshare. for zenodo add a test condition DOI represents all versions, resolves to the latest record id
1 parent 2590f62 commit f721c52

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

binderhub/repoproviders.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -225,15 +225,19 @@ def get_resolved_ref(self):
225225
return self.record_id
226226

227227
async def get_resolved_spec(self):
228-
return self.spec
228+
if not hasattr(self, 'resolved_ref'):
229+
self.resolved_ref = await self.get_resolved_ref()
230+
resolved_spec = self.spec.split("zenodo")[0] + "zenodo." + self.resolved_ref
231+
return resolved_spec
229232

230233
def get_repo_url(self):
231234
# While called repo URL, the return value of this function is passed
232235
# as argument to repo2docker, hence we return the spec as is.
233236
return self.spec
234237

235238
async def get_resolved_ref_url(self):
236-
return f"https://doi.org/{self.spec}"
239+
resolved_spec = await self.get_resolved_spec()
240+
return f"https://doi.org/{resolved_spec}"
237241

238242
def get_build_slug(self):
239243
return "zenodo-{}".format(self.record_id)
@@ -264,21 +268,22 @@ def get_resolved_ref(self):
264268
return self.record_id
265269

266270
async def get_resolved_spec(self):
267-
return self.spec
271+
if not hasattr(self, 'resolved_ref'):
272+
self.resolved_ref = await self.get_resolved_ref()
273+
274+
# spec without version is accepted as version 1 - check get_resolved_ref method
275+
# so we first strip article id and version and add it again
276+
resolved_spec = self.spec.split("figshare")[0] + "figshare." + self.resolved_ref
277+
return resolved_spec
268278

269279
def get_repo_url(self):
270280
# While called repo URL, the return value of this function is passed
271281
# as argument to repo2docker, hence we return the spec as is.
272282
return self.spec
273283

274284
async def get_resolved_ref_url(self):
275-
if not hasattr(self, 'resolved_ref'):
276-
self.resolved_ref = await self.get_resolved_ref()
277-
278-
# spec without version is accepted as version 1 - check get_resolved_ref method
279-
# so we first strip article id and version and add it again
280-
spec = self.spec.rstrip(self.resolved_ref) + "." + self.resolved_ref
281-
return f"https://doi.org/{spec}"
285+
resolved_spec = await self.get_resolved_spec()
286+
return f"https://doi.org/{resolved_spec}"
282287

283288
def get_build_slug(self):
284289
return "figshare-{}".format(self.record_id)

binderhub/tests/test_repoproviders.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,36 +37,48 @@ def test_spec_processing(spec, raw_user, raw_repo, raw_ref):
3737
assert raw_ref == unresolved_ref
3838

3939

40-
async def test_zenodo():
41-
spec = '10.5281/zenodo.3242074'
42-
40+
@pytest.mark.parametrize('spec,resolved_spec,resolved_ref,resolved_ref_url,build_slug', [
41+
['10.5281/zenodo.3242074',
42+
'10.5281/zenodo.3242074',
43+
'3242074',
44+
'https://doi.org/10.5281/zenodo.3242074',
45+
'zenodo-3242074'],
46+
['10.5281/zenodo.3242073',
47+
'10.5281/zenodo.3242074',
48+
'3242074',
49+
'https://doi.org/10.5281/zenodo.3242074',
50+
'zenodo-3242074'],
51+
])
52+
async def test_zenodo(spec, resolved_spec, resolved_ref, resolved_ref_url, build_slug):
4353
provider = ZenodoProvider(spec=spec)
4454

4555
# have to resolve the ref first
4656
ref = await provider.get_resolved_ref()
47-
assert ref == '3242074'
57+
assert ref == resolved_ref
4858

4959
slug = provider.get_build_slug()
50-
assert slug == 'zenodo-3242074'
60+
assert slug == build_slug
5161
repo_url = provider.get_repo_url()
5262
assert repo_url == spec
5363
ref_url = await provider.get_resolved_ref_url()
54-
assert ref_url == f"https://doi.org/{spec}"
55-
resolved_spec = await provider.get_resolved_spec()
56-
assert resolved_spec == spec
64+
assert ref_url == resolved_ref_url
65+
spec = await provider.get_resolved_spec()
66+
assert spec == resolved_spec
5767

5868

59-
@pytest.mark.parametrize('spec,resolved_ref,resolved_ref_url,build_slug', [
69+
@pytest.mark.parametrize('spec,resolved_spec,resolved_ref,resolved_ref_url,build_slug', [
6070
['10.6084/m9.figshare.9782777.v1',
71+
'10.6084/m9.figshare.9782777.v1',
6172
'9782777.v1',
6273
'https://doi.org/10.6084/m9.figshare.9782777.v1',
6374
'figshare-9782777.v1'],
6475
['10.6084/m9.figshare.9782777',
76+
'10.6084/m9.figshare.9782777.v1',
6577
'9782777.v1',
6678
'https://doi.org/10.6084/m9.figshare.9782777.v1',
6779
'figshare-9782777.v1'],
6880
])
69-
async def test_figshare(spec, resolved_ref, resolved_ref_url, build_slug):
81+
async def test_figshare(spec, resolved_spec, resolved_ref, resolved_ref_url, build_slug):
7082
provider = FigshareProvider(spec=spec)
7183

7284
# have to resolve the ref first
@@ -79,8 +91,8 @@ async def test_figshare(spec, resolved_ref, resolved_ref_url, build_slug):
7991
assert repo_url == spec
8092
ref_url = await provider.get_resolved_ref_url()
8193
assert ref_url == resolved_ref_url
82-
resolved_spec = await provider.get_resolved_spec()
83-
assert resolved_spec == spec
94+
spec = await provider.get_resolved_spec()
95+
assert spec == resolved_spec
8496

8597

8698
@pytest.mark.github_api

0 commit comments

Comments
 (0)