Skip to content

Commit b30fd86

Browse files
Merge pull request #1 from adriendelsalle/serve_ui_from_backend
Use the first repo provider to init UI
2 parents d1e4683 + 2f804fd commit b30fd86

File tree

3 files changed

+46
-9
lines changed

3 files changed

+46
-9
lines changed

binderhub/app.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
from .health import HealthHandler
4444
from .launcher import Launcher
4545
from .log import log_request
46+
from .repoproviders import RepoProvider
4647
from .registry import DockerRegistry
4748
from .main import MainHandler, ParameterizedMainHandler, LegacyRedirectHandler
4849
from .repoproviders import (GitHubRepoProvider, GitRepoProvider,
@@ -454,6 +455,18 @@ def _add_slash(self, proposal):
454455
List of Repo Providers to register and try
455456
"""
456457
)
458+
459+
@validate('repo_providers')
460+
def _validate_repo_providers(self, proposal):
461+
"""trait validator to ensure there is at least one repo provider"""
462+
if not proposal.value:
463+
raise TraitError("Please provide at least one repo provider")
464+
465+
if any([not issubclass(provider, RepoProvider) for provider in proposal.value.values()]):
466+
raise TraitError("Repository providers should inherit from 'binderhub.RepoProvider'")
467+
468+
return proposal.value
469+
457470
concurrent_build_limit = Integer(
458471
32,
459472
config=True,

binderhub/templates/index.html

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,17 @@ <h4>New to Binder? Get started with a Zero-to-Binder tutorial in <a href="https:
3737
{% block form %}
3838
<form id="build-form" class="form jumbotron">
3939
<h4 id="form-header" class='row'>Build and launch a repository</h4>
40-
<input type="hidden" id="provider_prefix" value="gh"/>
40+
<input type="hidden" id="provider_prefix" value="{{repo_providers.keys() | list | first}}"/>
4141
<div class="form-group row">
42-
<label for="repository">Git repository URL (github.com, gitlab.com or self-host)</label>
42+
<label for="repository">{{(repo_providers.values() | list | first).labels.text}}</label>
4343
<div class="input-group">
4444
<div class="input-group-btn" id="url-type-btn">
4545
<button type="button" class="btn btn-secondary dropdown-toggle"
4646
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
4747
title="Specify source of repository"
4848
>
4949
<span id="provider_prefix-selected">
50-
GitHub
50+
{{(repo_providers.values() | list | first).display_name}}
5151
</span>
5252
<span class="caret"></span>
5353
</button>
@@ -57,19 +57,19 @@ <h4 id="form-header" class='row'>Build and launch a repository</h4>
5757
{% endfor %}
5858
</ul>
5959
</div>
60-
<input class="form-control" type="text" id="repository" data-lpignore="true" placeholder="GitHub repository name or link"/>
60+
<input class="form-control" type="text" id="repository" data-lpignore="true" placeholder="{{(repo_providers.values() | list | first).labels.text}}"/>
6161
</div>
6262
</div>
6363
<div class="form-row row">
6464
<div class="form-group col-md-4">
65-
<label for="ref">Git branch, tag, or commit</label>
66-
<input class="form-control" type="text" id="ref" placeholder="master"/>
65+
<label for="ref">{{(repo_providers.values() | list | first).labels.tag_text}}</label>
66+
<input class="form-control" type="text" id="ref" placeholder="HEAD"/>
6767
</div>
6868
<div class="form-group col-md-6">
69-
<label for="filepath"></label>
69+
<label for="filepath">Path to a notebook file (optional)</label>
7070
<div class="input-group">
7171
<input class="form-control" type="text" id="filepath"
72-
placeholder=""
72+
placeholder="Path to a notebook file (optional)"
7373
/>
7474
<div class="input-group-btn" id="url-or-file-btn">
7575
<button type="button" class="btn btn-secondary dropdown-toggle"
@@ -102,7 +102,8 @@ <h4 id="form-header" class='row'>Build and launch a repository</h4>
102102
<label>Copy the URL below and share your Binder with others:</label>
103103
</div>
104104
<div class="url-row">
105-
<pre id="basic-url-snippet" data-default="Fill in the fields to see a URL for sharing your Binder."></pre>
105+
<pre id="basic-url-snippet" data-default="Fill in the fields to see a URL for sharing your Binder."
106+
>Fill in the fields to see a URL for sharing your Binder.</pre>
106107
<img class="icon clipboard" src="{{static_url("images/copy-icon-black.svg")}}" data-clipboard-target="#basic-url-snippet" alt="Copy to clipboard">
107108
</div>
108109
</div>

binderhub/tests/test_app.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,33 @@
22

33
from subprocess import check_output
44
import sys
5+
import pytest
6+
7+
from traitlets import TraitError
8+
9+
from binderhub.app import BinderHub
10+
from binderhub.repoproviders import (RepoProvider, GitLabRepoProvider, GitHubRepoProvider)
11+
512

613
def test_help():
714
check_output([sys.executable, '-m', 'binderhub', '-h'])
815

916
def test_help_all():
1017
check_output([sys.executable, '-m', 'binderhub', '--help-all'])
1118

19+
def test_repo_providers():
20+
b = BinderHub()
21+
22+
class Provider(RepoProvider):
23+
pass
24+
25+
b.repo_providers = dict(gh=GitHubRepoProvider, gl=GitLabRepoProvider)
26+
b.repo_providers = dict(p=Provider)
27+
28+
class BadProvider():
29+
pass
30+
31+
wrong_repo_providers = [GitHubRepoProvider, {}, 'GitHub', BadProvider]
32+
for repo_providers in wrong_repo_providers:
33+
with pytest.raises(TraitError):
34+
b.repo_providers = repo_providers

0 commit comments

Comments
 (0)