Source code for redditwarp.util.ctx_var_ctx_mgr
from __future__ import annotations
from typing import TYPE_CHECKING, Optional, MutableSequence, ContextManager, TypeVar
if TYPE_CHECKING:
from types import TracebackType
from contextvars import ContextVar, Token
from collections import deque
T = TypeVar('T')
[docs]class ContextVarContextManager(ContextManager[None]):
def __init__(self, ctx_var: ContextVar[T], var_val: T) -> None:
self._ctx_var: ContextVar[T] = ctx_var
self._var_val: T = var_val
self._token_stack: MutableSequence[Token[T]] = deque()
def __enter__(self) -> None:
self._token_stack.append(self._ctx_var.set(self._var_val))
def __exit__(self,
exc_type: Optional[type[BaseException]],
exc_value: Optional[BaseException],
traceback: Optional[TracebackType],
) -> Optional[bool]:
self._ctx_var.reset(self._token_stack.pop())
return None