Skip to content

Commit

Permalink
Add Dataverse to UI. Fixes #900
Browse files Browse the repository at this point in the history
  • Loading branch information
Xarthisius committed Oct 1, 2019
1 parent a168d06 commit d22cb3b
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 5 deletions.
4 changes: 3 additions & 1 deletion binderhub/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
from .main import MainHandler, ParameterizedMainHandler, LegacyRedirectHandler
from .repoproviders import (GitHubRepoProvider, GitRepoProvider,
GitLabRepoProvider, GistRepoProvider,
ZenodoProvider, FigshareProvider)
ZenodoProvider, FigshareProvider,
DataverseProvider)
from .metrics import MetricsHandler

from .utils import ByteSpecification, url_path_join
Expand Down Expand Up @@ -393,6 +394,7 @@ def _add_slash(self, proposal):
'gl': GitLabRepoProvider,
'zenodo': ZenodoProvider,
'figshare': FigshareProvider,
'dataverse': DataverseProvider,
},
config=True,
help="""
Expand Down
3 changes: 2 additions & 1 deletion binderhub/event-schemas/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"GitLab",
"Git",
"Zenodo",
"Figshare"
"Figshare",
"Dataverse"
],
"description": "Provider for the repository being launched"
},
Expand Down
3 changes: 2 additions & 1 deletion binderhub/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
"gl": "GitLab",
"git": "Git repo",
"zenodo": "Zenodo",
"figshare": "Figshare"
"figshare": "Figshare",
"dataverse": "Dataverse",
}


Expand Down
32 changes: 32 additions & 0 deletions binderhub/repoproviders.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
repo providers in event-schemas/launch.json.
"""
from datetime import timedelta
import hashlib
import json
import os
import time
import urllib.parse
import re
import subprocess

import escapism
from prometheus_client import Gauge

from tornado import gen
Expand Down Expand Up @@ -250,6 +252,36 @@ def get_build_slug(self):
return "figshare-{}".format(self.record_id)


class DataverseProvider(RepoProvider):
name = Unicode("Dataverse")

@gen.coroutine
def get_resolved_ref(self):
lookup_url = "https://data.wholetale.org/api/v1/repository/lookup?{}".format(
urllib.parse.urlencode({"dataId": json.dumps([self.spec])})
)
req = HTTPRequest(lookup_url, user_agent="BinderHub")
client = AsyncHTTPClient()
r = yield client.fetch(req)

resp = json.loads(r.body)
assert resp[0]["repository"].lower() == "dataverse"

self.identifier = resp[0]["doi"]
# record_id is used only as an image tag, we need to make sure it's nice and
# always the same for a given doi
self.record_id = hashlib.sha1(self.identifier.encode()).hexdigest()
return self.record_id

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

def get_build_slug(self):
return "dataverse-" + escapism.escape(self.identifier, escape_char="-").lower()


class GitRepoProvider(RepoProvider):
"""Bare bones git repo provider.
Expand Down
7 changes: 6 additions & 1 deletion binderhub/static/js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ function updateRepoText() {
$("#ref").prop("disabled", true);
$("label[for=ref]").prop("disabled", true);
}
else if (provider === "dataverse") {
text = "Dataverse DOI (10.7910/DVN/TJCLKP)";
$("#ref").prop("disabled", true);
$("label[for=ref]").prop("disabled", true);
}
$("#repository").attr('placeholder', text);
$("label[for=repository]").text(text);
$("#ref").attr('placeholder', tag_text);
Expand All @@ -112,7 +117,7 @@ function getBuildFormValues() {
}

var ref = $('#ref').val().trim() || 'master';
if (providerPrefix === 'zenodo' || providerPrefix === 'figshare') {
if (providerPrefix === 'zenodo' || providerPrefix === 'figshare' || providerPrefix === 'dataverse') {
ref = "";
}
var path = $('#filepath').val().trim();
Expand Down
1 change: 1 addition & 0 deletions binderhub/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ <h4 id="form-header" class='row'>Build and launch a repository</h4>
<li class="dropdown-item" value="git"><a href="#">Git repository</a></li>
<li class="dropdown-item" value="zenodo"><a href="#">Zenodo DOI</a></li>
<li class="dropdown-item" value="figshare"><a href="#">Figshare DOI</a></li>
<li class="dropdown-item" value="dataverse"><a href="#">Dataverse DOI</a></li>
</ul>
</div>
</div>
Expand Down
17 changes: 16 additions & 1 deletion binderhub/tests/test_repoproviders.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

from binderhub.repoproviders import (
tokenize_spec, strip_suffix, GitHubRepoProvider, GitRepoProvider,
GitLabRepoProvider, GistRepoProvider, ZenodoProvider, FigshareProvider
GitLabRepoProvider, GistRepoProvider, ZenodoProvider, FigshareProvider,
DataverseProvider
)


Expand Down Expand Up @@ -67,6 +68,20 @@ async def test_figshare():
assert repo_url == spec


async def test_dataverse():
spec = '10.7910/DVN/TJCLKP'

provider = DataverseProvider(spec=spec)
# have to resolve the ref first
ref = await provider.get_resolved_ref()
assert ref == 'doi:10.7910/DVN/TJCLKP'

slug = provider.get_build_slug()
assert slug == 'dataverse-doi-3a10-2e7910-2fdvn-2ftjclkp'
repo_url = provider.get_repo_url()
assert repo_url == spec


@pytest.mark.github_api
def test_github_ref():
provider = GitHubRepoProvider(spec='jupyterhub/zero-to-jupyterhub-k8s/v0.4')
Expand Down

0 comments on commit d22cb3b

Please sign in to comment.