2021-10-15 03:25:38 -05:00
|
|
|
"""
|
|
|
|
Define custom context managers.
|
|
|
|
"""
|
|
|
|
|
2021-07-07 17:57:04 -05:00
|
|
|
import contextvars
|
2021-07-10 10:12:35 -05:00
|
|
|
from contextlib import contextmanager
|
2021-07-07 17:57:04 -05:00
|
|
|
|
|
|
|
# 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)
|