Esempio n. 1
0
 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()
Esempio n. 2
0
 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,
         }
Esempio n. 3
0
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
Esempio n. 4
0
    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()
Esempio n. 5
0
 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()
Esempio n. 6
0
    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()
Esempio n. 7
0
 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()
Esempio n. 8
0
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)
Esempio n. 9
0
    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()
Esempio n. 10
0
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)
Esempio n. 11
0
 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'})
     
Esempio n. 12
0
    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()
Esempio n. 13
0
    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
Esempio n. 14
0
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,
    )
Esempio n. 15
0
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 []
            )
Esempio n. 16
0
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
Esempio n. 17
0
 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()
Esempio n. 18
0
 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()