]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46483: change `PurePath.__class_getitem__` to return `GenericAlias` (GH-30822)
authorNikita Sobolev <mail@sobolevn.me>
Sun, 23 Jan 2022 14:48:43 +0000 (17:48 +0300)
committerGitHub <noreply@github.com>
Sun, 23 Jan 2022 14:48:43 +0000 (17:48 +0300)
Lib/pathlib.py
Lib/test/test_pathlib.py
Misc/NEWS.d/next/Library/2022-01-23-11-17-48.bpo-46483.j7qwWb.rst [new file with mode: 0644]

index 04b321b9ccf1668e7fbc57685bc9f0b516f2c147..d42ee4dc90b431a7b9c6d40db12fc7d64f55f86f 100644 (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.""")
index 555c7ee795bd12cc73b8573dbda96abdef60428e..1bf21120a36ca1685d2d45598dd942fced04f654 100644 (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),
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 (file)
index 0000000..a84503d
--- /dev/null
@@ -0,0 +1,2 @@
+Change :meth:`pathlib.PurePath.__class_getitem__` to return
+:class:`types.GenericAlias`.