Browse Source

issue27186: add PathLike ABC

pull/9921/head
Ethan Furman 10 years ago
parent
commit
958b3e4058
  1. 17
      Lib/os.py
  2. 2
      Lib/test/test_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__')

2
Lib/test/test_os.py

@ -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…
Cancel
Save