mirror of
https://github.com/python/cpython.git
synced 2025-10-12 18:02:39 +00:00
Issue #27998: Removed workarounds for supporting bytes paths on Windows in
os.walk() function and glob module since os.scandir() now directly supports them.
This commit is contained in:
parent
fae2829c7a
commit
3ae41554c6
2 changed files with 10 additions and 83 deletions
|
@ -118,15 +118,6 @@ def _iterdir(dirname, dironly):
|
||||||
else:
|
else:
|
||||||
dirname = os.curdir
|
dirname = os.curdir
|
||||||
try:
|
try:
|
||||||
if os.name == 'nt' and isinstance(dirname, bytes):
|
|
||||||
names = os.listdir(dirname)
|
|
||||||
if dironly:
|
|
||||||
for name in names:
|
|
||||||
if os.path.isdir(os.path.join(dirname, name)):
|
|
||||||
yield name
|
|
||||||
else:
|
|
||||||
yield from names
|
|
||||||
else:
|
|
||||||
with os.scandir(dirname) as it:
|
with os.scandir(dirname) as it:
|
||||||
for entry in it:
|
for entry in it:
|
||||||
try:
|
try:
|
||||||
|
|
64
Lib/os.py
64
Lib/os.py
|
@ -343,9 +343,6 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
|
||||||
# minor reason when (say) a thousand readable directories are still
|
# minor reason when (say) a thousand readable directories are still
|
||||||
# left to visit. That logic is copied here.
|
# left to visit. That logic is copied here.
|
||||||
try:
|
try:
|
||||||
if name == 'nt' and isinstance(top, bytes):
|
|
||||||
scandir_it = _dummy_scandir(top)
|
|
||||||
else:
|
|
||||||
# Note that scandir is global in this module due
|
# Note that scandir is global in this module due
|
||||||
# to earlier import-*.
|
# to earlier import-*.
|
||||||
scandir_it = scandir(top)
|
scandir_it = scandir(top)
|
||||||
|
@ -417,67 +414,6 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
|
||||||
# Yield after recursion if going bottom up
|
# Yield after recursion if going bottom up
|
||||||
yield top, dirs, nondirs
|
yield top, dirs, nondirs
|
||||||
|
|
||||||
class _DummyDirEntry:
|
|
||||||
"""Dummy implementation of DirEntry
|
|
||||||
|
|
||||||
Only used internally by os.walk(bytes). Since os.walk() doesn't need the
|
|
||||||
follow_symlinks parameter: don't implement it, always follow symbolic
|
|
||||||
links.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, dir, name):
|
|
||||||
self.name = name
|
|
||||||
self.path = path.join(dir, name)
|
|
||||||
# Mimick FindFirstFile/FindNextFile: we should get file attributes
|
|
||||||
# while iterating on a directory
|
|
||||||
self._stat = None
|
|
||||||
self._lstat = None
|
|
||||||
try:
|
|
||||||
self.stat(follow_symlinks=False)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def stat(self, *, follow_symlinks=True):
|
|
||||||
if follow_symlinks:
|
|
||||||
if self._stat is None:
|
|
||||||
self._stat = stat(self.path)
|
|
||||||
return self._stat
|
|
||||||
else:
|
|
||||||
if self._lstat is None:
|
|
||||||
self._lstat = stat(self.path, follow_symlinks=False)
|
|
||||||
return self._lstat
|
|
||||||
|
|
||||||
def is_dir(self):
|
|
||||||
if self._lstat is not None and not self.is_symlink():
|
|
||||||
# use the cache lstat
|
|
||||||
stat = self.stat(follow_symlinks=False)
|
|
||||||
return st.S_ISDIR(stat.st_mode)
|
|
||||||
|
|
||||||
stat = self.stat()
|
|
||||||
return st.S_ISDIR(stat.st_mode)
|
|
||||||
|
|
||||||
def is_symlink(self):
|
|
||||||
stat = self.stat(follow_symlinks=False)
|
|
||||||
return st.S_ISLNK(stat.st_mode)
|
|
||||||
|
|
||||||
class _dummy_scandir:
|
|
||||||
# listdir-based implementation for bytes patches on Windows
|
|
||||||
def __init__(self, dir):
|
|
||||||
self.dir = dir
|
|
||||||
self.it = iter(listdir(dir))
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
return self
|
|
||||||
|
|
||||||
def __next__(self):
|
|
||||||
return _DummyDirEntry(self.dir, next(self.it))
|
|
||||||
|
|
||||||
def __enter__(self):
|
|
||||||
return self
|
|
||||||
|
|
||||||
def __exit__(self, *args):
|
|
||||||
self.it = iter(())
|
|
||||||
|
|
||||||
__all__.append("walk")
|
__all__.append("walk")
|
||||||
|
|
||||||
if {open, stat} <= supports_dir_fd and {listdir, stat} <= supports_fd:
|
if {open, stat} <= supports_dir_fd and {listdir, stat} <= supports_fd:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue