Small refactoring of is_hidden to take root as default kwarg.

pull/37/head
Brian E. Granger 12 years ago
parent 009367666a
commit eb9e0be218

@ -265,7 +265,7 @@ class AuthenticatedFileHandler(IPythonHandler, web.StaticFileHandler):
"""
abs_path = super(AuthenticatedFileHandler, self).validate_absolute_path(root, absolute_path)
abs_root = os.path.abspath(root)
if is_hidden(abs_root, abs_path):
if is_hidden(abs_path, abs_root):
raise web.HTTPError(404)
return abs_path

@ -127,7 +127,7 @@ class FileNotebookManager(NotebookManager):
"""
path = path.strip('/')
os_path = self.get_os_path(path=path)
return is_hidden(self.notebook_dir, os_path)
return is_hidden(os_path, self.notebook_dir)
def get_os_path(self, name=None, path=''):
"""Given a notebook name and a URL path, return its file system
@ -179,13 +179,13 @@ class FileNotebookManager(NotebookManager):
"""List the directories for a given API style path."""
path = path.strip('/')
os_path = self.get_os_path('', path)
if not os.path.isdir(os_path) or is_hidden(self.notebook_dir, os_path):
if not os.path.isdir(os_path) or is_hidden(os_path, self.notebook_dir):
raise web.HTTPError(404, u'directory does not exist: %r' % os_path)
dir_names = os.listdir(os_path)
dirs = []
for name in dir_names:
os_path = self.get_os_path(name, path)
if os.path.isdir(os_path) and not is_hidden(self.notebook_dir, os_path):
if os.path.isdir(os_path) and not is_hidden(os_path, self.notebook_dir):
try:
model = self.get_dir_model(name, path)
except IOError:

@ -66,10 +66,11 @@ def test_is_hidden():
with TemporaryDirectory() as root:
subdir1 = os.path.join(root, 'subdir')
os.makedirs(subdir1)
nt.assert_equal(is_hidden(root, subdir1), False)
nt.assert_equal(is_hidden(subdir1, root), False)
subdir2 = os.path.join(root, '.subdir2')
os.makedirs(subdir2)
nt.assert_equal(is_hidden(root, subdir2), True)
nt.assert_equal(is_hidden(subdir2, root), True)
subdir34 = os.path.join(root, 'subdir3', '.subdir4')
os.makedirs(subdir34)
nt.assert_equal(is_hidden(root, subdir34), True)
nt.assert_equal(is_hidden(subdir34, root), True)
nt.assert_equal(is_hidden(subdir34), True)

@ -80,24 +80,31 @@ def url_unescape(path):
for p in py3compat.unicode_to_str(path).split('/')
])
def is_hidden(absolute_root, absolute_path):
def is_hidden(abs_path, abs_root=''):
"""Is a file is hidden or contained in a hidden directory.
Hidden is determined by either name starting with '.' or the UF_HIDDEN
flag as reported by stat.
This will start with the rightmost path element and work backwards to the
given root to see if a path is hidden or in a hidden directory. Hidden is
determined by either name starting with '.' or the UF_HIDDEN flag as
reported by stat.
Parameters
----------
absolute_root : unicode
absolute_path : unicode
abs_path : unicode
The absolute path to check for hidden directories.
abs_root : unicode
The absolute path of the root directory in which hidden directories
should be check for.
"""
inside_root = absolute_path[len(absolute_root):]
if not abs_root:
abs_root = abs_path.split(os.sep, 1)[0] + os.sep
inside_root = abs_path[len(abs_root):]
if any(part.startswith('.') for part in inside_root.split(os.sep)):
return True
# check UF_HIDDEN on any location up to root
path = absolute_path
while path and path.startswith(absolute_root) and path != absolute_root:
path = abs_path
while path and path.startswith(abs_root) and path != abs_root:
st = os.stat(path)
if getattr(st, 'st_flags', 0) & UF_HIDDEN:
return True

Loading…
Cancel
Save