diff options
author | Ethan Furman <ethan@stoneleaf.us> | 2016-06-04 19:49:35 (GMT) |
---|---|---|
committer | Ethan Furman <ethan@stoneleaf.us> | 2016-06-04 19:49:35 (GMT) |
commit | 958b3e40581af8577c7213992d502786f87ec173 (patch) | |
tree | 56c5f576f464209721f45478a2fbca42e1ec2e87 /Lib | |
parent | 8bc9378c98e0dab872e41c59e1cb00c0fab1a146 (diff) | |
download | cpython-958b3e40581af8577c7213992d502786f87ec173.zip cpython-958b3e40581af8577c7213992d502786f87ec173.tar.gz cpython-958b3e40581af8577c7213992d502786f87ec173.tar.bz2 |
issue27186: add PathLike ABC
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/os.py | 17 | ||||
-rw-r--r-- | Lib/test/test_os.py | 2 |
2 files changed, 18 insertions, 1 deletions
@@ -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__') diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index bf06438..e740edf 100644 --- a/Lib/test/test_os.py +++ b/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', (), {}) |