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

Added in version 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 у разі помилки.