Example #1
0
    def factory_method(
        container, identifier, title, no_default_version=False, *args, **kw):
        if ISilvaFactoryDispatcher.providedBy(container):
            container = container.Destination()
        identifier = normalize_identifier(identifier)
        chooser = ISilvaNameChooser(container)
        try:
            chooser.checkName(
                identifier, None, interface=implementedBy(factory))
        except ContentError as e:
            raise ValueError(e.reason)
        content = factory(identifier)
        setattr(content, '__initialization__', True)
        container._setObject(identifier, content)
        content = container._getOb(identifier)

        if no_default_version is False:
            version_factory_name = getFactoryName(version)
            extension = extensionRegistry.get_extension(extension_name)

            content.create_version('0', None, None)
            version_factory = getattr(
                content.manage_addProduct[extension.product],
                version_factory_name)
            version_factory('0', title, *args, **kw)

        delattr(content, '__initialization__')
        notify(ContentCreatedEvent(
                content, no_default_version=no_default_version))
        return content
Example #2
0
    def test_extension_product(self):
        extension = extensionRegistry.get_extension('Silva')
        self.assertNotEqual(extension, None)

        self.assertTrue(verifyObject(IExtension, extension))
        self.assertEqual(extension.name, 'Silva')
        self.assertEqual(extension.title, 'Silva Core')
        self.assertEqual(extension.product, 'Silva')
        self.assertEqual(extension.module_name, 'Products.Silva')
        self.assertEqual(extension.description,
                         'Silva Content Management System')

        self.assertEqual([c['name'] for c in extension.get_content()], [
            'Silva AutoTOC', 'Silva Container Policy Registry',
            'Silva Message Service', 'Silva Extension Service', 'Silva File',
            'Silva Files Service', 'Silva Folder', 'Silva Ghost',
            'Silva Ghost Version', 'Silva Ghost Asset', 'Silva Ghost Folder',
            'Silva Image', 'Silva Indexer', 'Silva Link', 'Silva Link Version',
            'Silva Publication', 'Silva Root', 'Silva Simple Member',
            'Silva Filtering Service', 'Mockup Asset',
            'Mockup Non Publishable', 'Mockup VersionedContent',
            'Mockup Version'
        ])
        self.assertEqual([c['product'] for c in extension.get_content()], [
            'Silva', 'Silva', 'Silva', 'Silva', 'Silva', 'Silva', 'Silva',
            'Silva', 'Silva', 'Silva', 'Silva', 'Silva', 'Silva', 'Silva',
            'Silva', 'Silva', 'Silva', 'Silva', 'Silva', 'Silva', 'Silva',
            'Silva', 'Silva'
        ])
Example #3
0
 def _get_extension_detail(self, content):
     """Lookup information for this content.
     """
     name = self._get_extension_name(content)
     product = extensionRegistry.get_extension(name).module
     methods = getProductMethods(product)
     return (name, methods)
 def get_system_extensions(self):
     """Return system extensions
     """
     names = extensionRegistry.get_names()
     for name in sorted(names):
         extension = extensionRegistry.get_extension(name)
         if interfaces.ISystemExtension.providedBy(extension):
             yield extension
 def get_system_extensions(self):
     """Return system extensions
     """
     names = extensionRegistry.get_names()
     for name in sorted(names):
         extension = extensionRegistry.get_extension(name)
         if interfaces.ISystemExtension.providedBy(extension):
             yield extension
Example #6
0
    def grok(self, name, module, module_info, config, **kw):
        get = lambda d: d.bind().get(module)

        ext_name = get(silvaconf.extension_name)
        ext_title = get(silvaconf.extension_title)

        if not ext_name or not ext_title:
            return False

        if not module_info.isPackage():
            raise GrokError(
                "Your extension %s is not defined in a package." % ext_title,
                module)

        is_system = get(silvaconf.extension_system)
        is_default = get(silvaconf.extension_default)
        ext_depends = get(silvaconf.extension_depends)
        if is_system:
            if is_default:
                raise GrokError(
                    u"System extension %s doesn't have an installer. "
                    u"So you cannot install it by default." % ext_title)
            try:
                install_module = resolve('%s.install' % name)
                if not isinstance(install_module, SystemExtensionInstaller):
                    raise GrokError(
                        u"System extension installer must extend the "
                        u"base class 'SystemExtensionInstaller'.",
                        module)
            except ImportError:
                install_module = SystemExtensionInstaller()
        else:
            try:
                install_module = resolve('%s.install' % name)
            except ImportError:
                raise GrokError(
                    u"You need to create an installer for your "
                    u"extension %s based on 'DefaultInstaller'." % (
                        ext_title), module)

        extensionRegistry.register(
            ext_name,
            ext_title,
            install_module=install_module,
            module_path=module_info.package_dotted_name,
            depends_on=ext_depends)

        extension = extensionRegistry.get_extension(ext_name)
        if is_system:
            alsoProvides(extension, ISystemExtension)
        if is_default:
            config.action(
                discriminator=None,
                callable=component.provideHandler,
                args=(install(ext_name), (IRoot, IInstallRootEvent)))
        return True
    def upgrade(self, root):
        # Convert Members folder
        root.manage_renameObject('Members', 'OldMembers')
        root.manage_addProduct['BTreeFolder2'].manage_addBTreeFolder('Members')
        for identifier, member in root.OldMembers.objectItems():
            if identifier not in root.Members.objectIds():
                root.Members._setObject(identifier, aq_base(member))
        root.manage_delObjects(['OldMembers'])

        # Register services
        sm = root.getSiteManager()
        if not IMemberService.providedBy(root.service_members):
            root.manage_delObjects(['service_members'])
            if extensionRegistry.get_extension('silva.pas.base') is not None:
                from silva.pas.base.subscribers import configure_service

                factory = root.manage_addProduct['silva.pas.base']
                factory.manage_addMemberService()
                configure_service(root, None)
            else:
                factory = root.manage_addProduct['Silva']
                factory.manage_addSimpleMemberService()
        else:
            sm.registerUtility(root.service_members, IMemberService)
        container_policy = root.service_containerpolicy
        if hasattr(aq_base(container_policy), '_policies'):
            container_policy._ContainerPolicyRegistry__policies = dict(
                container_policy._policies)
            delattr(container_policy, '_policies')
        sm.registerUtility(
            root.service_containerpolicy, IContainerPolicyService)
        if root._getOb('service_subscriptions', None) is not None:
            from silva.app.subscriptions.interfaces import ISubscriptionService
            sm.registerUtility(
                root.service_subscriptions, ISubscriptionService)
            template_ids = root.service_subscriptions.objectIds()
            root.service_subscriptions.manage_delObjects(template_ids)
            # This trigger a reconfiguration of the service.
            notify(ObjectCreatedEvent(root.service_subscriptions))
        if root._getOb('service_news', None) is not None:
            from silva.app.news.interfaces import IServiceNews
            sm.registerUtility(root.service_news, IServiceNews)
        if root._getOb('service_find', None) is not None:
            from Products.SilvaFind.interfaces import IFindService
            sm.registerUtility(root.service_find, IFindService)
        if root._getOb('service_secret', None) is None:
            factory = root.manage_addProduct['silva.core.services']
            factory.manage_addSecretService()
        if root._getOb('service_subscriptions_mailhost', None) is not None:
            root.manage_renameObject(
                'service_subscriptions_mailhost',
                'service_mailhost')

        if hasattr(aq_base(root), '__initialization__'):
            delattr(root, '__initialization__')
        return root
Example #8
0
    def test_extension_egg(self):
        extension = extensionRegistry.get_extension('silva.core.layout')
        self.assertNotEqual(extension, None)

        self.assertTrue(verifyObject(IExtension, extension))
        self.assertEqual(extension.name, 'silva.core.layout')
        self.assertEqual(extension.title, 'Silva Core Layout')
        self.assertEqual(extension.product, 'silva.core.layout')
        self.assertEqual(extension.module_name, 'silva.core.layout')
        self.assertEqual(extension.description,
                         'Layout and theme engine for Silva CMS')
    def test_extension_egg(self):
        extension = extensionRegistry.get_extension('silva.core.layout')
        self.assertNotEqual(extension, None)

        self.assertTrue(verifyObject(IExtension, extension))
        self.assertEqual(extension.name, 'silva.core.layout')
        self.assertEqual(extension.title, 'Silva Core Layout')
        self.assertEqual(extension.product, 'silva.core.layout')
        self.assertEqual(extension.module_name, 'silva.core.layout')
        self.assertEqual(
            extension.description,
            'Layout and theme engine for Silva CMS')
Example #10
0
def registerIcon(config, extension_name, cls, icon):
    """Register icon for a class.
    """
    if icon is None:
        return

    if not IIcon.providedBy(icon):
        extension = extensionRegistry.get_extension(extension_name)
        fs_path = os.path.join(extension.module_directory, icon)
        name = ''.join((
                'icon-',
                cls.meta_type.strip().replace(' ', '-'),
                os.path.splitext(icon)[1] or '.png'))

        factory = IconResourceFactory(name, fs_path)
        config.action(
            discriminator = ('resource', name, IHTTPRequest, Interface),
            callable = provideAdapter,
            args = (factory, (IHTTPRequest,), Interface, name))

        icon = Icon("++resource++" + name)

    icon_registry.register(('meta_type', cls.meta_type), icon)
    cls.icon = icon.icon
    def update(self, install=False, refresh=False, locations=[]):
        self.success = []
        self.errors = []
        if install:
            if not isinstance(locations, list):
                locations = [locations]
            for location in locations:
                candidates = list(self.context.get_installable_source(
                    location=location))
                if len(candidates) != 1:
                    self.errors.append(
                        _('${location}: Source was not found and could not be installed.',
                          mapping=dict(source=location)))
                else:
                    installable = candidates[0]
                    name = self._get_source_name(installable)
                    try:
                        if installable.install(self.context.get_root()):
                            self.success.append(
                                _('${name}: Source was installed.',
                                  mapping=dict(name=name)))
                        else:
                            self.errors.append(
                                _('${name}: Source is already installed.',
                                  mapping=dict(name=name)))
                    except InstallationError as error:
                        self.errors.append(
                            _('${name}: Error during the installation: ${error}.',
                              mapping=dict(name=name,
                                           error=error.args[0])))

        self.extensions = []
        self.sources = 0
        extensions = {}
        for source in self.context.get_installable_sources(refresh=refresh):
            if self.only_uninstalled and source.is_installed(self.context):
                continue
            sources = extensions.setdefault(source.extension, [])
            sources.append(source)
            self.sources += 1
        for name, sources in extensions.items():
            sources.sort(key=operator.attrgetter('title'))
            if name is None:
                self.extensions.append({
                    'title': _('Default code sources'),
                    'id': '0',
                    'description': '',
                    'sources': sources})
                continue
            identifier = str(name).encode('base64').strip().rstrip('=')
            extension = extensionRegistry.get_extension(name)
            if extension is None:
                self.extensions.append({
                    'title': name,
                    'id': identifier,
                    'description': '',
                    'sources': sources})
                continue
            self.extensions.append({
                'title': extension.title,
                'id': identifier,
                'description': extension.description,
                'sources': sources})
        self.extensions.sort(key=operator.itemgetter('title'))
Example #12
0
 def update(self):
     self.sites = self.context.objectValues('Silva Root')
     self.is_dev = Globals.DevelopmentMode
     self.version = extensionRegistry.get_extension('Silva').version
Example #13
0
 def test_extension_broken(self):
     # If you ask an unknown extension, you will get None
     extension = extensionRegistry.get_extension('SilvaInvalidExtension')
     self.assertEqual(extension, None)
Example #14
0
    def update(self, install=False, refresh=False, locations=[]):
        self.success = []
        self.errors = []
        if install:
            if not isinstance(locations, list):
                locations = [locations]
            for location in locations:
                candidates = list(
                    self.context.get_installable_source(location=location))
                if len(candidates) != 1:
                    self.errors.append(
                        _('${location}: Source was not found and could not be installed.',
                          mapping=dict(source=location)))
                else:
                    installable = candidates[0]
                    name = self._get_source_name(installable)
                    try:
                        if installable.install(self.context.get_root()):
                            self.success.append(
                                _('${name}: Source was installed.',
                                  mapping=dict(name=name)))
                        else:
                            self.errors.append(
                                _('${name}: Source is already installed.',
                                  mapping=dict(name=name)))
                    except InstallationError as error:
                        self.errors.append(
                            _('${name}: Error during the installation: ${error}.',
                              mapping=dict(name=name, error=error.args[0])))

        self.extensions = []
        self.sources = 0
        extensions = {}
        for source in self.context.get_installable_sources(refresh=refresh):
            if self.only_uninstalled and source.is_installed(self.context):
                continue
            sources = extensions.setdefault(source.extension, [])
            sources.append(source)
            self.sources += 1
        for name, sources in extensions.items():
            sources.sort(key=operator.attrgetter('title'))
            if name is None:
                self.extensions.append({
                    'title': _('Default code sources'),
                    'id': '0',
                    'description': '',
                    'sources': sources
                })
                continue
            identifier = str(name).encode('base64').strip().rstrip('=')
            extension = extensionRegistry.get_extension(name)
            if extension is None:
                self.extensions.append({
                    'title': name,
                    'id': identifier,
                    'description': '',
                    'sources': sources
                })
                continue
            self.extensions.append({
                'title': extension.title,
                'id': identifier,
                'description': extension.description,
                'sources': sources
            })
        self.extensions.sort(key=operator.itemgetter('title'))
Example #15
0
 def get_silva_software_version(self):
     """The version of the Silva software.
     """
     return extensionRegistry.get_extension('Silva').version
Example #16
0
 def get_silva_software_version(self):
     """The version of the Silva software.
     """
     return extensionRegistry.get_extension('Silva').version
def configure_models(service, event):
    root = aq_parent(service)
    if event.oldParent is None and IRoot.providedBy(root):
        extension = extensionRegistry.get_extension('silva.core.contentlayout')
        extension.installer.configure_content(root, extension)
Example #18
0
    def test_extension_product(self):
        extension = extensionRegistry.get_extension('Silva')
        self.assertNotEqual(extension, None)

        self.assertTrue(verifyObject(IExtension, extension))
        self.assertEqual(extension.name, 'Silva')
        self.assertEqual(extension.title, 'Silva Core')
        self.assertEqual(extension.product, 'Silva')
        self.assertEqual(extension.module_name, 'Products.Silva')
        self.assertEqual(
            extension.description,
            'Silva Content Management System')

        self.assertEqual(
            [c['name'] for c in extension.get_content()],
            ['Silva AutoTOC',
             'Silva Container Policy Registry',
             'Silva Message Service',
             'Silva Extension Service',
             'Silva File',
             'Silva Files Service',
             'Silva Folder',
             'Silva Ghost',
             'Silva Ghost Version',
             'Silva Ghost Asset',
             'Silva Ghost Folder',
             'Silva Image',
             'Silva Indexer',
             'Silva Link',
             'Silva Link Version',
             'Silva Publication',
             'Silva Root',
             'Silva Simple Member',
             'Silva Filtering Service',
             'Mockup Asset',
             'Mockup Non Publishable',
             'Mockup VersionedContent',
             'Mockup Version'])
        self.assertEqual(
            [c['product'] for c in extension.get_content()],
            ['Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva',
             'Silva'])
Example #19
0
 def test_extension_broken(self):
     # If you ask an unknown extension, you will get None
     extension = extensionRegistry.get_extension('SilvaInvalidExtension')
     self.assertEqual(extension, None)
Example #20
0
 def update(self):
     self.sites = self.context.objectValues('Silva Root')
     self.is_dev = Globals.DevelopmentMode
     self.version = extensionRegistry.get_extension('Silva').version
Example #21
0
 def getVersion(self):
     return 'Silva %s' % extensionRegistry.get_extension('Silva').version