]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-104797: Allow Protocols to inherit from collections.abc.Buffer (#104827)
authorJelle Zijlstra <jelle.zijlstra@gmail.com>
Wed, 24 May 2023 08:24:53 +0000 (01:24 -0700)
committerGitHub <noreply@github.com>
Wed, 24 May 2023 08:24:53 +0000 (08:24 +0000)
Lib/test/test_typing.py
Lib/typing.py
Misc/NEWS.d/next/Library/2023-05-23-17-43-52.gh-issue-104797.NR7KzF.rst [new file with mode: 0644]

index b4a5a68a2f7e4e5f739305979d013a1bd4524fb2..098933b7cb434f9e05f0414c391065b2fcd7c63e 100644 (file)
@@ -3546,6 +3546,22 @@ class ProtocolTests(BaseTestCase):
         self.assertIsSubclass(B, Custom)
         self.assertNotIsSubclass(A, Custom)
 
+        @runtime_checkable
+        class ReleasableBuffer(collections.abc.Buffer, Protocol):
+            def __release_buffer__(self, mv: memoryview) -> None: ...
+
+        class C: pass
+        class D:
+            def __buffer__(self, flags: int) -> memoryview:
+                return memoryview(b'')
+            def __release_buffer__(self, mv: memoryview) -> None:
+                pass
+
+        self.assertIsSubclass(D, ReleasableBuffer)
+        self.assertIsInstance(D(), ReleasableBuffer)
+        self.assertNotIsSubclass(C, ReleasableBuffer)
+        self.assertNotIsInstance(C(), ReleasableBuffer)
+
     def test_builtin_protocol_allowlist(self):
         with self.assertRaises(TypeError):
             class CustomProtocol(TestCase, Protocol):
index 95dbc0b85bcddf8c9dec08e1a8b54a1a9d810a28..b32ff0c6ba4e25be0fc3757f6089df3a630d65e5 100644 (file)
@@ -1740,7 +1740,7 @@ def _allow_reckless_class_checks(depth=3):
 _PROTO_ALLOWLIST = {
     'collections.abc': [
         'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable',
-        'Hashable', 'Sized', 'Container', 'Collection', 'Reversible',
+        'Hashable', 'Sized', 'Container', 'Collection', 'Reversible', 'Buffer',
     ],
     'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'],
 }
diff --git a/Misc/NEWS.d/next/Library/2023-05-23-17-43-52.gh-issue-104797.NR7KzF.rst b/Misc/NEWS.d/next/Library/2023-05-23-17-43-52.gh-issue-104797.NR7KzF.rst
new file mode 100644 (file)
index 0000000..60c9a06
--- /dev/null
@@ -0,0 +1,2 @@
+Allow :class:`typing.Protocol` classes to inherit from
+:class:`collections.abc.Buffer`. Patch by Jelle Zijlstra.