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

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

Змінено в версії 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 для отримання додаткової інформації.

У цьому розділі детально описано публічний 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` у разі помилки.