0001"""
0002Provides a simple decorator to make a WSGI application.
0003"""
0004
0005from webob import Request, Response
0006
0007__all__ = ['WebResponse', 'wsgiapp']
0008
0009class WebResponse(Response):
0010
0011 default_content_type = 'text/html; utf8'
0012
0013def wsgiapp(func):
0014 def replacement_app(environ, start_response):
0015 req = Request(environ)
0016 res = WebResponse(request=req)
0017 req.response = res
0018 result = func(req)
0019 add_response = None
0020 if result is None:
0021 result = res
0022 elif isinstance(result, Response):
0023
0024 add_response = res
0025 elif isinstance(result, basestring):
0026 res.body = result
0027 result = res
0028 else:
0029
0030 add_response = res
0031 if (add_response is not None
0032 and 'set-cookie' in add_response.headers):
0033 def repl_start_response(status, headers, exc_info=None):
0034 headers.extend(add_response.getall('Set-Cookie'))
0035 return start_response(status, headers, exc_info)
0036 else:
0037 repl_start_response = start_response
0038 return result(environ, repl_start_response)
0039 try:
0040 replacement_app.func_name = func.func_name
0041 except:
0042 pass
0043 return replacement_app