mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-12 04:23:01 +00:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
220eb87bce | ||
![]() |
f9e9150abc | ||
![]() |
8074469ad7 | ||
![]() |
46d2455aff | ||
![]() |
72e4119e1a | ||
![]() |
faa1754645 | ||
![]() |
318f739ba9 |
@@ -9,6 +9,10 @@ cryptography
|
||||
html5lib # needed for beautifulsoup
|
||||
jupyterlab >=3
|
||||
mock
|
||||
# nbclassic provides the '/tree/' handler, which we use in tests
|
||||
# it is a transitive dependency via jupyterlab,
|
||||
# but depend on it directly
|
||||
nbclassic
|
||||
pre-commit
|
||||
pytest>=3.3
|
||||
pytest-asyncio; python_version < "3.7"
|
||||
|
@@ -6,7 +6,7 @@ info:
|
||||
description: The REST API for JupyterHub
|
||||
license:
|
||||
name: BSD-3-Clause
|
||||
version: 2.3.1
|
||||
version: 2.3.2.dev
|
||||
servers:
|
||||
- url: /hub/api
|
||||
security:
|
||||
|
@@ -60,7 +60,10 @@ const AddUser = (props) => {
|
||||
placeholder="usernames separated by line"
|
||||
data-testid="user-textarea"
|
||||
onBlur={(e) => {
|
||||
let split_users = e.target.value.split("\n");
|
||||
let split_users = e.target.value
|
||||
.split("\n")
|
||||
.map((u) => u.trim())
|
||||
.filter((u) => u.length > 0);
|
||||
setUsers(split_users);
|
||||
}}
|
||||
></textarea>
|
||||
@@ -88,17 +91,7 @@ const AddUser = (props) => {
|
||||
data-testid="submit"
|
||||
className="btn btn-primary"
|
||||
onClick={() => {
|
||||
let filtered_users = users.filter(
|
||||
(e) =>
|
||||
e.length > 2 &&
|
||||
/[!@#$%^&*(),.?":{}|<>]/g.test(e) == false
|
||||
);
|
||||
if (filtered_users.length < users.length) {
|
||||
setUsers(filtered_users);
|
||||
failRegexEvent();
|
||||
}
|
||||
|
||||
addUsers(filtered_users, admin)
|
||||
addUsers(users, admin)
|
||||
.then((data) =>
|
||||
data.status < 300
|
||||
? updateUsers(0, limit)
|
||||
|
@@ -70,12 +70,12 @@ test("Removes users when they fail Regex", async () => {
|
||||
let textarea = screen.getByTestId("user-textarea");
|
||||
let submit = screen.getByTestId("submit");
|
||||
|
||||
fireEvent.blur(textarea, { target: { value: "foo\nbar\n!!*&*" } });
|
||||
fireEvent.blur(textarea, { target: { value: "foo \n bar\na@b.co\n \n\n" } });
|
||||
await act(async () => {
|
||||
fireEvent.click(submit);
|
||||
});
|
||||
|
||||
expect(callbackSpy).toHaveBeenCalledWith(["foo", "bar"], false);
|
||||
expect(callbackSpy).toHaveBeenCalledWith(["foo", "bar", "a@b.co"], false);
|
||||
});
|
||||
|
||||
test("Correctly submits admin", async () => {
|
||||
|
@@ -59,7 +59,7 @@ const CreateGroup = (props) => {
|
||||
value={groupName}
|
||||
placeholder="group name..."
|
||||
onChange={(e) => {
|
||||
setGroupName(e.target.value);
|
||||
setGroupName(e.target.value.trim());
|
||||
}}
|
||||
></input>
|
||||
</div>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
# Copyright (c) Jupyter Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
# version_info updated by running `tbump`
|
||||
version_info = (2, 3, 1, "", "")
|
||||
version_info = (2, 3, 2, "", "dev")
|
||||
|
||||
# pep 440 version: no dot before beta/rc, but before .dev
|
||||
# 0.1.0rc1
|
||||
|
@@ -755,10 +755,12 @@ class SingleUserNotebookAppMixin(Configurable):
|
||||
if 'jinja2_env' in settings:
|
||||
# default jinja env (should we do this on jupyter-server, or only notebook?)
|
||||
jinja_envs.append(settings['jinja2_env'])
|
||||
if 'notebook_jinja2_env' in settings:
|
||||
# when running with jupyter-server, classic notebook (nbclassic server extension)
|
||||
# gets its own jinja env, which needs the same patch
|
||||
jinja_envs.append(settings['notebook_jinja2_env'])
|
||||
for ext_name in ("notebook", "nbclassic"):
|
||||
env_name = f"{ext_name}_jinja2_env"
|
||||
if env_name in settings:
|
||||
# when running with jupyter-server, classic notebook (nbclassic server extension or notebook v7)
|
||||
# gets its own jinja env, which needs the same patch
|
||||
jinja_envs.append(settings[env_name])
|
||||
|
||||
# patch jinja env loading to get modified template, only for base page.html
|
||||
def get_page(name):
|
||||
|
@@ -199,10 +199,22 @@ def test_singleuser_app_class(JUPYTERHUB_SINGLEUSER_APP):
|
||||
import jupyter_server # noqa
|
||||
except ImportError:
|
||||
have_server = False
|
||||
expect_error = "jupyter_server" in JUPYTERHUB_SINGLEUSER_APP
|
||||
else:
|
||||
have_server = True
|
||||
expect_error = False
|
||||
try:
|
||||
import notebook.notebookapp # noqa
|
||||
except ImportError:
|
||||
have_notebook = False
|
||||
else:
|
||||
have_notebook = True
|
||||
|
||||
if JUPYTERHUB_SINGLEUSER_APP.startswith("notebook."):
|
||||
expect_error = not have_notebook
|
||||
elif JUPYTERHUB_SINGLEUSER_APP.startswith("jupyter_server."):
|
||||
expect_error = not have_server
|
||||
else:
|
||||
# not specified, will try both
|
||||
expect_error = not (have_server or have_notebook)
|
||||
|
||||
if expect_error:
|
||||
ctx = pytest.raises(CalledProcessError)
|
||||
|
@@ -15,7 +15,7 @@ target_version = [
|
||||
github_url = "https://github.com/jupyterhub/jupyterhub"
|
||||
|
||||
[tool.tbump.version]
|
||||
current = "2.3.1"
|
||||
current = "2.3.2.dev"
|
||||
|
||||
# Example of a semver regexp.
|
||||
# Make sure this matches current_version before
|
||||
|
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user