|
@@ -1967,72 +1967,9 @@ def consume(iterator, n=None):
|
|
# advance to the empty slice starting at position n
|
|
# advance to the empty slice starting at position n
|
|
next(islice(iterator, n, n), None)
|
|
next(islice(iterator, n, n), None)
|
|
|
|
|
|
-# GenericDirEntry, scandir_generic (c) 2012 Ben Hoyt
|
|
|
|
-# from the python-scandir package (3-clause BSD license, just like us, so no troubles here)
|
|
|
|
-# note: simplified version
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-class GenericDirEntry:
|
|
|
|
- __slots__ = ('name', '_scandir_path', '_path')
|
|
|
|
-
|
|
|
|
- def __init__(self, scandir_path, name):
|
|
|
|
- self._scandir_path = scandir_path
|
|
|
|
- self.name = name
|
|
|
|
- self._path = None
|
|
|
|
-
|
|
|
|
- @property
|
|
|
|
- def path(self):
|
|
|
|
- if self._path is None:
|
|
|
|
- self._path = os.path.join(self._scandir_path, self.name)
|
|
|
|
- return self._path
|
|
|
|
-
|
|
|
|
- def stat(self, follow_symlinks=True):
|
|
|
|
- assert not follow_symlinks
|
|
|
|
- return os.stat(self.path, follow_symlinks=follow_symlinks)
|
|
|
|
-
|
|
|
|
- def _check_type(self, type):
|
|
|
|
- st = self.stat(False)
|
|
|
|
- return stat.S_IFMT(st.st_mode) == type
|
|
|
|
-
|
|
|
|
- def is_dir(self, follow_symlinks=True):
|
|
|
|
- assert not follow_symlinks
|
|
|
|
- return self._check_type(stat.S_IFDIR)
|
|
|
|
-
|
|
|
|
- def is_file(self, follow_symlinks=True):
|
|
|
|
- assert not follow_symlinks
|
|
|
|
- return self._check_type(stat.S_IFREG)
|
|
|
|
-
|
|
|
|
- def is_symlink(self):
|
|
|
|
- return self._check_type(stat.S_IFLNK)
|
|
|
|
-
|
|
|
|
- def inode(self):
|
|
|
|
- st = self.stat(False)
|
|
|
|
- return st.st_ino
|
|
|
|
-
|
|
|
|
- def __repr__(self):
|
|
|
|
- return '<{0}: {1!r}>'.format(self.__class__.__name__, self.path)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-def scandir_generic(path='.'):
|
|
|
|
- """Like os.listdir(), but yield DirEntry objects instead of returning a list of names."""
|
|
|
|
- for name in sorted(os.listdir(path)):
|
|
|
|
- yield GenericDirEntry(path, name)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-try:
|
|
|
|
- from os import scandir
|
|
|
|
-except ImportError:
|
|
|
|
- # TODO: we removed official support for Python 3.4, so we could drop this.
|
|
|
|
- try:
|
|
|
|
- # Try python-scandir on Python 3.4
|
|
|
|
- from scandir import scandir
|
|
|
|
- except ImportError:
|
|
|
|
- # If python-scandir is not installed, then use a version that is just as slow as listdir.
|
|
|
|
- scandir = scandir_generic
|
|
|
|
-
|
|
|
|
|
|
|
|
def scandir_inorder(path='.'):
|
|
def scandir_inorder(path='.'):
|
|
- return sorted(scandir(path), key=lambda dirent: dirent.inode())
|
|
|
|
|
|
+ return sorted(os.scandir(path), key=lambda dirent: dirent.inode())
|
|
|
|
|
|
|
|
|
|
def clean_lines(lines, lstrip=None, rstrip=None, remove_empty=True, remove_comments=True):
|
|
def clean_lines(lines, lstrip=None, rstrip=None, remove_empty=True, remove_comments=True):
|