pep-567: More additions (#510)
* Add Token.MISSING and Token.old_value * Change the signature of PyContextVar_Reset
This commit is contained in:
parent
3b59266d43
commit
75fe7fe8b8
24
pep-0567.rst
24
pep-0567.rst
|
@ -160,8 +160,14 @@ restore the ``ContextVar`` to its previous value, or remove it from
|
|||
the context if the variable was not set before. It can be created
|
||||
only by calling ``ContextVar.set()``.
|
||||
|
||||
For debug and introspection purposes it has a read-only attribute
|
||||
``Token.var`` pointing to the variable that created the token.
|
||||
For debug and introspection purposes it has:
|
||||
|
||||
* a read-only attribute ``Token.var`` pointing to the variable
|
||||
that created the token;
|
||||
|
||||
* a read-only attribute ``Token.old_value`` set to the value the
|
||||
variable had before the ``set()`` call, or to ``Token.MISSING``
|
||||
if the variable wasn't set before.
|
||||
|
||||
Having the ``ContextVar.set()`` method returning a ``Token`` object
|
||||
and the ``ContextVar.reset(token)`` method, allows context variables
|
||||
|
@ -286,7 +292,7 @@ C API
|
|||
3. ``PyContextToken * PyContextVar_Set(PyContextVar *, PyObject *)``:
|
||||
set the value of the variable in the current context.
|
||||
|
||||
4. ``PyContextVar_Reset(PyContextToken *)``:
|
||||
4. ``PyContextVar_Reset(PyContextVar *, PyContextToken *)``:
|
||||
reset the value of the context variable.
|
||||
|
||||
5. ``PyContext * PyContext_New()``: create a new empty context.
|
||||
|
@ -414,7 +420,7 @@ points to a ``_ContextData`` object::
|
|||
try:
|
||||
old_value = data.get(self)
|
||||
except KeyError:
|
||||
old_value = _NO_VALUE
|
||||
old_value = Token.MISSING
|
||||
|
||||
ts.context_data = data.set(self, value)
|
||||
return Token(self, old_value)
|
||||
|
@ -423,7 +429,7 @@ points to a ``_ContextData`` object::
|
|||
if token._used:
|
||||
return
|
||||
|
||||
if token._old_value is _NO_VALUE:
|
||||
if token._old_value is Token.MISSING:
|
||||
ts.context_data = data.delete(token._var)
|
||||
else:
|
||||
ts.context_data = data.set(token._var,
|
||||
|
@ -434,6 +440,8 @@ points to a ``_ContextData`` object::
|
|||
|
||||
class Token:
|
||||
|
||||
MISSING = object()
|
||||
|
||||
def __init__(self, var, old_value):
|
||||
self._var = var
|
||||
self._old_value = old_value
|
||||
|
@ -443,9 +451,9 @@ points to a ``_ContextData`` object::
|
|||
def var(self):
|
||||
return self._var
|
||||
|
||||
|
||||
(The ``_NO_VALUE`` is an internal marker object that will not be
|
||||
part of the public API.)
|
||||
@property
|
||||
def old_value(self):
|
||||
return self._old_value
|
||||
|
||||
|
||||
Implementation Notes
|
||||
|
|
Loading…
Reference in New Issue