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            # All good
0024            add_response = res
0025        elif isinstance(result, basestring):
0026            res.body = result
0027            result = res
0028        else:
0029            # WSGI application...
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