def make_application(debug=None, apps_dir='apps', project_dir=None, include_apps=None, debug_console=True, settings_file='settings.ini', start=True): from uliweb.utils.common import sort_list if project_dir: apps_dir = os.path.normpath(os.path.join(project_dir, 'apps')) if apps_dir not in sys.path: sys.path.insert(0, apps_dir) install_config(apps_dir) application = app = SimpleFrame.Dispatcher(apps_dir=apps_dir, include_apps=include_apps, settings_file=settings_file, start=start) #settings global application object uliweb.application = app if uliweb.settings.GLOBAL.WSGI_MIDDLEWARES: s = sort_list(uliweb.settings.GLOBAL.WSGI_MIDDLEWARES, default=500) for w in reversed(s): if w in uliweb.settings: args = uliweb.settings[w].dict() else: args = None if args: klass = args.pop('CLASS', None) or args.pop('class', None) if not klass: logging.error('Error: There is no a CLASS option in this WSGI Middleware [%s].' % w) continue modname, clsname = klass.rsplit('.', 1) try: mod = __import__(modname, {}, {}, ['']) c = getattr(mod, clsname) app = c(app, **args) except Exception, e: log.exception(e)
def __call__(self, environ, start_response): local.application = self local.request = req = Request(environ) conf.request = RequestProxy() local.response = res = Response(content_type='text/html') conf.response = ResponseProxy() local.url_adapter = adapter = conf.url_map.bind_to_environ(environ) try: endpoint, values = adapter.match() mod, handler_cls, handler = self.prepare_request(req, endpoint) #process static if endpoint in conf.static_views: response = self.call_view(mod, handler_cls, handler, req, res, kwargs=values) else: response = None _clses = {} _inss = {} #middleware process request middlewares = conf.settings.GLOBAL.get('MIDDLEWARE_CLASSES', []) s = [] for middleware in middlewares: try: order = None if isinstance(middleware, tuple): order, middleware = middleware cls = import_attr(middleware) if order is None: order = getattr(cls, 'ORDER', 500) s.append((order, middleware)) except ImportError, e: log.exception(e) error("Can't import the middleware %s" % middleware) _clses[middleware] = cls middlewares = sort_list(s) for middleware in middlewares: cls = _clses[middleware] if hasattr(cls, 'process_request'): ins = cls(self, conf.settings) _inss[middleware] = ins response = ins.process_request(req) if response is not None: break if response is None: try: response = self.call_view(mod, handler_cls, handler, req, res, kwargs=values) except Exception, e: for middleware in reversed(middlewares): cls = _clses[middleware] if hasattr(cls, 'process_exception'): ins = _inss.get(middleware) if not ins: ins = cls(self, conf.settings) response = ins.process_exception(req, e) if response: break raise else: