Как понять этот код колбы? - PullRequest
       6

Как понять этот код колбы?

8 голосов
/ 27 сентября 2010

Может ли кто-нибудь объяснить эту строку?

g = LocalProxy(lambda: _request_ctx_stack.top.g) 

код из колбы

from werkzeug import LocalStack, LocalProxy

# context locals
_request_ctx_stack = LocalStack()
current_app = LocalProxy(lambda: _request_ctx_stack.top.app)
request = LocalProxy(lambda: _request_ctx_stack.top.request)
session = LocalProxy(lambda: _request_ctx_stack.top.session)
g = LocalProxy(lambda: _request_ctx_stack.top.g) 

код Local здесь: http://pastebin.com/U3e1bEi0

1 Ответ

4 голосов
/ 13 октября 2010

Может помочь документация Werkzeug для LocalStack и LocalProxy, а также некоторое базовое понимание WSGI .

Похоже, что глобальное(но пустой) стек _request_ctx_stack создан.Это доступно для всех тем.Некоторые объекты в стиле WSGI (current_app, request, session и g) настроены на использование верхнего элемента в глобальном стеке.

В какой-то момент одно или несколько приложений WSGIвыталкиваются в глобальный стек.Затем, когда, например, current_app используется во время выполнения, используется текущее приложение верхнего уровня.Если стек никогда не инициализируется, top вернет None, и вы получите исключение, например AttributeError: 'NoneType' object has no attribute 'app'.

...