def __call__(self, environ, start_response): """ This code will be executed every time a call is made to the server; on every request. When a theme is enabled, lookup the rules.xml file, overwrite the file when changes are made in the Django Admin interface (currently disabled) and initialize the DiazoMiddleware. When DiazoMiddleware fails, fall-back to the normal Django application and log the error. """ request = WSGIRequest(environ) if self.themes_enabled(request): theme = get_active_theme(request) if theme: rules_file = os.path.join(theme.theme_path(), 'rules.xml') if theme.id != self.theme_id or not os.path.exists(rules_file) or theme.debug: if not theme.builtin: if theme.rules: fp = open(rules_file, 'w') try: fp.write(theme.rules.serialize()) finally: fp.close() self.theme_id = theme.id self.diazo = DiazoMiddleware( app=self.app, global_conf=None, rules=rules_file, prefix=theme.theme_url(), doctype=DOCTYPE, ) try: return self.diazo(environ, start_response) except Exception, e: getLogger('django_diazo').error(e)
def process_response(self, request, response): """ Transform the response with Diazo if transformable """ content = response if check_themes_enabled(request): theme = get_active_theme(request) if theme: rules_file = os.path.join(theme.theme_path(), 'rules.xml') if theme.id != self.theme_id or not os.path.exists( rules_file) or theme.debug: if not theme.builtin: if theme.rules: fp = open(rules_file, 'w') try: fp.write(theme.rules.serialize()) finally: fp.close() self.theme_id = theme.id self.diazo = DiazoMiddleware( app=self.app, global_conf=None, rules=rules_file, prefix=theme.theme_url(), doctype=DOCTYPE, ) compiled_theme = self.diazo.compile_theme() self.transform = etree.XSLT( compiled_theme, access_control=self.diazo.access_control) self.params = {} for key, value in self.diazo.environ_param_map.items(): if key in request.environ: if value in self.diazo.unquoted_params: self.params[value] = request.environ[key] else: self.params[value] = quote_param( request.environ[key]) try: if isinstance(response, etree._Element): response = HttpResponse() else: parser = etree.HTMLParser(remove_blank_text=True, remove_comments=True) content = etree.fromstring(response.content, parser) result = self.transform(content.decode('utf-8'), **self.params) response.content = XMLSerializer( result, doctype=DOCTYPE).serialize() except Exception, e: getLogger('django_diazo').error(e)
def process_response(self, request, response): """ Transform the response with Diazo if transformable """ content = response if check_themes_enabled(request): theme = get_active_theme(request) if theme: rules_file = os.path.join(theme.theme_path(), 'rules.xml') if theme.id != self.theme_id or not os.path.exists(rules_file) or theme.debug: if not theme.builtin: if theme.rules: fp = open(rules_file, 'w') try: fp.write(theme.rules.serialize()) finally: fp.close() self.theme_id = theme.id self.diazo = DiazoMiddleware( app=self.app, global_conf=None, rules=rules_file, prefix=theme.theme_url(), doctype=DOCTYPE, ) compiled_theme = self.diazo.compile_theme() self.transform = etree.XSLT(compiled_theme, access_control=self.diazo.access_control) self.params = {} for key, value in self.diazo.environ_param_map.items(): if key in request.environ: if value in self.diazo.unquoted_params: self.params[value] = request.environ[key] else: self.params[value] = quote_param(request.environ[key]) try: if isinstance(response, etree._Element): response = HttpResponse() else: parser = etree.HTMLParser(remove_blank_text=True, remove_comments=True) content = etree.fromstring(response.content, parser) result = self.transform(content, **self.params) response.content = XMLSerializer(result, doctype=DOCTYPE).serialize() except Exception, e: getLogger('django_diazo').error(e)