summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2022-01-23 14:48:43 (GMT)
committerGitHub <noreply@github.com>2022-01-23 14:48:43 (GMT)
commit1f715d5bd3bc9ff444e109b6bbd13011913681b1 (patch)
tree48d57d3cc7d95115bb895b1f59fd727409deaeae
parentc7f20f1cc8c20654e5d539552604362feb9b0512 (diff)
downloadcpython-1f715d5bd3bc9ff444e109b6bbd13011913681b1.zip
cpython-1f715d5bd3bc9ff444e109b6bbd13011913681b1.tar.gz
cpython-1f715d5bd3bc9ff444e109b6bbd13011913681b1.tar.bz2
bpo-46483: change `PurePath.__class_getitem__` to return `GenericAlias` (GH-30822)
-rw-r--r--Lib/pathlib.py4
-rw-r--r--Lib/test/test_pathlib.py12
-rw-r--r--Misc/NEWS.d/next/Library/2022-01-23-11-17-48.bpo-46483.j7qwWb.rst2
3 files changed, 13 insertions, 5 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index 04b321b..d42ee4d 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -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.""")
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index 555c7ee..1bf2112 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -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),
diff --git a/Misc/NEWS.d/next/Library/2022-01-23-11-17-48.bpo-46483.j7qwWb.rst b/Misc/NEWS.d/next/Library/2022-01-23-11-17-48.bpo-46483.j7qwWb.rst
new file mode 100644
index 0000000..a84503d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-01-23-11-17-48.bpo-46483.j7qwWb.rst
@@ -0,0 +1,2 @@
+Change :meth:`pathlib.PurePath.__class_getitem__` to return
+:class:`types.GenericAlias`.