gh-142119: Clarify context manager protocol documentation on ContextVar.set and Token (GH-143694)

This commit is contained in:
Bartosz Sławecki 2026-01-26 16:50:27 +01:00 committed by GitHub
parent 19de10d3d8
commit 04d497c284
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -77,6 +77,32 @@ Context Variables
to restore the variable to its previous value via the
:meth:`ContextVar.reset` method.
For convenience, the token object can be used as a context manager
to avoid calling :meth:`ContextVar.reset` manually::
var = ContextVar('var', default='default value')
with var.set('new value'):
assert var.get() == 'new value'
assert var.get() == 'default value'
It is a shorthand for::
var = ContextVar('var', default='default value')
token = var.set('new value')
try:
assert var.get() == 'new value'
finally:
var.reset(token)
assert var.get() == 'default value'
.. versionadded:: 3.14
Added support for using tokens as context managers.
.. method:: reset(token)
Reset the context variable to the value it had before the
@ -101,16 +127,8 @@ Context Variables
the value of the variable to what it was before the corresponding
*set*.
The token supports :ref:`context manager protocol <context-managers>`
to restore the corresponding context variable value at the exit from
:keyword:`with` block::
var = ContextVar('var', default='default value')
with var.set('new value'):
assert var.get() == 'new value'
assert var.get() == 'default value'
Tokens support the :ref:`context manager protocol <context-managers>`
to automatically reset context variables. See :meth:`ContextVar.set`.
.. versionadded:: 3.14