Работа с контекстом

Суть контекста — выполнение действий при входе и выходе из контекста, а так же передача параметров между компонентами, имеющими один контекст.

contextlib

Создание with-совместимых функций — https://docs.python.org/3/library/contextlib.html

Создание своего ContextManager

Определяет два абстрактных класса — AbstractContextManager и AbstractAsyncContextManager. Они обязывают реализовать функции object.__enter__() и object.__exit__() (или их асинхронные аналоги object.__aenter__() и object.__aexit__()).

import asyncio
import contextlib
import contextvars


class MyAsyncContextManager(contextlib.AbstractAsyncContextManager):
    async def __aenter__(self):
        print('entering context')
        return await super().__aenter__()

    async def __aexit__(self, exc_type, exc, tb) -> bool | None:
        print('exiting context')
        return await super().__aexit__(exc_type, exc, tb)
        

async def main():
    async with MyAsyncContextManager() as test:
        print(f'Hello {test}')


loop = asyncio.run(main())

"""
entering context
Hello <__main__.MyAsyncContextManager object at 0x000001FAC3E945E0>
exiting context
"""

Использование встроенных декораторов

contextvars

Link: https://docs.python.org/3/library/contextvars.html

Last updated