Context Variables Objects¶
Added in version 3.7.
Changed in version 3.7.1:
Note
In Python 3.7.1 the signatures of all context variables
C APIs were changed to use PyObject
pointers instead
of PyContext
, PyContextVar
, and
PyContextToken
, e.g.:
// in 3.7.0:
PyContext *PyContext_New(void);
// in 3.7.1+:
PyObject *PyContext_New(void);
See bpo-34762 for more details.
This section details the public C API for the contextvars
module.
-
type PyContext¶
The C structure used to represent a
contextvars.Context
object.
-
type PyContextVar¶
The C structure used to represent a
contextvars.ContextVar
object.
-
type PyContextToken¶
The C structure used to represent a
contextvars.Token
object.
-
PyTypeObject PyContext_Type¶
The type object representing the context type.
-
PyTypeObject PyContextVar_Type¶
The type object representing the context variable type.
-
PyTypeObject PyContextToken_Type¶
The type object representing the context variable token type.
Type-check macros:
-
int PyContext_CheckExact(PyObject *o)¶
Return true if o is of type
PyContext_Type
. o must not beNULL
. This function always succeeds.
-
int PyContextVar_CheckExact(PyObject *o)¶
Return true if o is of type
PyContextVar_Type
. o must not beNULL
. This function always succeeds.
-
int PyContextToken_CheckExact(PyObject *o)¶
Return true if o is of type
PyContextToken_Type
. o must not beNULL
. This function always succeeds.
Context object management functions:
-
PyObject *PyContext_New(void)¶
- Return value: New reference.
Create a new empty context object. Returns
NULL
if an error has occurred.
-
PyObject *PyContext_Copy(PyObject *ctx)¶
- Return value: New reference.
Create a shallow copy of the passed ctx context object. Returns
NULL
if an error has occurred.
-
PyObject *PyContext_CopyCurrent(void)¶
- Return value: New reference.
Create a shallow copy of the current thread context. Returns
NULL
if an error has occurred.
-
int PyContext_Enter(PyObject *ctx)¶
Set ctx as the current context for the current thread. Returns
0
on success, and-1
on error.
-
int PyContext_Exit(PyObject *ctx)¶
Deactivate the ctx context and restore the previous context as the current context for the current thread. Returns
0
on success, and-1
on error.
-
int PyContext_AddWatcher(PyContext_WatchCallback callback)¶
Register callback as a context object watcher for the current interpreter. Return an ID which may be passed to
PyContext_ClearWatcher()
. In case of error (e.g. no more watcher IDs available), return-1
and set an exception.Added in version 3.14.
-
int PyContext_ClearWatcher(int watcher_id)¶
Clear watcher identified by watcher_id previously returned from
PyContext_AddWatcher()
for the current interpreter. Return0
on success, or-1
and set an exception on error (e.g. if the given watcher_id was never registered.)Added in version 3.14.
-
type PyContextEvent¶
Enumeration of possible context object watcher events:
Py_CONTEXT_EVENT_ENTER
: A context has been entered, causing the current context to switch to it. The object passed to the watch callback is the now-currentcontextvars.Context
object. Each enter event will eventually have a corresponding exit event for the same context object after any subsequently entered contexts have themselves been exited.Py_CONTEXT_EVENT_EXIT
: A context is about to be exited, which will cause the current context to switch back to what it was before the context was entered. The object passed to the watch callback is the still-currentcontextvars.Context
object.
Added in version 3.14.
-
typedef void (*PyContext_WatchCallback)(PyContextEvent event, PyObject *obj)¶
Context object watcher callback function. The object passed to the callback is event-specific; see
PyContextEvent
for details.Any pending exception is cleared before the callback is called and restored after the callback returns.
If the callback raises an exception it will be printed as an unraisable exception using
PyErr_FormatUnraisable()
and discarded.Added in version 3.14.
Context variable functions:
-
PyObject *PyContextVar_New(const char *name, PyObject *def)¶
- Return value: New reference.
Create a new
ContextVar
object. The name parameter is used for introspection and debug purposes. The def parameter specifies a default value for the context variable, orNULL
for no default. If an error has occurred, this function returnsNULL
.
-
int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value)¶
Get the value of a context variable. Returns
-1
if an error has occurred during lookup, and0
if no error occurred, whether or not a value was found.If the context variable was found, value will be a pointer to it. If the context variable was not found, value will point to:
default_value, if not
NULL
;the default value of var, if not
NULL
;NULL
Except for
NULL
, the function returns a new reference.
-
PyObject *PyContextVar_Set(PyObject *var, PyObject *value)¶
- Return value: New reference.
Set the value of var to value in the current context. Returns a new token object for this change, or
NULL
if an error has occurred.
-
int PyContextVar_Reset(PyObject *var, PyObject *token)¶
Reset the state of the var context variable to that it was in before
PyContextVar_Set()
that returned the token was called. This function returns0
on success and-1
on error.