issue27186: add PathLike ABC

This commit is contained in:
Ethan Furman 2016-06-04 12:49:35 -07:00
parent 8bc9378c98
commit 958b3e4058
2 changed files with 18 additions and 1 deletions

View File

@ -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__')

View File

@ -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', (), {})