Ejemplo n.º 1
0
    def wsgi_app(self, environ, start_response):
        self.host_framework.start_request(environ)
        environ['paste.registry'].register(tw.framework, self.host_framework)
        #XXX Do we really need to stuff these in environ?
        environ['toscawidgets.prefix'] = self.prefix
        environ.setdefault('toscawidgets.framework', self.host_framework)
        environ.setdefault('toscawidgets.javascript.require_once', self.require_once)

        req = Request(environ)

        try:
            tw.framework.script_name = req.script_name
            if self.serve_resources and req.path_info.startswith(self.prefix):
                # Intercept request to possibly serve a static resource
                path_info = req.path_info[len(self.prefix):]
                script_name = req.script_name + self.prefix
                resources_app = resources.registry
                if path_info.startswith(resources_app.prefix):
                    req.path_info = path_info[len(resources_app.prefix):]
                    req.script_name = script_name + resources_app.prefix
                    resp = req.get_response(resources_app)
                    return resp(environ, start_response)
            else:
                # Pass request downstream
                resp = req.get_response(self.application)
            if 'resp' in locals():
                return resp(environ, start_response)
            else:
                return HTTPNotFound('There is no such resource')(environ, start_response)
        finally:
            self.host_framework.end_request(environ)