mirror of
https://github.com/jupyter/notebook.git
synced 2025-01-30 12:11:32 +08:00
fix and test path regexes
- require leading `/` - match empty string - disallow consecutive `//` This means that path_regex should be included as `/api/whatever%s`, not `/api/whatever/%s`
This commit is contained in:
parent
5c2ae3e92c
commit
ba370731a5
@ -463,8 +463,9 @@ class FilesRedirectHandler(IPythonHandler):
|
||||
# URL pattern fragments for re-use
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
path_regex = r"(?P<path>.*)"
|
||||
notebook_path_regex = r"(?P<path>.+\.ipynb)"
|
||||
# path matches any number of `/foo[/bar...]` or just `/` or ''
|
||||
path_regex = r"(?P<path>(?:(?:/[^/]+)+|/?))"
|
||||
notebook_path_regex = r"(?P<path>(?:/[^/]+)+\.ipynb)"
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# URL to handler mappings
|
||||
|
61
IPython/html/tests/test_paths.py
Normal file
61
IPython/html/tests/test_paths.py
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
import re
|
||||
import nose.tools as nt
|
||||
|
||||
from IPython.html.base.handlers import path_regex, notebook_path_regex
|
||||
|
||||
try: # py3
|
||||
assert_regex = nt.assert_regex
|
||||
assert_not_regex = nt.assert_not_regex
|
||||
except AttributeError: # py2
|
||||
assert_regex = nt.assert_regexp_matches
|
||||
assert_not_regex = nt.assert_not_regexp_matches
|
||||
|
||||
|
||||
# build regexps that tornado uses:
|
||||
path_pat = re.compile('^' + '/x%s' % path_regex + '$')
|
||||
nb_path_pat = re.compile('^' + '/y%s' % notebook_path_regex + '$')
|
||||
|
||||
def test_path_regex():
|
||||
for path in (
|
||||
'/x',
|
||||
'/x/',
|
||||
'/x/foo',
|
||||
'/x/foo.ipynb',
|
||||
'/x/foo/bar',
|
||||
'/x/foo/bar.txt',
|
||||
):
|
||||
assert_regex(path, path_pat)
|
||||
|
||||
def test_path_regex_bad():
|
||||
for path in (
|
||||
'/xfoo',
|
||||
'/xfoo/',
|
||||
'/xfoo/bar',
|
||||
'/xfoo/bar/',
|
||||
'/x/foo/bar/',
|
||||
'/x//foo',
|
||||
'/y',
|
||||
'/y/x/foo',
|
||||
):
|
||||
assert_not_regex(path, path_pat)
|
||||
|
||||
def test_notebook_path_regex():
|
||||
for path in (
|
||||
'/y/asdf.ipynb',
|
||||
'/y/foo/bar.ipynb',
|
||||
'/y/a/b/c/d/e.ipynb',
|
||||
):
|
||||
assert_regex(path, nb_path_pat)
|
||||
|
||||
def test_notebook_path_regex_bad():
|
||||
for path in (
|
||||
'/y',
|
||||
'/y/',
|
||||
'/y/.ipynb',
|
||||
'/y/foo/.ipynb',
|
||||
'/y/foo/bar',
|
||||
'/yfoo.ipynb',
|
||||
'/yfoo/bar.ipynb',
|
||||
):
|
||||
assert_not_regex(path, nb_path_pat)
|
Loading…
Reference in New Issue
Block a user