diff options
author | Dmitry Paramonov <asmatic075@gmail.com> | 2015-10-05 13:08:54 +0300 |
---|---|---|
committer | Dmitry Paramonov <asmatic075@gmail.com> | 2015-10-05 13:08:54 +0300 |
commit | 8a3d69c8eac1b3d63e91a9b50cdab5957c2dd01d (patch) | |
tree | afbc401c46cb4c3d8d89f9f8589628e64c490516 /fs/osfs | |
parent | ab5fb6080d164ba5418b014145175b7c5b569542 (diff) | |
parent | 9d9440e5544abe9742e23e41697f1e0d45f6d86e (diff) | |
download | pyfilesystem-git-8a3d69c8eac1b3d63e91a9b50cdab5957c2dd01d.tar.gz |
Merge github.com:PyFilesystem/pyfilesystem
Diffstat (limited to 'fs/osfs')
-rw-r--r-- | fs/osfs/__init__.py | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/fs/osfs/__init__.py b/fs/osfs/__init__.py index 4153f08..446ef93 100644 --- a/fs/osfs/__init__.py +++ b/fs/osfs/__init__.py @@ -23,6 +23,15 @@ import platform import io import shutil +scandir = None +try: + scandir = os.scandir +except AttributeError: + try: + from scandir import scandir + except ImportError: + pass + from fs.base import * from fs.path import * from fs.errors import * @@ -248,9 +257,24 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS): def listdir(self, path="./", wildcard=None, full=False, absolute=False, dirs_only=False, files_only=False): _decode_path = self._decode_path sys_path = self.getsyspath(path) - listing = os.listdir(sys_path) - paths = [_decode_path(p) for p in listing] - return self._listdir_helper(path, paths, wildcard, full, absolute, dirs_only, files_only) + + if scandir is None: + listing = os.listdir(sys_path) + paths = [_decode_path(p) for p in listing] + return self._listdir_helper(path, paths, wildcard, full, absolute, dirs_only, files_only) + else: + if dirs_only and files_only: + raise ValueError("dirs_only and files_only can not both be True") + # Use optimized scandir if present + scan = scandir(sys_path) + if dirs_only: + paths = [_decode_path(dir_entry.name) for dir_entry in scan if dir_entry.is_dir()] + elif files_only: + paths = [_decode_path(dir_entry.name) for dir_entry in scan if dir_entry.is_file()] + else: + paths = [_decode_path(dir_entry.name) for dir_entry in scan] + + return self._listdir_helper(path, paths, wildcard, full, absolute, False, False) @convert_os_errors def makedir(self, path, recursive=False, allow_recreate=False): |