Source code for feretui.context

# This file is a part of the FeretUI project
#
#    Copyright (C) 2024 Jean-Sebastien SUZANNE <js.suzanne@gmail.com>
#
# This Source Code Form is subject to the terms of the Mozilla Public License,
# v. 2.0. If a copy of the MPL was not distributed with this file,You can
# obtain one at http://mozilla.org/MPL/2.0/.
"""Module feretui.context.

defined the contextvar used by FeretUI client

"""

from contextlib import contextmanager
from contextvars import ContextVar
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from feretui.feretui import FeretUI
    from feretui.request import Request

cvar_feretui: ContextVar["FeretUI"] = ContextVar("feretui")
cvar_request: ContextVar["Request"] = ContextVar("request")


[docs] @contextmanager def set_context(feretui: "FeretUI", request: "Request") -> None: """Context manager to tokenize contextvar.""" token_feretui = cvar_feretui.set(feretui) token_request = cvar_request.set(request) try: yield finally: cvar_feretui.reset(token_feretui) cvar_request.reset(token_request)
[docs] class ContextProperties: """ContextProperties class. used to get the contextvar in class. """ def __getattr__(self: "ContextProperties", attribute: str) -> None: """Getter.""" if attribute == "feretui": return cvar_feretui.get() if attribute == "request": return cvar_request.get() return super().__getattr__(attribute) # pragma: no cover