diff --git a/IPython/html/services/notebooks/filenbmanager.py b/IPython/html/services/notebooks/filenbmanager.py index 6431295..d5728fa 100644 --- a/IPython/html/services/notebooks/filenbmanager.py +++ b/IPython/html/services/notebooks/filenbmanager.py @@ -187,7 +187,7 @@ class FileNotebookManager(NotebookManager): for name in dir_names: os_path = self._get_os_path(name, path) if os.path.isdir(os_path) and not is_hidden(os_path, self.notebook_dir)\ - and not name.startswith('_'): + and self.should_list(name): try: model = self.get_dir_model(name, path) except IOError: @@ -233,7 +233,8 @@ class FileNotebookManager(NotebookManager): """ path = path.strip('/') notebook_names = self.get_notebook_names(path) - notebooks = [self.get_notebook(name, path, content=False) for name in notebook_names] + notebooks = [self.get_notebook(name, path, content=False) + for name in notebook_names if self.should_list(name)] notebooks = sorted(notebooks, key=sort_key) return notebooks diff --git a/IPython/html/services/notebooks/nbmanager.py b/IPython/html/services/notebooks/nbmanager.py index a9d397d..f3fb3fc 100644 --- a/IPython/html/services/notebooks/nbmanager.py +++ b/IPython/html/services/notebooks/nbmanager.py @@ -17,12 +17,13 @@ Authors: # Imports #----------------------------------------------------------------------------- +from fnmatch import fnmatch import itertools import os from IPython.config.configurable import LoggingConfigurable from IPython.nbformat import current, sign -from IPython.utils.traitlets import Instance, Unicode +from IPython.utils.traitlets import Instance, Unicode, List #----------------------------------------------------------------------------- # Classes @@ -36,6 +37,10 @@ class NotebookManager(LoggingConfigurable): def _notary_default(self): return sign.NotebookNotary(parent=self) + hide_globs = List(Unicode, [u'__pycache__'], config=True, help=""" + Glob patterns to hide in file and directory listings. + """) + # NotebookManager API part 1: methods that must be # implemented in subclasses. @@ -241,3 +246,6 @@ class NotebookManager(LoggingConfigurable): self.log.warn("Notebook %s/%s is not trusted", path, name) self.notary.mark_cells(nb, trusted) + def should_list(self, name): + """Should this file/directory name be displayed in a listing?""" + return not any(fnmatch(name, glob) for glob in self.hide_globs)