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
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' ])
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
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
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')
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'))
def update(self): self.sites = self.context.objectValues('Silva Root') self.is_dev = Globals.DevelopmentMode self.version = extensionRegistry.get_extension('Silva').version
def test_extension_broken(self): # If you ask an unknown extension, you will get None extension = extensionRegistry.get_extension('SilvaInvalidExtension') self.assertEqual(extension, None)
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'))
def get_silva_software_version(self): """The version of the Silva software. """ return extensionRegistry.get_extension('Silva').version
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)
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'])
def test_extension_broken(self): # If you ask an unknown extension, you will get None extension = extensionRegistry.get_extension('SilvaInvalidExtension') self.assertEqual(extension, None)
def update(self): self.sites = self.context.objectValues('Silva Root') self.is_dev = Globals.DevelopmentMode self.version = extensionRegistry.get_extension('Silva').version
def getVersion(self): return 'Silva %s' % extensionRegistry.get_extension('Silva').version