def test_get_manifest_ignores_extra(self): fp = open( os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT) self.assertFalse('baz' in manifest) fp.close()
def getContent(self): name = self.request.get('name', self.request.get('form.widgets.name')) title = u"" description = u"" filename = SITE_LAYOUT_FILE_NAME directory = queryResourceDirectory(SITE_LAYOUT_RESOURCE_NAME, name) if directory.isFile(MANIFEST_FILENAME): manifest = getManifest(directory.openFile(MANIFEST_FILENAME), SITE_LAYOUT_MANIFEST_FORMAT) title = manifest.get('title', title) description = manifest.get('description', description) filename = manifest.get('file', filename) if isinstance(title, str): title = title.decode('utf-8') if isinstance(description, str): description = description.decode('utf-8') content = directory.readFile(filename) return { 'name': name, 'filename': filename, 'title': title, 'description': description, 'content': content, }
def getThemeResources(format, defaults=None, filter=None, manifestFilename=MANIFEST_FILENAME): resources = [] for directory in iterDirectoriesOfType(format.resourceType, filter_duplicates=False): if filter is not None and not filter(directory): continue name = directory.__name__ if directory.isFile(manifestFilename): manifest = directory.openFile(manifestFilename) try: theme = getManifest(manifest, format, defaults) theme['name'] = name resources.append(theme) except: LOGGER.exception( "Unable to read manifest for theme directory %s", name) finally: manifest.close() return resources
def test_get_manifest(self): fp = open(os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT) self.assertEqual(manifest['title'], 'Manifest test') self.assertEqual(manifest['description'], None) self.assertEqual(manifest['bar'], 'baz') fp.close()
def test_get_manifest_override_defaults(self): fp = open( os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT, {'bar': 'foo', 'title': 'foo'}) self.assertEqual(manifest['title'], 'Manifest test') self.assertEqual(manifest['bar'], 'foo') fp.close()
def test_get_manifest_params(self): fp = open(os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT_PARAMS) self.assertEqual(manifest['title'], 'Manifest test') self.assertEqual(manifest['description'], None) self.assertEqual(manifest['bar'], 'baz') self.assertEqual(manifest['params'], {'alpha': 'beta', 'delta': 'theta'}) fp.close()
def __call__(self): self.errors = {} if self.request.method == 'POST': CheckAuthenticator(self.request) catalog = getToolByName(self.context, 'portal_catalog') form = self.request.form if 'form.button.SaveGeneral' in form: name = form.get('defaultSiteLayout') directory = queryResourceDirectory(SITE_LAYOUT_RESOURCE_NAME, name) if directory is None: IStatusMessage(self.request).add(_(u"Cannot find resource directory"), type="error") else: filename = SITE_LAYOUT_FILE_NAME if directory.isFile(MANIFEST_FILENAME): manifest = getManifest(directory.openFile(MANIFEST_FILENAME), SITE_LAYOUT_MANIFEST_FORMAT) filename = manifest.get('file', filename) registry = getUtility(IRegistry) registry['plone.defaultSiteLayout'] = "./++%s++%s/%s" % \ (SITE_LAYOUT_RESOURCE_NAME, name, filename) IStatusMessage(self.request).add(_(u"Default site layout updated"), type="info") elif 'form.button.DeletePageType' in form: portal_type = form.get('name') if portal_type == DEFAULT_PAGE_TYPE_NAME: IStatusMessage(self.request).add(_(u"Cannot delete the default page type"), type="error") elif len(catalog({'portal_type': portal_type})) > 0: IStatusMessage(self.request).add(_(u"Cannot delete a type that is in use"), type="error") else: portal_types = getToolByName(self, 'portal_types') del portal_types[portal_type] IStatusMessage(self.request).add(_(u"Type deleted"), type="info") elif 'form.button.DeleteSiteLayout' in form: name = form.get('name') resources = getUtility(IResourceDirectory, name='persistent') sitelayouts = resources[SITE_LAYOUT_RESOURCE_NAME] del sitelayouts[name] IStatusMessage(self.request).add(_(u"Site layout deleted"), type="info") elif 'form.button.DeletePageLayout' in form: name = form.get('name') resources = getUtility(IResourceDirectory, name='persistent') pagelayouts = resources[PAGE_LAYOUT_RESOURCE_NAME] del pagelayouts[name] IStatusMessage(self.request).add(_(u"Page layout deleted"), type="info") return self.index()
def getThemeFromResourceDirectory(resourceDirectory): """Return a Theme object from a resource directory """ name = resourceDirectory.__name__ if resourceDirectory.isFile(MANIFEST_FILENAME): manifest = getManifest(resourceDirectory.openFile(MANIFEST_FILENAME), MANIFEST_FORMAT) else: manifest = {} return getTheme(name, manifest)
def test_get_manifest(self): fp = open( os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT) self.assertEqual(manifest['title'], 'Manifest test') self.assertEqual(manifest['description'], None) self.assertEqual(manifest['bar'], 'baz') fp.close()
def test_createTemplatePageLayout(self): from plone.app.page.interfaces import PAGE_LAYOUT_MANIFEST_FORMAT from plone.app.page.utils import createTemplatePageLayout from plone.resource.utils import queryResourceDirectory from plone.resource.manifest import getManifest from plone.app.testing import TEST_USER_ID from plone.app.testing import setRoles portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Manager',)) createTemplatePageLayout(u"A title", u"A description", u"<html><body><p>Stuff</p></body></html>") setRoles(portal, TEST_USER_ID, ('Member',)) directory = queryResourceDirectory('pagelayout', 'a-title') self.assertTrue('page.html' in directory) self.assertTrue('manifest.cfg' in directory) self.assertEqual(directory.readFile('page.html'), "<html><body><p>Stuff</p></body></html>") manifest = getManifest(directory.openFile('manifest.cfg'), PAGE_LAYOUT_MANIFEST_FORMAT) self.assertEqual(manifest, {'title': "A title", 'description': "A description", 'file': 'page.html'}) # Create a second one with the same title setRoles(portal, TEST_USER_ID, ('Manager',)) createTemplatePageLayout(u"A title", u"Another description", u"<html><body><p>Other stuff</p></body></html>") setRoles(portal, TEST_USER_ID, ('Member',)) directory = queryResourceDirectory('pagelayout', 'a-title-1') self.assertTrue('page.html' in directory) self.assertTrue('manifest.cfg' in directory) self.assertEqual(directory.readFile('page.html'), "<html><body><p>Other stuff</p></body></html>") manifest = getManifest(directory.openFile('manifest.cfg'), PAGE_LAYOUT_MANIFEST_FORMAT) self.assertEqual(manifest, {'title': "A title", 'description': "Another description", 'file': 'page.html'})
def test_get_manifest_params(self): fp = open( os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT_PARAMS) self.assertEqual(manifest['title'], 'Manifest test') self.assertEqual(manifest['description'], None) self.assertEqual(manifest['bar'], 'baz') self.assertEqual(manifest['params'], { 'alpha': 'beta', 'delta': 'theta' }) fp.close()
def getFrame(self): theme_name = self.context.__name__ theme = None if self.context.isFile(MANIFEST_FILENAME): manifest = self.context.openFile(MANIFEST_FILENAME) theme = getManifest(manifest, MANIFEST_FORMAT, None) theme['name'] = theme_name manifest.close() theme = getTheme(theme_name, theme) if theme.rules and theme.rules.endswith('.xml'): return super(ThemeMapper, self).getFrame() # we're assuming it is a castle type theme self.request.environ[theming.OVERRIDE_ENVIRON_KEY] = theme_name response = subrequest('/', root=api.portal.get()) result = response.getBody() return result
def getThemeFromResourceDirectory(resourceDirectory): """Return a Theme object from a resource directory """ name = resourceDirectory.__name__ title = name.capitalize().replace('-', ' ').replace('.', ' ') description = None rules = u"/++%s++%s/%s" % ( THEME_RESOURCE_NAME, name, RULE_FILENAME, ) prefix = u"/++%s++%s" % ( THEME_RESOURCE_NAME, name, ) params = {} doctype = "" if resourceDirectory.isFile(MANIFEST_FILENAME): manifest = getManifest(resourceDirectory.openFile(MANIFEST_FILENAME), MANIFEST_FORMAT) title = manifest['title'] or title description = manifest['description'] or description rules = manifest['rules'] or rules prefix = manifest['prefix'] or prefix params = manifest['parameters'] or params doctype = manifest['doctype'] or doctype if isinstance(rules, str): rules = rules.decode('utf-8') if isinstance(prefix, str): prefix = prefix.decode('utf-8') return Theme( name, rules, title=title, description=description, absolutePrefix=prefix, parameterExpressions=params, doctype=doctype, )
def getThemeFromResourceDirectory(resourceDirectory): """Return a Theme object from a resource directory """ name = resourceDirectory.__name__ title = name.capitalize().replace('-', ' ').replace('.', ' ') description = None rules = u"/++%s++%s/%s" % (THEME_RESOURCE_NAME, name, RULE_FILENAME,) prefix = u"/++%s++%s" % (THEME_RESOURCE_NAME, name,) params = {} doctype = "" enabled_bundles = '' disabled_bundles = '' if resourceDirectory.isFile(MANIFEST_FILENAME): manifest = getManifest( resourceDirectory.openFile(MANIFEST_FILENAME), MANIFEST_FORMAT) title = manifest['title'] or title description = manifest['description'] or description rules = manifest['rules'] or rules prefix = manifest['prefix'] or prefix params = manifest['parameters'] or params doctype = manifest['doctype'] or doctype enabled_bundles = manifest['enabled-bundles'] or '' disabled_bundles = manifest['disabled-bundles'] or '' if isinstance(rules, str): rules = rules.decode('utf-8') if isinstance(prefix, str): prefix = prefix.decode('utf-8') return Theme(name, rules, title=title, description=description, absolutePrefix=prefix, parameterExpressions=params, doctype=doctype, enabled_bundles=enabled_bundles.split(',') if enabled_bundles else [], disabled_bundles=disabled_bundles.split(',') if disabled_bundles else [] )
def getThemeResources(format, defaults=None, filter=None, manifestFilename=MANIFEST_FILENAME): resources = [] for directory in iterDirectoriesOfType(format.resourceType, filter_duplicates=False): if filter is not None and not filter(directory): continue name = directory.__name__ if directory.isFile(manifestFilename): manifest = directory.openFile(manifestFilename) try: theme = getManifest(manifest, format, defaults) theme['name'] = name resources.append(theme) except: LOGGER.exception("Unable to read manifest for theme directory %s", name) finally: manifest.close() return resources
def test_get_manifest_ignores_extra(self): fp = open(os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT) self.assertFalse('baz' in manifest) fp.close()
def test_get_manifest_override_defaults(self): fp = open(os.path.join(test_dir_path, 'demo', 'manifest-test', 'manifest.cfg')) manifest = getManifest(fp, TEST_FORMAT, {'bar': 'foo', 'title': 'foo'}) self.assertEqual(manifest['title'], 'Manifest test') self.assertEqual(manifest['bar'], 'foo') fp.close()