29 lines
881 B
Python
29 lines
881 B
Python
"""
|
|
Global context for use within Addon callbacks
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import contextlib
|
|
from contextvars import ContextVar, Token
|
|
from typing import *
|
|
|
|
if TYPE_CHECKING:
|
|
from hippolyzer.lib.proxy.region import ProxiedRegion
|
|
from hippolyzer.lib.proxy.sessions import Session
|
|
|
|
# By using ContextVar, coroutines retain the context as it was when
|
|
# they were created.
|
|
session: ContextVar[Optional[Session]] = ContextVar("session", default=None)
|
|
region: ContextVar[Optional[ProxiedRegion]] = ContextVar("region", default=None)
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def push(new_session: Optional[Session] = None, new_region: Optional[ProxiedRegion] = None):
|
|
session_token: Token = session.set(new_session)
|
|
region_token: Token = region.set(new_region)
|
|
try:
|
|
yield
|
|
finally:
|
|
session.reset(session_token)
|
|
region.reset(region_token)
|