Документация Python неофициальный перевод

Объекты контекстных переменныхContext Variables Objects

Новое в версии 3.7.

Изменено в версии 3.7.1:

Примечание

В Python 3.7.1 сигнатуры всех C API контекстных переменных были изменены, чтобы использовать указатели PyObject вместо PyContext, PyContextVar и PyContextToken, например:

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

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

См. bpo-34762 для подробностей.

В этом разделе описывается публичный C API для модуля contextvars.

type PyContext

Структура C, используемая для представления объекта contextvars.Context.

type PyContextVar

Структура C, используемая для представления объекта contextvars.ContextVar.

type PyContextToken

Структура C, используемая для представления объекта contextvars.Token.

PyTypeObject PyContext_Type

Объект типа, представляющий тип контекст.

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)
Возвращаемое значение: новая ссылка.

Создаёт новый пустой объект контекста. Возвращает NULL, если произошла ошибка.

PyObject *PyContext_Copy(PyObject *ctx)
Возвращаемое значение: новая ссылка.

Создаёт поверхностную копию переданного объекта контекста ctx. Возвращает NULL, если произошла ошибка.

PyObject *PyContext_CopyCurrent(void)
Возвращаемое значение: новая ссылка.

Создаёт поверхностную копию контекста текущего потока. Возвращает 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)
Возвращаемое значение: новая ссылка.

Создаёт новый объект ContextVar. Параметр name используется для интроспекции и отладки. Параметр def задаёт значение по умолчанию для контекстной переменной или NULL, если значение не требуется. Если произошла ошибка, эта функция возвращает NULL.

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

Получает значение контекстной переменной. Возвращает -1, если при поиске произошла ошибка, и 0, если ошибки не было, независимо от того, было ли найдено значение.

Если контекстная переменная найдена, value будет указателем на неё. Если контекстная переменная не найдена, value будет указывать на:

  • default_value, если не NULL;

  • значение по умолчанию var, если не NULL;

  • NULL

За исключением NULL, функция возвращает новую ссылку.

PyObject *PyContextVar_Set(PyObject *var, PyObject *value)
Возвращаемое значение: новая ссылка.

Устанавливает значение var равным value в текущем контексте. Возвращает новый объект токена для этого изменения или NULL, если произошла ошибка.

int PyContextVar_Reset(PyObject *var, PyObject *token)

Сбрасывает состояние контекстной переменной var к тому, в котором она была до вызова PyContextVar_Set(), вернувшего token. Эта функция возвращает 0 в случае успеха и -1 в случае ошибки.