mirror of https://github.com/mitsuhiko/flask.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.6 KiB
61 lines
1.6 KiB
# -*- coding: utf-8 -*- |
|
""" |
|
flask.globals |
|
~~~~~~~~~~~~~ |
|
|
|
Defines all the global objects that are proxies to the current |
|
active context. |
|
|
|
:copyright: (c) 2014 by Armin Ronacher. |
|
:license: BSD, see LICENSE for more details. |
|
""" |
|
|
|
from functools import partial |
|
from werkzeug.local import LocalStack, LocalProxy |
|
|
|
|
|
_request_ctx_err_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. |
|
|
|
This typically means that you attempted to use functionality that needed |
|
to interface with the current application object in a way. To solve |
|
this set up an application context with app.app_context(). See the |
|
documentation for more information.\ |
|
''' |
|
|
|
|
|
def _lookup_req_object(name): |
|
top = _request_ctx_stack.top |
|
if top is None: |
|
raise RuntimeError(_request_ctx_err_msg) |
|
return getattr(top, name) |
|
|
|
|
|
def _lookup_app_object(name): |
|
top = _app_ctx_stack.top |
|
if top is None: |
|
raise RuntimeError(_app_ctx_err_msg) |
|
return getattr(top, name) |
|
|
|
|
|
def _find_app(): |
|
top = _app_ctx_stack.top |
|
if top is None: |
|
raise RuntimeError(_app_ctx_err_msg) |
|
return top.app |
|
|
|
|
|
# context locals |
|
_request_ctx_stack = LocalStack() |
|
_app_ctx_stack = LocalStack() |
|
current_app = LocalProxy(_find_app) |
|
request = LocalProxy(partial(_lookup_req_object, 'request')) |
|
session = LocalProxy(partial(_lookup_req_object, 'session')) |
|
g = LocalProxy(partial(_lookup_app_object, 'g'))
|
|
|