summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNice Zombies <nineteendo19d0@gmail.com>2024-03-25 22:55:11 (GMT)
committerGitHub <noreply@github.com>2024-03-25 22:55:11 (GMT)
commit0821923aa979a72464c5da8dfa53a719bba5801c (patch)
tree1486b42a70c2cfbbc230ee56a9812b164754ea66
parentc2276176d543a2fc2d57709c2787f99850fbb073 (diff)
downloadcpython-0821923aa979a72464c5da8dfa53a719bba5801c.zip
cpython-0821923aa979a72464c5da8dfa53a719bba5801c.tar.gz
cpython-0821923aa979a72464c5da8dfa53a719bba5801c.tar.bz2
gh-117114: Make os.path.isdevdrive available on all platforms (GH-117115)
-rw-r--r--Doc/library/os.path.rst17
-rw-r--r--Lib/genericpath.py28
-rw-r--r--Lib/ntpath.py28
-rw-r--r--Lib/posixpath.py22
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2024-03-21-09-57-57.gh-issue-117114.Qu-p55.rst1
5 files changed, 39 insertions, 57 deletions
diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst
index 3ee2b7d..dcc877d 100644
--- a/Doc/library/os.path.rst
+++ b/Doc/library/os.path.rst
@@ -4,7 +4,7 @@
.. module:: os.path
:synopsis: Operations on pathnames.
-**Source code:** :source:`Lib/posixpath.py` (for POSIX) and
+**Source code:** :source:`Lib/genericpath.py`, :source:`Lib/posixpath.py` (for POSIX) and
:source:`Lib/ntpath.py` (for Windows).
.. index:: single: path; operations
@@ -85,8 +85,6 @@ the :mod:`glob` module.)
if *paths* is empty. Unlike :func:`commonprefix`, this returns a
valid path.
- .. availability:: Unix, Windows.
-
.. versionadded:: 3.5
.. versionchanged:: 3.6
@@ -324,10 +322,11 @@ the :mod:`glob` module.)
Dev Drives. See `the Windows documentation <https://learn.microsoft.com/windows/dev-drive/>`_
for information on enabling and creating Dev Drives.
- .. availability:: Windows.
-
.. versionadded:: 3.12
+ .. versionchanged:: 3.13
+ The function is now available on all platforms, and will always return ``False`` on those that have no support for Dev Drives
+
.. function:: isreserved(path)
@@ -442,8 +441,6 @@ the :mod:`glob` module.)
*start* defaults to :data:`os.curdir`.
- .. availability:: Unix, Windows.
-
.. versionchanged:: 3.6
Accepts a :term:`path-like object`.
@@ -454,8 +451,6 @@ the :mod:`glob` module.)
This is determined by the device number and i-node number and raises an
exception if an :func:`os.stat` call on either pathname fails.
- .. availability:: Unix, Windows.
-
.. versionchanged:: 3.2
Added Windows support.
@@ -470,8 +465,6 @@ the :mod:`glob` module.)
Return ``True`` if the file descriptors *fp1* and *fp2* refer to the same file.
- .. availability:: Unix, Windows.
-
.. versionchanged:: 3.2
Added Windows support.
@@ -486,8 +479,6 @@ the :mod:`glob` module.)
:func:`os.lstat`, or :func:`os.stat`. This function implements the
underlying comparison used by :func:`samefile` and :func:`sameopenfile`.
- .. availability:: Unix, Windows.
-
.. versionchanged:: 3.4
Added Windows support.
diff --git a/Lib/genericpath.py b/Lib/genericpath.py
index 1bd5b38..ba7b0a1 100644
--- a/Lib/genericpath.py
+++ b/Lib/genericpath.py
@@ -7,8 +7,8 @@ import os
import stat
__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime',
- 'getsize', 'isdir', 'isfile', 'islink', 'samefile', 'sameopenfile',
- 'samestat']
+ 'getsize', 'isdevdrive', 'isdir', 'isfile', 'isjunction', 'islink',
+ 'lexists', 'samefile', 'sameopenfile', 'samestat']
# Does a path exist?
@@ -22,6 +22,15 @@ def exists(path):
return True
+# Being true for dangling symbolic links is also useful.
+def lexists(path):
+ """Test whether a path exists. Returns True for broken symbolic links"""
+ try:
+ os.lstat(path)
+ except (OSError, ValueError):
+ return False
+ return True
+
# This follows symbolic links, so both islink() and isdir() can be true
# for the same path on systems that support symlinks
def isfile(path):
@@ -57,6 +66,21 @@ def islink(path):
return stat.S_ISLNK(st.st_mode)
+# Is a path a junction?
+def isjunction(path):
+ """Test whether a path is a junction
+ Junctions are not supported on the current platform"""
+ os.fspath(path)
+ return False
+
+
+def isdevdrive(path):
+ """Determines whether the specified path is on a Windows Dev Drive.
+ Dev Drives are not supported on the current platform"""
+ os.fspath(path)
+ return False
+
+
def getsize(filename):
"""Return the size of a file, reported by os.stat()."""
return os.stat(filename).st_size
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index e7cbfe1..f1c48ec 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -29,7 +29,8 @@ __all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext"
"ismount","isreserved","expanduser","expandvars","normpath",
"abspath","curdir","pardir","sep","pathsep","defpath","altsep",
"extsep","devnull","realpath","supports_unicode_filenames","relpath",
- "samefile", "sameopenfile", "samestat", "commonpath", "isjunction"]
+ "samefile", "sameopenfile", "samestat", "commonpath", "isjunction",
+ "isdevdrive"]
def _get_bothseps(path):
if isinstance(path, bytes):
@@ -280,21 +281,9 @@ if hasattr(os.stat_result, 'st_reparse_tag'):
return False
return bool(st.st_reparse_tag == stat.IO_REPARSE_TAG_MOUNT_POINT)
else:
- def isjunction(path):
- """Test whether a path is a junction"""
- os.fspath(path)
- return False
-
-
-# Being true for dangling symbolic links is also useful.
+ # Use genericpath.isjunction as imported above
+ pass
-def lexists(path):
- """Test whether a path exists. Returns True for broken symbolic links"""
- try:
- st = os.lstat(path)
- except (OSError, ValueError):
- return False
- return True
# Is a path a mount point?
# Any drive letter root (eg c:\)
@@ -916,15 +905,12 @@ except ImportError:
try:
from nt import _path_isdevdrive
-except ImportError:
- def isdevdrive(path):
- """Determines whether the specified path is on a Windows Dev Drive."""
- # Never a Dev Drive
- return False
-else:
def isdevdrive(path):
"""Determines whether the specified path is on a Windows Dev Drive."""
try:
return _path_isdevdrive(abspath(path))
except OSError:
return False
+except ImportError:
+ # Use genericpath.isdevdrive as imported above
+ pass
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 33943b4..4fc02be 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -35,7 +35,7 @@ __all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext"
"samefile","sameopenfile","samestat",
"curdir","pardir","sep","pathsep","defpath","altsep","extsep",
"devnull","realpath","supports_unicode_filenames","relpath",
- "commonpath", "isjunction"]
+ "commonpath", "isjunction","isdevdrive"]
def _get_sep(path):
@@ -187,26 +187,6 @@ def dirname(p):
return head
-# Is a path a junction?
-
-def isjunction(path):
- """Test whether a path is a junction
- Junctions are not a part of posix semantics"""
- os.fspath(path)
- return False
-
-
-# Being true for dangling symbolic links is also useful.
-
-def lexists(path):
- """Test whether a path exists. Returns True for broken symbolic links"""
- try:
- os.lstat(path)
- except (OSError, ValueError):
- return False
- return True
-
-
# Is a path a mount point?
# (Does this work for all UNIXes? Is it even guaranteed to work by Posix?)
diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-03-21-09-57-57.gh-issue-117114.Qu-p55.rst b/Misc/NEWS.d/next/Core and Builtins/2024-03-21-09-57-57.gh-issue-117114.Qu-p55.rst
new file mode 100644
index 0000000..c9c028a
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2024-03-21-09-57-57.gh-issue-117114.Qu-p55.rst
@@ -0,0 +1 @@
+Make :func:`os.path.isdevdrive` available on all platforms. For those that do not offer Dev Drives, it will always return ``False``.