made the WSGI compatibility layer lazy, nobody uses it anyway and it may be broken, probably should be removed
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.6.0-development+timestamp.2013.06.29.17.06.13
|
Version 2.6.0-development+timestamp.2013.06.30.09.18.36
|
||||||
|
|||||||
@@ -83,7 +83,6 @@ class Request(Storage):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
Storage.__init__(self)
|
Storage.__init__(self)
|
||||||
self.wsgi = Storage() # hooks to environ and start_response
|
|
||||||
self.env = Storage()
|
self.env = Storage()
|
||||||
self.cookies = Cookie.SimpleCookie()
|
self.cookies = Cookie.SimpleCookie()
|
||||||
self.get_vars = Storage()
|
self.get_vars = Storage()
|
||||||
|
|||||||
+49
-51
@@ -257,51 +257,55 @@ def serve_controller(request, response, session):
|
|||||||
raise HTTP(response.status, page, **response.headers)
|
raise HTTP(response.status, page, **response.headers)
|
||||||
|
|
||||||
|
|
||||||
def start_response_aux(status, headers, exc_info, response=None):
|
class LazyWSGI(object):
|
||||||
"""
|
def __init__(self, environ, request, response):
|
||||||
in controller you can use::
|
self.wsgi_environ = environ
|
||||||
|
self.request = request
|
||||||
- request.wsgi.environ
|
self.response = response
|
||||||
- request.wsgi.start_response
|
@property
|
||||||
|
def environ(self):
|
||||||
to call third party WSGI applications
|
if not hasattr(self,'_environ'):
|
||||||
"""
|
new_environ = self.wsgi_environ
|
||||||
response.status = str(status).split(' ', 1)[0]
|
new_environ['wsgi.input'] = self.request.body
|
||||||
response.headers = dict(headers)
|
new_environ['wsgi.version'] = 1
|
||||||
return lambda *args, **kargs: response.write(escape=False, *args, **kargs)
|
self._environ = new_environ
|
||||||
|
return self._environ
|
||||||
|
def start_response(self,status='200', headers=[], exec_info=None):
|
||||||
def middleware_aux(request, response, *middleware_apps):
|
"""
|
||||||
"""
|
in controller you can use::
|
||||||
In you controller use::
|
|
||||||
|
- request.wsgi.environ
|
||||||
|
- request.wsgi.start_response
|
||||||
|
|
||||||
|
to call third party WSGI applications
|
||||||
|
"""
|
||||||
|
self.response.status = str(status).split(' ', 1)[0]
|
||||||
|
self.response.headers = dict(headers)
|
||||||
|
return lambda *args, **kargs: \
|
||||||
|
self.response.write(escape=False, *args, **kargs)
|
||||||
|
def middleware(self,*a):
|
||||||
|
"""
|
||||||
|
In you controller use::
|
||||||
|
|
||||||
@request.wsgi.middleware(middleware1, middleware2, ...)
|
@request.wsgi.middleware(middleware1, middleware2, ...)
|
||||||
|
|
||||||
to decorate actions with WSGI middleware. actions must return strings.
|
to decorate actions with WSGI middleware. actions must return strings.
|
||||||
uses a simulated environment so it may have weird behavior in some cases
|
uses a simulated environment so it may have weird behavior in some cases
|
||||||
"""
|
"""
|
||||||
def middleware(f):
|
def middleware(f):
|
||||||
def app(environ, start_response):
|
def app(environ, start_response):
|
||||||
data = f()
|
data = f()
|
||||||
start_response(response.status, response.headers.items())
|
start_response(self.response.status,
|
||||||
if isinstance(data, list):
|
self.response.headers.items())
|
||||||
return data
|
if isinstance(data, list):
|
||||||
return [data]
|
return data
|
||||||
for item in middleware_apps:
|
return [data]
|
||||||
app = item(app)
|
for item in middleware_apps:
|
||||||
|
app = item(app)
|
||||||
def caller(app):
|
def caller(app):
|
||||||
wsgi = request.wsgi
|
return app(self.environ, self.start_response)
|
||||||
return app(wsgi.environ, wsgi.start_response)
|
return lambda caller=caller, app=app: caller(app)
|
||||||
return lambda caller=caller, app=app: caller(app)
|
return middleware
|
||||||
return middleware
|
|
||||||
|
|
||||||
|
|
||||||
def environ_aux(environ, request):
|
|
||||||
new_environ = copy.copy(environ)
|
|
||||||
new_environ['wsgi.input'] = request.body
|
|
||||||
new_environ['wsgi.version'] = 1
|
|
||||||
return new_environ
|
|
||||||
|
|
||||||
ISLE25 = sys.version_info[1] <= 5
|
ISLE25 = sys.version_info[1] <= 5
|
||||||
|
|
||||||
@@ -537,13 +541,7 @@ def wsgibase(environ, responder):
|
|||||||
# expose wsgi hooks for convenience
|
# expose wsgi hooks for convenience
|
||||||
# ##################################################
|
# ##################################################
|
||||||
|
|
||||||
request.wsgi.environ = environ_aux(environ, request)
|
request.wsgi = LazyWSGI(environ, request, response)
|
||||||
request.wsgi.start_response = \
|
|
||||||
lambda status='200', headers=[], \
|
|
||||||
exec_info=None, response=response: \
|
|
||||||
start_response_aux(status, headers, exec_info, response)
|
|
||||||
request.wsgi.middleware = \
|
|
||||||
lambda *a: middleware_aux(request, response, *a)
|
|
||||||
|
|
||||||
# ##################################################
|
# ##################################################
|
||||||
# load cookies
|
# load cookies
|
||||||
|
|||||||
@@ -638,6 +638,8 @@ def regex_url_in(request, environ):
|
|||||||
if match.group('c') == 'static':
|
if match.group('c') == 'static':
|
||||||
application = match.group('a')
|
application = match.group('a')
|
||||||
version, filename = None, match.group('z')
|
version, filename = None, match.group('z')
|
||||||
|
if not filename:
|
||||||
|
raise HTTP(404)
|
||||||
items = filename.split('/', 1)
|
items = filename.split('/', 1)
|
||||||
if regex_version.match(items[0]):
|
if regex_version.match(items[0]):
|
||||||
version, filename = items
|
version, filename = items
|
||||||
|
|||||||
Reference in New Issue
Block a user