forked from orbit-oss/flask
access names as proxies directly
This commit is contained in:
parent
89463cb77c
commit
0b2f809f9b
1 changed files with 35 additions and 44 deletions
|
|
@ -1,59 +1,50 @@
|
||||||
import typing as t
|
import typing as t
|
||||||
from functools import partial
|
from contextvars import ContextVar
|
||||||
|
|
||||||
from werkzeug.local import LocalProxy
|
|
||||||
from werkzeug.local import LocalStack
|
from werkzeug.local import LocalStack
|
||||||
|
|
||||||
if t.TYPE_CHECKING: # pragma: no cover
|
if t.TYPE_CHECKING: # pragma: no cover
|
||||||
from .app import Flask
|
from .app import Flask
|
||||||
from .ctx import _AppCtxGlobals
|
from .ctx import _AppCtxGlobals
|
||||||
|
from .ctx import AppContext
|
||||||
|
from .ctx import RequestContext
|
||||||
from .sessions import SessionMixin
|
from .sessions import SessionMixin
|
||||||
from .wrappers import Request
|
from .wrappers import Request
|
||||||
|
|
||||||
_request_ctx_err_msg = """\
|
_no_app_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.\
|
|
||||||
"""
|
|
||||||
_app_ctx_err_msg = """\
|
|
||||||
Working outside of application context.
|
Working outside of application context.
|
||||||
|
|
||||||
This typically means that you attempted to use functionality that needed
|
This typically means that you attempted to use functionality that needed
|
||||||
to interface with the current application object in some way. To solve
|
the current application. To solve this, set up an application context
|
||||||
this, set up an application context with app.app_context(). See the
|
with app.app_context(). See the documentation for more information.\
|
||||||
documentation for more information.\
|
|
||||||
"""
|
"""
|
||||||
|
_cv_app: ContextVar[t.List["AppContext"]] = ContextVar("flask.app_ctx")
|
||||||
|
_app_ctx_stack: LocalStack["AppContext"] = LocalStack(_cv_app)
|
||||||
def _lookup_req_object(name):
|
app_ctx: "AppContext" = _app_ctx_stack( # type: ignore[assignment]
|
||||||
top = _request_ctx_stack.top
|
unbound_message=_no_app_msg
|
||||||
if top is None:
|
)
|
||||||
raise RuntimeError(_request_ctx_err_msg)
|
current_app: "Flask" = _app_ctx_stack( # type: ignore[assignment]
|
||||||
return getattr(top, name)
|
"app", unbound_message=_no_app_msg
|
||||||
|
)
|
||||||
|
g: "_AppCtxGlobals" = _app_ctx_stack( # type: ignore[assignment]
|
||||||
def _lookup_app_object(name):
|
"g", unbound_message=_no_app_msg
|
||||||
top = _app_ctx_stack.top
|
)
|
||||||
if top is None:
|
|
||||||
raise RuntimeError(_app_ctx_err_msg)
|
_no_req_msg = """\
|
||||||
return getattr(top, name)
|
Working outside of request context.
|
||||||
|
|
||||||
|
This typically means that you attempted to use functionality that needed
|
||||||
def _find_app():
|
an active HTTP request. Consult the documentation on testing for
|
||||||
top = _app_ctx_stack.top
|
information about how to avoid this problem.\
|
||||||
if top is None:
|
"""
|
||||||
raise RuntimeError(_app_ctx_err_msg)
|
_cv_req: ContextVar[t.List["RequestContext"]] = ContextVar("flask.request_ctx")
|
||||||
return top.app
|
_request_ctx_stack: LocalStack["RequestContext"] = LocalStack(_cv_req)
|
||||||
|
request_ctx: "RequestContext" = _request_ctx_stack( # type: ignore[assignment]
|
||||||
|
unbound_message=_no_req_msg
|
||||||
# context locals
|
)
|
||||||
_request_ctx_stack = LocalStack()
|
request: "Request" = _request_ctx_stack( # type: ignore[assignment]
|
||||||
_app_ctx_stack = LocalStack()
|
"request", unbound_message=_no_req_msg
|
||||||
current_app: "Flask" = LocalProxy(_find_app) # type: ignore
|
)
|
||||||
request: "Request" = LocalProxy(partial(_lookup_req_object, "request")) # type: ignore
|
session: "SessionMixin" = _request_ctx_stack( # type: ignore[assignment]
|
||||||
session: "SessionMixin" = LocalProxy( # type: ignore
|
"session", unbound_message=_no_req_msg
|
||||||
partial(_lookup_req_object, "session")
|
|
||||||
)
|
)
|
||||||
g: "_AppCtxGlobals" = LocalProxy(partial(_lookup_app_object, "g")) # type: ignore
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue