##// END OF EJS Templates
DEV: Remove ContentsManager.walk.
Scott Sanderson -
Show More
@@ -30,21 +30,6 b' from IPython.utils.py3compat import string_types'
30 copy_pat = re.compile(r'\-Copy\d*\.')
30 copy_pat = re.compile(r'\-Copy\d*\.')
31
31
32
32
33 def _separate_dirs_files(models):
34 """
35 Split an iterable of models into a list of file paths and a list of
36 directory paths.
37 """
38 dirs = []
39 files = []
40 for model in models:
41 if model['type'] == 'directory':
42 dirs.append(model['path'])
43 else:
44 files.append(model['path'])
45 return dirs, files
46
47
48 class CheckpointManager(LoggingConfigurable):
33 class CheckpointManager(LoggingConfigurable):
49 """
34 """
50 Base class for managing checkpoints for a ContentsManager.
35 Base class for managing checkpoints for a ContentsManager.
@@ -514,31 +499,6 b' class ContentsManager(LoggingConfigurable):'
514 """Should this file/directory name be displayed in a listing?"""
499 """Should this file/directory name be displayed in a listing?"""
515 return not any(fnmatch(name, glob) for glob in self.hide_globs)
500 return not any(fnmatch(name, glob) for glob in self.hide_globs)
516
501
517 def walk(self):
518 """
519 Like os.walk, but written in terms of the ContentsAPI.
520
521 Returns a generator of tuples of the form:
522 (directory name, [subdirectories], [files in directory])
523 """
524 return self._walk([''])
525
526 def _walk(self, dirs):
527 """
528 Recursive helper for walk.
529 """
530 for directory in dirs:
531 children = self.get(
532 directory,
533 content=True,
534 type='directory',
535 )['content']
536 dirs, files = map(sorted, _separate_dirs_files(children))
537 yield (directory, dirs, files)
538 if dirs:
539 for entry in self._walk(dirs):
540 yield(entry)
541
542 # Part 3: Checkpoints API
502 # Part 3: Checkpoints API
543 def create_checkpoint(self, path):
503 def create_checkpoint(self, path):
544 """Create a checkpoint."""
504 """Create a checkpoint."""
@@ -614,82 +614,3 b' class APITest(NotebookTestBase):'
614 with TemporaryDirectory() as td:
614 with TemporaryDirectory() as td:
615 with self.patch_cp_root(td):
615 with self.patch_cp_root(td):
616 self.test_file_checkpoints()
616 self.test_file_checkpoints()
617
618 def test_walk(self):
619 """
620 Test ContentsManager.walk.
621 """
622 results = list(self.notebook.contents_manager.walk())
623 expected = [
624 (
625 '',
626 [
627 'Directory with spaces in',
628 'foo',
629 'ordering',
630 u'unicodé',
631 u'å b',
632 ],
633 ['inroot.blob', 'inroot.ipynb', 'inroot.txt'],
634 ),
635 (
636 'Directory with spaces in',
637 [],
638 ['inspace.blob', 'inspace.ipynb', 'inspace.txt'],
639 ),
640 (
641 'foo',
642 ['bar'],
643 [
644 'a.blob', 'a.ipynb', 'a.txt',
645 'b.blob', 'b.ipynb', 'b.txt',
646 'name with spaces.blob',
647 'name with spaces.ipynb',
648 'name with spaces.txt',
649 u'unicodé.blob', u'unicodé.ipynb', u'unicodé.txt'
650 ]
651 ),
652 (
653 'foo/bar',
654 [],
655 ['baz.blob', 'baz.ipynb', 'baz.txt'],
656 ),
657 (
658 'ordering',
659 [],
660 [
661 'A.blob', 'A.ipynb', 'A.txt',
662 'C.blob', 'C.ipynb', 'C.txt',
663 'b.blob', 'b.ipynb', 'b.txt',
664 ],
665 ),
666 (
667 u'unicodé',
668 [],
669 ['innonascii.blob', 'innonascii.ipynb', 'innonascii.txt'],
670 ),
671 (
672 u'å b',
673 [],
674 [u'ç d.blob', u'ç d.ipynb', u'ç d.txt'],
675 ),
676 ]
677
678 for idx, (dname, subdirs, files) in enumerate(expected):
679 result_dname, result_subdirs, result_files = results[idx]
680 if dname == '':
681 sep = ''
682 else:
683 sep = '/'
684 self.assertEqual(
685 dname,
686 result_dname,
687 )
688 self.assertEqual(
689 [sep.join([dname, sub]) for sub in subdirs],
690 result_subdirs,
691 )
692 self.assertEqual(
693 [sep.join([dname, fname]) for fname in files],
694 result_files,
695 )
General Comments 0
You need to be logged in to leave comments. Login now