from __future__ import annotations
import typing as t
from contextvars import ContextVar
from werkzeug . local import LocalProxy
if t . TYPE_CHECKING : # pragma: no cover
from . app import Flask
from . ctx import _AppCtxGlobals
from . ctx import AppContext
from . ctx import RequestContext
from . sessions import SessionMixin
from . wrappers import Request
_no_app_msg = """ \
Working outside of application context .
This typically means that you attempted to use functionality that needed
the current application . To solve this , set up an application context
with app . app_context ( ) . See the documentation for more information . \
"""
_cv_app : ContextVar [ AppContext ] = ContextVar ( " flask.app_ctx " )
app_ctx : AppContext = LocalProxy ( # type: ignore[assignment]
_cv_app , unbound_message = _no_app_msg
)
current_app : Flask = LocalProxy ( # type: ignore[assignment]
_cv_app , " app " , unbound_message = _no_app_msg
)
g : _AppCtxGlobals = LocalProxy ( # type: ignore[assignment]
_cv_app , " g " , unbound_message = _no_app_msg
)
_no_req_msg = """ \
Working outside of request context .
This typically means that you attempted to use functionality that needed
an active HTTP request . Consult the documentation on testing for
information about how to avoid this problem . \
"""
_cv_request : ContextVar [ RequestContext ] = ContextVar ( " flask.request_ctx " )
request_ctx : RequestContext = LocalProxy ( # type: ignore[assignment]
_cv_request , unbound_message = _no_req_msg
)
request : Request = LocalProxy ( # type: ignore[assignment]
_cv_request , " request " , unbound_message = _no_req_msg
)
session : SessionMixin = LocalProxy ( # type: ignore[assignment]
_cv_request , " session " , unbound_message = _no_req_msg
)