|
|
|
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
|
|
|
|
)
|