mirror of https://github.com/python/cpython
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 sys, errno
|
||||||
import stat as st
|
import stat as st
|
||||||
|
|
||||||
|
@ -1125,3 +1125,18 @@ if not _exists('fspath'):
|
||||||
|
|
||||||
raise TypeError("expected str, bytes or os.PathLike object, not "
|
raise TypeError("expected str, bytes or os.PathLike object, not "
|
||||||
+ path_type.__name__)
|
+ 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'
|
return '#feelthegil'
|
||||||
|
|
||||||
self.assertEqual('#feelthegil', os.fspath(PathLike()))
|
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):
|
def test_garbage_in_exception_out(self):
|
||||||
vapor = type('blah', (), {})
|
vapor = type('blah', (), {})
|
||||||
|
|
Loading…
Reference in New Issue