Skip to content

Commit

Permalink
[3.12] gh-126451: Register contextvars.Context to collections.abc.Map…
Browse files Browse the repository at this point in the history
…ping (GH-126452) (#126519)

gh-126451: Register contextvars.Context to collections.abc.Mapping (GH-126452)
(cherry picked from commit 5dc36dc)

Co-authored-by: Stephen Morton <[email protected]>
Co-authored-by: sobolevn <[email protected]>
Co-authored-by: Alex Waygood <[email protected]>
Co-authored-by: Peter Bierma <[email protected]>
  • Loading branch information
5 people authored Nov 6, 2024
1 parent a19832b commit d71da0f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Lib/contextvars.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import _collections_abc
from _contextvars import Context, ContextVar, Token, copy_context


__all__ = ('Context', 'ContextVar', 'Token', 'copy_context')


_collections_abc.Mapping.register(Context)
14 changes: 14 additions & 0 deletions Lib/test/test_context.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import collections.abc
import concurrent.futures
import contextvars
import functools
Expand Down Expand Up @@ -342,6 +343,19 @@ def ctx2_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
@threading_helper.requires_working_threading()
def test_context_threads_1(self):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Register the :class:`contextvars.Context` type to
:class:`collections.abc.Mapping`.

0 comments on commit d71da0f

Please sign in to comment.