mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-18 15:33:02 +00:00
Merge pull request #5033 from manics/urlpathjoin-trailing-empty
url_path_join: handle empty trailing components
This commit is contained in:
@@ -1692,7 +1692,11 @@ class JupyterHub(Application):
|
|||||||
"""add a url prefix to handlers"""
|
"""add a url prefix to handlers"""
|
||||||
for i, tup in enumerate(handlers):
|
for i, tup in enumerate(handlers):
|
||||||
lis = list(tup)
|
lis = list(tup)
|
||||||
|
if tup[0]:
|
||||||
lis[0] = url_path_join(prefix, tup[0])
|
lis[0] = url_path_join(prefix, tup[0])
|
||||||
|
else:
|
||||||
|
# the '' route should match /prefix not /prefix/
|
||||||
|
lis[0] = prefix.rstrip("/")
|
||||||
handlers[i] = tuple(lis)
|
handlers[i] = tuple(lis)
|
||||||
return handlers
|
return handlers
|
||||||
|
|
||||||
|
@@ -100,6 +100,29 @@ async def test_tornado_coroutines():
|
|||||||
assert (await t.tornado_coroutine()) == "gen.coroutine"
|
assert (await t.tornado_coroutine()) == "gen.coroutine"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"pieces, expected",
|
||||||
|
[
|
||||||
|
(("/"), "/"),
|
||||||
|
(("/", "/"), "/"),
|
||||||
|
(("/base", ""), "/base"),
|
||||||
|
(("/base/", ""), "/base/"),
|
||||||
|
(("/base", "abc", "def"), "/base/abc/def"),
|
||||||
|
(("/base/", "/abc/", "/def/"), "/base/abc/def/"),
|
||||||
|
(("/base", "", "/", ""), "/base/"),
|
||||||
|
((""), ""),
|
||||||
|
(("", ""), ""),
|
||||||
|
(("", "part", ""), "part"),
|
||||||
|
(("", "/part"), "part"),
|
||||||
|
(("", "part", "", "after"), "part/after"),
|
||||||
|
(("", "part", "", "after/", "", ""), "part/after/"),
|
||||||
|
(("abc", "def"), "abc/def"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_url_path_join(pieces, expected):
|
||||||
|
assert utils.url_path_join(*pieces) == expected
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"forwarded, x_scheme, x_forwarded_proto, expected",
|
"forwarded, x_scheme, x_forwarded_proto, expected",
|
||||||
[
|
[
|
||||||
|
@@ -786,7 +786,7 @@ class User:
|
|||||||
if handler:
|
if handler:
|
||||||
await self.refresh_auth(handler)
|
await self.refresh_auth(handler)
|
||||||
|
|
||||||
base_url = url_path_join(self.base_url, url_escape_path(server_name)) + '/'
|
base_url = url_path_join(self.base_url, url_escape_path(server_name), "/")
|
||||||
|
|
||||||
orm_server = orm.Server(base_url=base_url)
|
orm_server = orm.Server(base_url=base_url)
|
||||||
db.add(orm_server)
|
db.add(orm_server)
|
||||||
@@ -877,8 +877,7 @@ class User:
|
|||||||
api_token,
|
api_token,
|
||||||
url_path_join(self.url, url_escape_path(server_name), 'oauth_callback'),
|
url_path_join(self.url, url_escape_path(server_name), 'oauth_callback'),
|
||||||
allowed_scopes=allowed_scopes,
|
allowed_scopes=allowed_scopes,
|
||||||
description="Server at %s"
|
description=f"Server at {url_path_join(self.base_url, server_name, '/')}",
|
||||||
% (url_path_join(self.base_url, server_name) + '/'),
|
|
||||||
)
|
)
|
||||||
spawner.orm_spawner.oauth_client = oauth_client
|
spawner.orm_spawner.oauth_client = oauth_client
|
||||||
db.commit()
|
db.commit()
|
||||||
|
@@ -471,9 +471,15 @@ def url_path_join(*pieces):
|
|||||||
|
|
||||||
Use to prevent double slash when joining subpath. This will leave the
|
Use to prevent double slash when joining subpath. This will leave the
|
||||||
initial and final / in place.
|
initial and final / in place.
|
||||||
|
Empty trailing items are ignored.
|
||||||
|
|
||||||
Copied from `notebook.utils.url_path_join`.
|
Based on `notebook.utils.url_path_join`.
|
||||||
"""
|
"""
|
||||||
|
pieces = list(pieces)
|
||||||
|
while pieces and not pieces[-1]:
|
||||||
|
del pieces[-1]
|
||||||
|
if not pieces:
|
||||||
|
return ""
|
||||||
initial = pieces[0].startswith('/')
|
initial = pieces[0].startswith('/')
|
||||||
final = pieces[-1].endswith('/')
|
final = pieces[-1].endswith('/')
|
||||||
stripped = [s.strip('/') for s in pieces]
|
stripped = [s.strip('/') for s in pieces]
|
||||||
|
Reference in New Issue
Block a user