gh-126451: Register contextvars.Context to collections.abc.Mapping (#126452)

Co-authored-by: sobolevn <mail@sobolevn.me>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
This commit is contained in:
Stephen Morton 2024-11-06 14:12:45 -08:00 committed by GitHub
parent b9082958ef
commit 5dc36dc565
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 0 deletions

View File

@ -1,4 +1,8 @@
import _collections_abc
from _contextvars import Context, ContextVar, Token, copy_context from _contextvars import Context, ContextVar, Token, copy_context
__all__ = ('Context', 'ContextVar', 'Token', 'copy_context') __all__ = ('Context', 'ContextVar', 'Token', 'copy_context')
_collections_abc.Mapping.register(Context)

View File

@ -1,3 +1,4 @@
import collections.abc
import concurrent.futures import concurrent.futures
import contextvars import contextvars
import functools import functools
@ -350,6 +351,19 @@ class ContextTest(unittest.TestCase):
ctx1.run(ctx1_fun) ctx1.run(ctx1_fun)
def test_context_isinstance(self):
ctx = contextvars.Context()
self.assertIsInstance(ctx, collections.abc.Mapping)
self.assertTrue(issubclass(contextvars.Context, collections.abc.Mapping))
mapping_methods = (
'__contains__', '__eq__', '__getitem__', '__iter__', '__len__',
'__ne__', 'get', 'items', 'keys', 'values',
)
for name in mapping_methods:
with self.subTest(name=name):
self.assertTrue(callable(getattr(ctx, name)))
@isolated_context @isolated_context
@threading_helper.requires_working_threading() @threading_helper.requires_working_threading()
def test_context_threads_1(self): def test_context_threads_1(self):

View File

@ -0,0 +1,2 @@
Register the :class:`contextvars.Context` type to
:class:`collections.abc.Mapping`.