From 1a89b81d37136da75b01f26b3cf2d34bdc614aa3 2014-12-09 19:08:58 From: Min RK Date: 2014-12-09 19:08:58 Subject: [PATCH] Merge pull request #7090 from dsblank/master Allow FileLinks to not recurse into subdirectories --- diff --git a/IPython/lib/display.py b/IPython/lib/display.py index 30494b0..f65ee41 100644 --- a/IPython/lib/display.py +++ b/IPython/lib/display.py @@ -368,7 +368,8 @@ class FileLinks(FileLink): result_html_prefix='', result_html_suffix='
', notebook_display_formatter=None, - terminal_display_formatter=None): + terminal_display_formatter=None, + recursive=True): """ See :class:`FileLink` for the ``path``, ``url_prefix``, ``result_html_prefix`` and ``result_html_suffix`` parameters. @@ -396,6 +397,8 @@ class FileLinks(FileLink): included_suffixes : list The file suffixes that should be included in the output (passing None meansto include all suffixes in the output in the built-in formatters) + recursive : boolean + Whether to recurse into subdirectories. Default is True. The function should return a list of lines that will be printed in the notebook (if passing notebook_display_formatter) or the terminal (if @@ -421,6 +424,8 @@ class FileLinks(FileLink): self.terminal_display_formatter = \ terminal_display_formatter or self._get_terminal_display_formatter() + self.recursive = recursive + def _get_display_formatter(self, dirname_output_format, fname_output_format, @@ -516,7 +521,10 @@ class FileLinks(FileLink): def _format_path(self): result_lines = [] - walked_dir = list(walk(self.path)) + if self.recursive: + walked_dir = list(walk(self.path)) + else: + walked_dir = [next(walk(self.path))] walked_dir.sort() for dirname, subdirs, fnames in walked_dir: result_lines += self.notebook_display_formatter(dirname, fnames, self.included_suffixes) @@ -526,7 +534,10 @@ class FileLinks(FileLink): """return newline-separated absolute paths """ result_lines = [] - walked_dir = list(walk(self.path)) + if self.recursive: + walked_dir = list(walk(self.path)) + else: + walked_dir = [next(walk(self.path))] walked_dir.sort() for dirname, subdirs, fnames in walked_dir: result_lines += self.terminal_display_formatter(dirname, fnames, self.included_suffixes) diff --git a/IPython/lib/tests/test_display.py b/IPython/lib/tests/test_display.py index 3223482..43fb66e 100644 --- a/IPython/lib/tests/test_display.py +++ b/IPython/lib/tests/test_display.py @@ -156,7 +156,23 @@ def test_error_on_file_to_FileLinks(): tf1 = NamedTemporaryFile(dir=td) nt.assert_raises(ValueError,display.FileLinks,tf1.name) +def test_recursive_FileLinks(): + """FileLinks: Does not recurse when recursive=False + """ + td = mkdtemp() + tf = NamedTemporaryFile(dir=td) + subtd = mkdtemp(dir=td) + subtf = NamedTemporaryFile(dir=subtd) + fl = display.FileLinks(td) + actual = str(fl) + actual = actual.split('\n') + nt.assert_equal(len(actual), 4, actual) + fl = display.FileLinks(td, recursive=False) + actual = str(fl) + actual = actual.split('\n') + nt.assert_equal(len(actual), 2, actual) + @skipif_not_numpy def test_audio_from_file(): path = pjoin(dirname(__file__), 'test.wav') - display.Audio(filename=path) \ No newline at end of file + display.Audio(filename=path)