issue27186: add PathLike ABC
This commit is contained in:
parent
8bc9378c98
commit
958b3e4058
17
Lib/os.py
17
Lib/os.py
|
@ -22,7 +22,7 @@ and opendir), and leave all pathname manipulation to os.path
|
|||
"""
|
||||
|
||||
#'
|
||||
|
||||
import abc
|
||||
import sys, errno
|
||||
import stat as st
|
||||
|
||||
|
@ -1125,3 +1125,18 @@ if not _exists('fspath'):
|
|||
|
||||
raise TypeError("expected str, bytes or os.PathLike object, not "
|
||||
+ path_type.__name__)
|
||||
|
||||
class PathLike(abc.ABC):
|
||||
"""
|
||||
Abstract base class for implementing the file system path protocol.
|
||||
"""
|
||||
@abc.abstractmethod
|
||||
def __fspath__(self):
|
||||
"""
|
||||
Return the file system path representation of the object.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@classmethod
|
||||
def __subclasshook__(cls, subclass):
|
||||
return hasattr(subclass, '__fspath__')
|
||||
|
|
|
@ -3127,6 +3127,8 @@ class TestPEP519(unittest.TestCase):
|
|||
return '#feelthegil'
|
||||
|
||||
self.assertEqual('#feelthegil', os.fspath(PathLike()))
|
||||
self.assertTrue(issubclass(PathLike, os.PathLike))
|
||||
self.assertTrue(isinstance(PathLike(), os.PathLike))
|
||||
|
||||
def test_garbage_in_exception_out(self):
|
||||
vapor = type('blah', (), {})
|
||||
|
|
Loading…
Reference in New Issue