def test_develop_theme(self): ''' Check if the rules are developed ''' # First we check the status of our environment variables var_name = 'DIAZO_ALWAYS_CACHE_RULES' env_had_var = var_name in environ # and clean it up env_var_backup = environ.pop(var_name, None) transform = ThemeTransform(None, {}) # This evaluates to True because we set # getConfiguration().debug_mode to True in the test setup self.assertTrue(transform.develop_theme()) # But we can anyway force the cache environ[var_name] = 'true' self.assertFalse(transform.develop_theme()) # If we require to debug.diazo the variable will be ignored transform = ThemeTransform(None, {'diazo.debug': '1'}) self.assertTrue(transform.develop_theme()) # Then we reset our env variables before leaving if env_had_var: environ[var_name] = env_var_backup else: del environ[var_name]
def transformIterable(self, result, encoding): pagerequest = CustomPageRequest(self.request) if not pagerequest.apply_transformation: return result # use the tree from plone.app.theming to avoid building it ourselves tree = ThemeTransform(self.published, self.request).parseTree(result) tree = tree.tree if tree else None if not tree: return result # save the tree on the instance for testing, when running for real # plone.app.theming / diazo will take care of serializing the tree self._tree = tree path = pagerequest.original_path for a in tree.xpath("//a[contains(@href, '%s')]" % path): a.attrib['href'] = pagerequest.transform_url(a.attrib['href']) for form in tree.xpath("//form[contains(@action, '%s')]" % path): form.attrib['action'] = pagerequest.transform_url( form.attrib['action'] ) return result
def __call__(self, text, file_path=None): # don't execute this transform if the theme is not enabled registry = queryUtility(IRegistry) settings = registry.forInterface(IThemeSettings, False) if not settings.enabled: return text context = self.context req = getRequest() if file_path.lower().endswith('.xml'): return text theme_transform = ThemeTransform(context, req) encoding = 'utf-8' try: encoded = [text.encode(encoding)] # XXX make sure the content type is text/html req.response.headers['Content-Type'] = req.response.headers['content-type'] = 'text/html' transformed_text = theme_transform.transformIterable( encoded, encoding) if transformed_text: text = transformed_text.serialize() except UnicodeDecodeError: if file_path is None: file_path = '' log.error('error processing diazo(%s)\n%s' % ( file_path, traceback.format_exc() )) return text
def __call__(self, text, file_path=None): # don't execute this transform if the theme is not enabled registry = queryUtility(IRegistry) settings = registry.forInterface(IThemeSettings, False) if not settings.enabled: return text context = self.context req = context.REQUEST # set false BASE url to omit the theme's blacklisted domains req['BASE1'] = 'http://apply_diazo_theme.com' theme_transform = ThemeTransform(context, req) encoding = 'utf-8' transformed_text = theme_transform.transformIterable(text, encoding) if transformed_text: text = transformed_text.serialize() return text
def render_object_html(obj, request): """ Returns rendered html for given content object """ published = request.get('PUBLISHED') if isinstance(published, (BrowserView, FSPageTemplate, PythonScript)): if getCurrentTheme(): transform = ThemeTransform(published, request) try: themed = transform.transformUnicode(published(), 'utf-8') tile_transform = IncludeTiles(published, request) tiled = tile_transform.transformIterable(themed, 'utf-8') if tiled: return tiled.serialize() except Exception, error: log.error("Problem with transforming object %s: %s" % (published, error)) return published() else: try: return published() or '' except NotFound: log.error("Resource '%s' not found" % repr(obj)) return ''
def test_develop_theme(self): ''' Check if the rules are developed ''' # First we check the status of our environment variables var_name = 'DIAZO_ALWAYS_CACHE_RULES' env_had_var = var_name in environ # and clean it up env_var_backup = environ.pop(var_name, None) transform = ThemeTransform(None, None) # This evaluates to True because we set # Globals.DevelopmentMode to True in the test setup self.assertTrue(transform.develop_theme()) # But we can anyway force the cache environ[var_name] = 'true' self.assertFalse(transform.develop_theme()) # Then we reset our env variables before leaving if env_had_var: environ[var_name] = env_var_backup else: del environ[var_name]