17db96d56Sopenharmony_ci.. highlight:: c
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci.. _contextvarsobjects:
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciContext Variables Objects
67db96d56Sopenharmony_ci-------------------------
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci.. _contextvarsobjects_pointertype_change:
97db96d56Sopenharmony_ci.. versionchanged:: 3.7.1
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci   .. note::
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci      In Python 3.7.1 the signatures of all context variables
147db96d56Sopenharmony_ci      C APIs were **changed** to use :c:type:`PyObject` pointers instead
157db96d56Sopenharmony_ci      of :c:type:`PyContext`, :c:type:`PyContextVar`, and
167db96d56Sopenharmony_ci      :c:type:`PyContextToken`, e.g.::
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci         // in 3.7.0:
197db96d56Sopenharmony_ci         PyContext *PyContext_New(void);
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci         // in 3.7.1+:
227db96d56Sopenharmony_ci         PyObject *PyContext_New(void);
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci      See :issue:`34762` for more details.
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci.. versionadded:: 3.7
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ciThis section details the public C API for the :mod:`contextvars` module.
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci.. c:type:: PyContext
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   The C structure used to represent a :class:`contextvars.Context`
347db96d56Sopenharmony_ci   object.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci.. c:type:: PyContextVar
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   The C structure used to represent a :class:`contextvars.ContextVar`
397db96d56Sopenharmony_ci   object.
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci.. c:type:: PyContextToken
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci   The C structure used to represent a :class:`contextvars.Token` object.
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci.. c:var:: PyTypeObject PyContext_Type
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci   The type object representing the *context* type.
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci.. c:var:: PyTypeObject PyContextVar_Type
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci   The type object representing the *context variable* type.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci.. c:var:: PyTypeObject PyContextToken_Type
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci   The type object representing the *context variable token* type.
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ciType-check macros:
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci.. c:function:: int PyContext_CheckExact(PyObject *o)
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci   Return true if *o* is of type :c:data:`PyContext_Type`. *o* must not be
637db96d56Sopenharmony_ci   ``NULL``.  This function always succeeds.
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci.. c:function:: int PyContextVar_CheckExact(PyObject *o)
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci   Return true if *o* is of type :c:data:`PyContextVar_Type`. *o* must not be
687db96d56Sopenharmony_ci   ``NULL``.  This function always succeeds.
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci.. c:function:: int PyContextToken_CheckExact(PyObject *o)
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci   Return true if *o* is of type :c:data:`PyContextToken_Type`.
737db96d56Sopenharmony_ci   *o* must not be ``NULL``.  This function always succeeds.
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ciContext object management functions:
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci.. c:function:: PyObject *PyContext_New(void)
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   Create a new empty context object.  Returns ``NULL`` if an error
817db96d56Sopenharmony_ci   has occurred.
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci.. c:function:: PyObject *PyContext_Copy(PyObject *ctx)
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci   Create a shallow copy of the passed *ctx* context object.
867db96d56Sopenharmony_ci   Returns ``NULL`` if an error has occurred.
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci.. c:function:: PyObject *PyContext_CopyCurrent(void)
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   Create a shallow copy of the current thread context.
917db96d56Sopenharmony_ci   Returns ``NULL`` if an error has occurred.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci.. c:function:: int PyContext_Enter(PyObject *ctx)
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci   Set *ctx* as the current context for the current thread.
967db96d56Sopenharmony_ci   Returns ``0`` on success, and ``-1`` on error.
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci.. c:function:: int PyContext_Exit(PyObject *ctx)
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   Deactivate the *ctx* context and restore the previous context as the
1017db96d56Sopenharmony_ci   current context for the current thread.  Returns ``0`` on success,
1027db96d56Sopenharmony_ci   and ``-1`` on error.
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ciContext variable functions:
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci.. c:function:: PyObject *PyContextVar_New(const char *name, PyObject *def)
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci   Create a new ``ContextVar`` object.  The *name* parameter is used
1107db96d56Sopenharmony_ci   for introspection and debug purposes.  The *def* parameter specifies
1117db96d56Sopenharmony_ci   a default value for the context variable, or ``NULL`` for no default.
1127db96d56Sopenharmony_ci   If an error has occurred, this function returns ``NULL``.
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci.. c:function:: int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value)
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci   Get the value of a context variable.  Returns ``-1`` if an error has
1177db96d56Sopenharmony_ci   occurred during lookup, and ``0`` if no error occurred, whether or not
1187db96d56Sopenharmony_ci   a value was found.
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci   If the context variable was found, *value* will be a pointer to it.
1217db96d56Sopenharmony_ci   If the context variable was *not* found, *value* will point to:
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci   - *default_value*, if not ``NULL``;
1247db96d56Sopenharmony_ci   - the default value of *var*, if not ``NULL``;
1257db96d56Sopenharmony_ci   - ``NULL``
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci   Except for ``NULL``, the function returns a new reference.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci.. c:function:: PyObject *PyContextVar_Set(PyObject *var, PyObject *value)
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   Set the value of *var* to *value* in the current context.  Returns
1327db96d56Sopenharmony_ci   a new token object for this change, or ``NULL`` if an error has occurred.
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci.. c:function:: int PyContextVar_Reset(PyObject *var, PyObject *token)
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci   Reset the state of the *var* context variable to that it was in before
1377db96d56Sopenharmony_ci   :c:func:`PyContextVar_Set` that returned the *token* was called.
1387db96d56Sopenharmony_ci   This function returns ``0`` on success and ``-1`` on error.
139