# Об’єкти змінних контексту

Примітка

Змінено в версії 3.7.1:

У Python 3.7.1 підписи всіх контекстних змінних C API були змінені на використання покажчиків `PyObject` замість `PyContext`, `PyContextVar`, і `PyContextToken`, наприклад:

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

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

Дивіться bpo-34762 для отримання додаткової інформації.

Нове в версії 3.7.

У цьому розділі детально описано публічний API C для модуля `contextvar`.

type `PyContext`

  Структура C, яка використовується для представлення об’єкта `contextvars.Context`.

type `PyContextVar`

  Структура C, яка використовується для представлення об’єкта `contextvars.ContextVar`.

type `PyContextToken`

  Структура C, яка використовується для представлення об’єкта `contextvars.Token`.

PyTypeObject `PyContext_Type`

  Об’єкт типу, що представляє тип context.

PyTypeObject `PyContextVar_Type`

  Об’єкт типу, що представляє тип контекстної змінної.

PyTypeObject `PyContextToken_Type`

  Об’єкт типу, що представляє тип токен змінної контексту.

Макроси перевірки типу:

int `PyContext_CheckExact`(PyObject *o)

  Повертає true, якщо o має тип `PyContext_Type`. o не має бути `NULL`. Ця функція завжди успішна.

int `PyContextVar_CheckExact`(PyObject *o)

  Повертає true, якщо o має тип `PyContextVar_Type`. o не має бути `NULL`. Ця функція завжди успішна.

int `PyContextToken_CheckExact`(PyObject *o)

  Повертає true, якщо o має тип `PyContextToken_Type`. o не має бути `NULL`. Ця функція завжди успішна.

Функції керування об’єктами контексту:

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

  Створіть новий порожній контекстний об’єкт. Повертає `NULL`, якщо сталася помилка.

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

  Створіть поверхневу копію переданого контекстного об’єкта ctx. Повертає `NULL`, якщо сталася помилка.

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

  Створіть поверхневу копію контексту поточного потоку. Повертає `NULL`, якщо сталася помилка.

int `PyContext_Enter`(PyObject *ctx)

  Установіть ctx як поточний контекст для поточного потоку. Повертає `0` у разі успіху та `-1` у разі помилки.

int `PyContext_Exit`(PyObject *ctx)

  Дезактивуйте контекст ctx і відновіть попередній контекст як поточний контекст для поточного потоку. Повертає `0` у разі успіху та `-1` у разі помилки.

Функції контекстної змінної:

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

  Створіть новий об’єкт `ContextVar`. Параметр name використовується для самоаналізу та налагодження. Параметр def визначає значення за замовчуванням для змінної контексту або `NULL` для відсутності замовчування. Якщо сталася помилка, ця функція повертає `NULL`.

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

  Отримати значення контекстної змінної. Повертає `-1`, якщо під час пошуку сталася помилка, і `0`, якщо помилки не сталося, незалежно від того, чи було знайдено значення.

  Якщо контекстну змінну знайдено, value буде вказівником на неї. Якщо контекстну змінну не знайдено, значення вказуватиме на:

  - default_value, якщо не `NULL`;

  - значення за замовчуванням var, якщо не `NULL`;

  - `NULL`

  За винятком `NULL`, функція повертає нове посилання.

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

  Установіть для var значення value у поточному контексті. Повертає новий об’єкт маркера для цієї зміни або `NULL`, якщо сталася помилка.

int `PyContextVar_Reset`(PyObject *var, PyObject *token)

  Скинути стан контекстної змінної var до того, у якому вона була до виклику `PyContextVar_Set()`, який повернув токен. Ця функція повертає `0` у разі успіху та `-1` у разі помилки.