From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 24 May 2023 09:05:34 +0000 (-0700) Subject: [3.12] gh-104797: Allow Protocols to inherit from collections.abc.Buffer (GH-104827... X-Git-Tag: v3.12.0b2~104 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d10d1e3b10737a8426f92221e2788e40ad05b4e0;p=thirdparty%2FPython%2Fcpython.git [3.12] gh-104797: Allow Protocols to inherit from collections.abc.Buffer (GH-104827) (#104841) gh-104797: Allow Protocols to inherit from collections.abc.Buffer (GH-104827) (cherry picked from commit c0ab7d401c736c37bf4462eef7c7d69fef8fab93) Co-authored-by: Jelle Zijlstra --- diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 9a3e64289ee8..a3fad6f35e71 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -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): diff --git a/Lib/typing.py b/Lib/typing.py index 96393d6a0281..88837db4b744 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1745,7 +1745,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 index 000000000000..60c9a0601cdc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-05-23-17-43-52.gh-issue-104797.NR7KzF.rst @@ -0,0 +1,2 @@ +Allow :class:`typing.Protocol` classes to inherit from +:class:`collections.abc.Buffer`. Patch by Jelle Zijlstra.