""" Define custom context managers. """ import contextvars from contextlib import contextmanager # stores current request in a thread safe context aware # manner. _current_request = contextvars.ContextVar("current_request") @contextmanager def current_request(request=None): """ Will yield the current request, if there is one. To se the current request for the context pass it to the request parameter. """ if request: token = _current_request.set(request) else: token = None try: yield _current_request.get() except LookupError: yield None finally: if token: _current_request.reset(token)