mirror of
https://github.com/peeringdb/peeringdb.git
synced 2024-05-11 05:55:09 +00:00
30 lines
649 B
Python
30 lines
649 B
Python
|
from contextlib import contextmanager
|
||
|
import contextvars
|
||
|
|
||
|
# 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)
|