# Objetos de variables de contexto

Nota

Distinto en la versión 3.7.1:

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.

Nuevo en la versión 3.7.

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

`PyContext`

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

`PyContextVar`

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

`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 tiene éxito.

int `PyContextVar_CheckExact`(PyObject *o)

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

int `PyContextToken_CheckExact`(PyObject *o)

  Retorna verdadero si o es de tipo `PyContextToken_Type`. o no debe ser `NULL`. Esta función siempre tiene é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.

int `PyContext_ClearFreeList`()

  Borra la lista libre de variables de contexto. Retorna el número total de artículos liberados. Esta función siempre tiene éxito.

Funciones variables de contexto:

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, or `NULL` for no default. If an error has occurred, this function returns `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`

  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)

  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.