summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2019-02-04 07:08:18 (GMT)
committerGitHub <noreply@github.com>2019-02-04 07:08:18 (GMT)
commit2f6fae6e510dba653391cb510a2aca8322eec03b (patch)
treec22507069e5f050d296b177cb4914ff37377e345
parentf75d59e1a896115bd52f543a417c665d6edc331f (diff)
downloadcpython-2f6fae6e510dba653391cb510a2aca8322eec03b.zip
cpython-2f6fae6e510dba653391cb510a2aca8322eec03b.tar.gz
cpython-2f6fae6e510dba653391cb510a2aca8322eec03b.tar.bz2
bpo-35692: pathlib no longer raises when checking file and directory existence on drives that are not ready (GH-11746)
-rw-r--r--Lib/pathlib.py27
-rw-r--r--Misc/NEWS.d/next/Windows/2019-02-02-16-23-57.bpo-35692.cIiiE9.rst2
2 files changed, 20 insertions, 9 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index 89dffa5..da32f90 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -37,6 +37,15 @@ __all__ = [
# EBADF - guard agains macOS `stat` throwing EBADF
_IGNORED_ERROS = (ENOENT, ENOTDIR, EBADF)
+_IGNORED_WINERRORS = (
+ 21, # ERROR_NOT_READY - drive exists but is not accessible
+)
+
+def _ignore_error(exception):
+ return (getattr(exception, 'errno', None) in _IGNORED_ERROS or
+ getattr(exception, 'winerror', None) in _IGNORED_WINERRORS)
+
+
def _is_wildcard_pattern(pat):
# Whether this pattern needs actual matching using fnmatch, or can
# be looked up directly as a file.
@@ -535,7 +544,7 @@ class _RecursiveWildcardSelector(_Selector):
try:
entry_is_dir = entry.is_dir()
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
if entry_is_dir and not entry.is_symlink():
path = parent_path._make_child_relpath(entry.name)
@@ -1328,7 +1337,7 @@ class Path(PurePath):
try:
self.stat()
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
return False
except ValueError:
@@ -1343,7 +1352,7 @@ class Path(PurePath):
try:
return S_ISDIR(self.stat().st_mode)
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
# Path doesn't exist or is a broken symlink
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
@@ -1360,7 +1369,7 @@ class Path(PurePath):
try:
return S_ISREG(self.stat().st_mode)
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
# Path doesn't exist or is a broken symlink
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
@@ -1397,7 +1406,7 @@ class Path(PurePath):
try:
return S_ISLNK(self.lstat().st_mode)
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
# Path doesn't exist
return False
@@ -1412,7 +1421,7 @@ class Path(PurePath):
try:
return S_ISBLK(self.stat().st_mode)
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
# Path doesn't exist or is a broken symlink
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
@@ -1428,7 +1437,7 @@ class Path(PurePath):
try:
return S_ISCHR(self.stat().st_mode)
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
# Path doesn't exist or is a broken symlink
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
@@ -1444,7 +1453,7 @@ class Path(PurePath):
try:
return S_ISFIFO(self.stat().st_mode)
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
# Path doesn't exist or is a broken symlink
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
@@ -1460,7 +1469,7 @@ class Path(PurePath):
try:
return S_ISSOCK(self.stat().st_mode)
except OSError as e:
- if e.errno not in _IGNORED_ERROS:
+ if not _ignore_error(e):
raise
# Path doesn't exist or is a broken symlink
# (see https://bitbucket.org/pitrou/pathlib/issue/12/)
diff --git a/Misc/NEWS.d/next/Windows/2019-02-02-16-23-57.bpo-35692.cIiiE9.rst b/Misc/NEWS.d/next/Windows/2019-02-02-16-23-57.bpo-35692.cIiiE9.rst
new file mode 100644
index 0000000..f371573
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-02-02-16-23-57.bpo-35692.cIiiE9.rst
@@ -0,0 +1,2 @@
+``pathlib`` no longer raises when checking file and directory existence on
+drives that are not ready