mirror of https://github.com/python/cpython
gh-117114: Make os.path.isdevdrive available on all platforms (GH-117115)
This commit is contained in:
parent
c2276176d5
commit
0821923aa9
|
@ -4,7 +4,7 @@
|
||||||
.. module:: os.path
|
.. module:: os.path
|
||||||
:synopsis: Operations on pathnames.
|
: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).
|
:source:`Lib/ntpath.py` (for Windows).
|
||||||
|
|
||||||
.. index:: single: path; operations
|
.. index:: single: path; operations
|
||||||
|
@ -85,8 +85,6 @@ the :mod:`glob` module.)
|
||||||
if *paths* is empty. Unlike :func:`commonprefix`, this returns a
|
if *paths* is empty. Unlike :func:`commonprefix`, this returns a
|
||||||
valid path.
|
valid path.
|
||||||
|
|
||||||
.. availability:: Unix, Windows.
|
|
||||||
|
|
||||||
.. versionadded:: 3.5
|
.. versionadded:: 3.5
|
||||||
|
|
||||||
.. versionchanged:: 3.6
|
.. versionchanged:: 3.6
|
||||||
|
@ -324,10 +322,11 @@ the :mod:`glob` module.)
|
||||||
Dev Drives. See `the Windows documentation <https://learn.microsoft.com/windows/dev-drive/>`_
|
Dev Drives. See `the Windows documentation <https://learn.microsoft.com/windows/dev-drive/>`_
|
||||||
for information on enabling and creating Dev Drives.
|
for information on enabling and creating Dev Drives.
|
||||||
|
|
||||||
.. availability:: Windows.
|
|
||||||
|
|
||||||
.. versionadded:: 3.12
|
.. 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)
|
.. function:: isreserved(path)
|
||||||
|
|
||||||
|
@ -442,8 +441,6 @@ the :mod:`glob` module.)
|
||||||
|
|
||||||
*start* defaults to :data:`os.curdir`.
|
*start* defaults to :data:`os.curdir`.
|
||||||
|
|
||||||
.. availability:: Unix, Windows.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.6
|
.. versionchanged:: 3.6
|
||||||
Accepts a :term:`path-like object`.
|
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
|
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.
|
exception if an :func:`os.stat` call on either pathname fails.
|
||||||
|
|
||||||
.. availability:: Unix, Windows.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.2
|
.. versionchanged:: 3.2
|
||||||
Added Windows support.
|
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.
|
Return ``True`` if the file descriptors *fp1* and *fp2* refer to the same file.
|
||||||
|
|
||||||
.. availability:: Unix, Windows.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.2
|
.. versionchanged:: 3.2
|
||||||
Added Windows support.
|
Added Windows support.
|
||||||
|
|
||||||
|
@ -486,8 +479,6 @@ the :mod:`glob` module.)
|
||||||
:func:`os.lstat`, or :func:`os.stat`. This function implements the
|
:func:`os.lstat`, or :func:`os.stat`. This function implements the
|
||||||
underlying comparison used by :func:`samefile` and :func:`sameopenfile`.
|
underlying comparison used by :func:`samefile` and :func:`sameopenfile`.
|
||||||
|
|
||||||
.. availability:: Unix, Windows.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.4
|
.. versionchanged:: 3.4
|
||||||
Added Windows support.
|
Added Windows support.
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ import os
|
||||||
import stat
|
import stat
|
||||||
|
|
||||||
__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime',
|
__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime',
|
||||||
'getsize', 'isdir', 'isfile', 'islink', 'samefile', 'sameopenfile',
|
'getsize', 'isdevdrive', 'isdir', 'isfile', 'isjunction', 'islink',
|
||||||
'samestat']
|
'lexists', 'samefile', 'sameopenfile', 'samestat']
|
||||||
|
|
||||||
|
|
||||||
# Does a path exist?
|
# Does a path exist?
|
||||||
|
@ -22,6 +22,15 @@ def exists(path):
|
||||||
return True
|
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
|
# This follows symbolic links, so both islink() and isdir() can be true
|
||||||
# for the same path on systems that support symlinks
|
# for the same path on systems that support symlinks
|
||||||
def isfile(path):
|
def isfile(path):
|
||||||
|
@ -57,6 +66,21 @@ def islink(path):
|
||||||
return stat.S_ISLNK(st.st_mode)
|
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):
|
def getsize(filename):
|
||||||
"""Return the size of a file, reported by os.stat()."""
|
"""Return the size of a file, reported by os.stat()."""
|
||||||
return os.stat(filename).st_size
|
return os.stat(filename).st_size
|
||||||
|
|
|
@ -29,7 +29,8 @@ __all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext"
|
||||||
"ismount","isreserved","expanduser","expandvars","normpath",
|
"ismount","isreserved","expanduser","expandvars","normpath",
|
||||||
"abspath","curdir","pardir","sep","pathsep","defpath","altsep",
|
"abspath","curdir","pardir","sep","pathsep","defpath","altsep",
|
||||||
"extsep","devnull","realpath","supports_unicode_filenames","relpath",
|
"extsep","devnull","realpath","supports_unicode_filenames","relpath",
|
||||||
"samefile", "sameopenfile", "samestat", "commonpath", "isjunction"]
|
"samefile", "sameopenfile", "samestat", "commonpath", "isjunction",
|
||||||
|
"isdevdrive"]
|
||||||
|
|
||||||
def _get_bothseps(path):
|
def _get_bothseps(path):
|
||||||
if isinstance(path, bytes):
|
if isinstance(path, bytes):
|
||||||
|
@ -280,22 +281,10 @@ if hasattr(os.stat_result, 'st_reparse_tag'):
|
||||||
return False
|
return False
|
||||||
return bool(st.st_reparse_tag == stat.IO_REPARSE_TAG_MOUNT_POINT)
|
return bool(st.st_reparse_tag == stat.IO_REPARSE_TAG_MOUNT_POINT)
|
||||||
else:
|
else:
|
||||||
def isjunction(path):
|
# Use genericpath.isjunction as imported above
|
||||||
"""Test whether a path is a junction"""
|
pass
|
||||||
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:
|
|
||||||
st = os.lstat(path)
|
|
||||||
except (OSError, ValueError):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Is a path a mount point?
|
# Is a path a mount point?
|
||||||
# Any drive letter root (eg c:\)
|
# Any drive letter root (eg c:\)
|
||||||
# Any share UNC (eg \\server\share)
|
# Any share UNC (eg \\server\share)
|
||||||
|
@ -916,15 +905,12 @@ except ImportError:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from nt import _path_isdevdrive
|
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):
|
def isdevdrive(path):
|
||||||
"""Determines whether the specified path is on a Windows Dev Drive."""
|
"""Determines whether the specified path is on a Windows Dev Drive."""
|
||||||
try:
|
try:
|
||||||
return _path_isdevdrive(abspath(path))
|
return _path_isdevdrive(abspath(path))
|
||||||
except OSError:
|
except OSError:
|
||||||
return False
|
return False
|
||||||
|
except ImportError:
|
||||||
|
# Use genericpath.isdevdrive as imported above
|
||||||
|
pass
|
||||||
|
|
|
@ -35,7 +35,7 @@ __all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext"
|
||||||
"samefile","sameopenfile","samestat",
|
"samefile","sameopenfile","samestat",
|
||||||
"curdir","pardir","sep","pathsep","defpath","altsep","extsep",
|
"curdir","pardir","sep","pathsep","defpath","altsep","extsep",
|
||||||
"devnull","realpath","supports_unicode_filenames","relpath",
|
"devnull","realpath","supports_unicode_filenames","relpath",
|
||||||
"commonpath", "isjunction"]
|
"commonpath", "isjunction","isdevdrive"]
|
||||||
|
|
||||||
|
|
||||||
def _get_sep(path):
|
def _get_sep(path):
|
||||||
|
@ -187,26 +187,6 @@ def dirname(p):
|
||||||
return head
|
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?
|
# Is a path a mount point?
|
||||||
# (Does this work for all UNIXes? Is it even guaranteed to work by Posix?)
|
# (Does this work for all UNIXes? Is it even guaranteed to work by Posix?)
|
||||||
|
|
||||||
|
|
|
@ -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``.
|
Loading…
Reference in New Issue