# Objetos de variables de contexto

Nuevo en la versión 3.7.

Distinto en la versión 3.7.1:

Nota

En Python 3.7.1, las firmas de todas las variables de contexto C APIs fueron cambiadas para usar punteros `PyObject` en lugar de `PyContext`, `PyContextVar`, y `PyContextToken`, por ejemplo:

    // in 3.7.0:
    PyContext *PyContext_New(void);

    // in 3.7.1+:
    PyObject *PyContext_New(void);

Ver bpo-34762 para más detalles.

Esta sección detalla la API pública de C para el módulo `contextvars`.

type PyContext

  La estructura C utilizada para representar un objeto `contextvars.Context`.

type PyContextVar

  La estructura C utilizada para representar un objeto `contextvars.ContextVar`.

type PyContextToken

  La estructura C solía representar un objeto `contextvars.Token`.

PyTypeObject PyContext_Type

  El objeto de tipo que representa el tipo context.

PyTypeObject PyContextVar_Type

  El objeto tipo que representa el tipo variable de contexto.

PyTypeObject PyContextToken_Type

  El tipo objeto que representa el tipo token de variable de contexto.

Macros de verificación de tipo:

int PyContext_CheckExact(PyObject *o)

  Retorna verdadero si o es de tipo `PyContext_Type`. o no debe ser `NULL`. Esta función siempre finaliza con éxito.

int PyContextVar_CheckExact(PyObject *o)

  Retorna verdadero si o es de tipo `PyContextVar_Type`. o no debe ser `NULL`. Esta función siempre finaliza con éxito.

int PyContextToken_CheckExact(PyObject *o)

  Retorna verdadero si o es de tipo `PyContextToken_Type`. o no debe ser `NULL`. Esta función siempre finaliza con éxito.

Funciones de gestión de objetos de contexto:

PyObject *PyContext_New(void)
  Return value: New reference.

  Crea un nuevo objeto de contexto vacío. Retorna `NULL` si se ha producido un error.

PyObject *PyContext_Copy(PyObject *ctx)
  Return value: New reference.

  Crea una copia superficial del objeto de contexto ctx pasado. Retorna `NULL` si se ha producido un error.

PyObject *PyContext_CopyCurrent(void)
  Return value: New reference.

  Crea una copia superficial del contexto actual del hilo. Retorna `NULL` si se ha producido un error.

int PyContext_Enter(PyObject *ctx)

  Establece ctx como el contexto actual para el hilo actual. Retorna `0` en caso de éxito y `-1` en caso de error.

int PyContext_Exit(PyObject *ctx)

  Desactiva el contexto ctx y restaura el contexto anterior como el contexto actual para el hilo actual. Retorna `0` en caso de éxito y `-1` en caso de error.

Funciones variables de contexto:

PyObject *PyContextVar_New(const char *name, PyObject *def)
  Return value: New reference.

  Crea un nuevo objeto `ContextVar`. El parámetro name se usa para propósitos de introspección y depuración. El parámetro def especifica el valor predeterminado para la variable de contexto, o `NULL` para no especificar un valor predeterminado. Si se ha producido un error, esta función retorna `NULL`.

int PyContextVar_Get(PyObject *var, PyObject *default_value, PyObject **value)

  Obtiene el valor de una variable de contexto. Retorna `-1` si se produjo un error durante la búsqueda y `0` si no se produjo ningún error, se haya encontrado o no un valor.

  Si se encontró la variable de contexto, value será un puntero a ella. Si la variable de contexto not se encontró, value apuntará a:

  - default_value, si no es `NULL`;

  - el valor predeterminado de var, si no es `NULL`;

  - `NULL`

  A excepción de `NULL`, la función retorna una nueva referencia.

PyObject *PyContextVar_Set(PyObject *var, PyObject *value)
  Return value: New reference.

  Establece el valor de var en value en el contexto actual. Retorna un nuevo objeto token para este cambio, o `NULL` si se ha producido un error.

int PyContextVar_Reset(PyObject *var, PyObject *token)

  Restablece el estado de la variable de contexto var a la que estaba antes `PyContextVar_Set()` que retornó el token fue llamado. Esta función retorna `0` en caso de éxito y `-1` en caso de error.