bpo-46483: change `PurePath.__class_getitem__` to return `GenericAlias` (GH-30822)

This commit is contained in:
Nikita Sobolev 2022-01-23 17:48:43 +03:00 committed by GitHub
parent c7f20f1cc8
commit 1f715d5bd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 5 deletions

View File

@ -12,6 +12,7 @@ from errno import ENOENT, ENOTDIR, EBADF, ELOOP
from operator import attrgetter
from stat import S_ISDIR, S_ISLNK, S_ISREG, S_ISSOCK, S_ISBLK, S_ISCHR, S_ISFIFO
from urllib.parse import quote_from_bytes as urlquote_from_bytes
from types import GenericAlias
__all__ = [
@ -690,8 +691,7 @@ class PurePath(object):
return NotImplemented
return self._cparts >= other._cparts
def __class_getitem__(cls, type):
return cls
__class_getitem__ = classmethod(GenericAlias)
drive = property(attrgetter('_drv'),
doc="""The drive prefix (letter or UNC path), if any.""")

View File

@ -2429,13 +2429,19 @@ class _BasePathTest(object):
def test_complex_symlinks_relative_dot_dot(self):
self._check_complex_symlinks(os.path.join('dirA', '..'))
def test_class_getitem(self):
from types import GenericAlias
alias = self.cls[str]
self.assertIsInstance(alias, GenericAlias)
self.assertIs(alias.__origin__, self.cls)
self.assertEqual(alias.__args__, (str,))
self.assertEqual(alias.__parameters__, ())
class PathTest(_BasePathTest, unittest.TestCase):
cls = pathlib.Path
def test_class_getitem(self):
self.assertIs(self.cls[str], self.cls)
def test_concrete_class(self):
p = self.cls('a')
self.assertIs(type(p),

View File

@ -0,0 +1,2 @@
Change :meth:`pathlib.PurePath.__class_getitem__` to return
:class:`types.GenericAlias`.