Пример #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
Пример #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'
        ])
Пример #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)
Пример #4
0
 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
Пример #5
0
 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
Пример #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
Пример #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')
Пример #9
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')
Пример #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'))
Пример #12
0
 def update(self):
     self.sites = self.context.objectValues('Silva Root')
     self.is_dev = Globals.DevelopmentMode
     self.version = extensionRegistry.get_extension('Silva').version
Пример #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)
Пример #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'))
Пример #15
0
 def get_silva_software_version(self):
     """The version of the Silva software.
     """
     return extensionRegistry.get_extension('Silva').version
Пример #16
0
 def get_silva_software_version(self):
     """The version of the Silva software.
     """
     return extensionRegistry.get_extension('Silva').version
Пример #17
0
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)
Пример #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'])
Пример #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)
Пример #20
0
 def update(self):
     self.sites = self.context.objectValues('Silva Root')
     self.is_dev = Globals.DevelopmentMode
     self.version = extensionRegistry.get_extension('Silva').version
Пример #21
0
 def getVersion(self):
     return 'Silva %s' % extensionRegistry.get_extension('Silva').version