made the WSGI compatibility layer lazy, nobody uses it anyway and it may be broken, probably should be removed

This commit is contained in:
mdipierro
2013-06-30 09:19:26 -05:00
parent d218b052a1
commit 3407cf6584
4 changed files with 52 additions and 53 deletions
+1 -1
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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
+2
View File
@@ -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