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

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

Примечание

Изменено в версии 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 для подробностей.

Добавлено в версии 3.7.

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

PyContext

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

PyContextVar

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

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 в случае ошибки.

int PyContext_ClearFreeList()

Очищает список свободных контекстных переменных. Возвращает общее количество освобождённых элементов. Эта функция всегда завершается успешно.

Функции контекстных переменных:

PyObject *PyContextVar_New(const char *name, PyObject *def)
Возвращаемое значение: новая ссылка.

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

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

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

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

  • default_value, если не NULL;

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

  • NULL

Если значение найдено, функция создаёт новую ссылку на него.

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

Устанавливает значение var в value в текущем контексте. Возвращает указатель на объект PyObject или NULL, если произошла ошибка.

int PyContextVar_Reset(PyObject *var, PyObject *token)

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