def get_payload(self): try: screen = self.payload() except PageResult as error: screen = error.get_payload(self) navigation = self.get_navigation() metadata = { "ifaces": screen.get("ifaces", []), "title": { "ifaces": ["title"], "title": self.get_menu_title(), "icon": IIconResolver(self.request).get_content_url(self.context), }, "menu": { "content": self.get_menu_entries(ContentMenu), "view": self.get_menu_entries(ViewMenu), "actions": self.get_menu_entries(ActionMenu), "user": self.get_menu_entries(UserMenu), }, "path": self.get_content_path(self.context), } if not IRoot.providedBy(self.context): metadata["up"] = self.get_menu_parent() navigation["screen"] = metadata["up"].get("screen") return {"content": {"ifaces": ["screen"], "metadata": metadata, "screen": screen}, "navigation": navigation}
def silva_session_arg_generator(parent): root, options = parent.next() if not hasattr(options, 'paths') or not len(options.paths): fail(u"specifiy at least one Silva root path") for path in options.paths: try: silva = root.unrestrictedTraverse(path) except KeyError: fail("%s is not a valid Zope path" % path) if not IRoot.providedBy(silva): fail("%s is not a valid Silva root" % path) if ISite.providedBy(silva): setSite(silva) else: setSite(None) setHooks() if hasattr(options, 'username') and options.username: user = zope_find_user(silva, options.username) newSecurityManager(None, user) yield silva, options try: parent.next() except StopIteration: pass else: fail(u"internal error")
def container_moved_update_used_space(content, event): """Event called on folder, when they are moved, we want to update the quota on parents folders. """ if content != event.object or IRoot.providedBy(content): # Root is being destroyed, we don't care about quota anymore. return if event.newParent is event.oldParent: # For rename event, we don't need to do something. return service = queryUtility(IExtensionService) if service is None: return verify = service.get_quota_subsystem_status() if verify is None: # Quota accounting is disabled. return size = content.used_space if not size or size < 0: return if event.oldParent and IQuotaContainer.providedBy(event.oldParent): event.oldParent.update_used_space(-size, verify) if event.newParent and IQuotaContainer.providedBy(event.newParent): event.newParent.update_used_space(size, verify)
def run(self, root, options): if options.list: logger.info('Listing silva sites') for content in root.objectValues(): if IRoot.providedBy(content): logger.info('%s (version %s)' % ( '/'.join(content.getPhysicalPath()), content.get_silva_content_version())) return if not options.identifier: fail(u"Please provide a site identifier") identifier = options.identifier if ':' in identifier: identifier, title = identifier.split(':', 1) else: title = identifier if options.delete: if identifier not in root.objectIds(): fail( u'There is no such Silva root "%s" to delete.', identifier) root.manage_delObjects([identifier]) return if options.add: if identifier in root.objectIds(): fail( u'There is already a Zope object identifier by "%s"', identifier) factory = root.manage_addProduct['Silva'] factory.manage_addRoot(identifier, title) transaction.commit() logger.info( u'Silva root "%s" added.', identifier) root = root._getOb(identifier) if options.documentation: factory = root.manage_addProduct['SilvaFind'] factory.manage_addSilvaFind('search', 'Search this site') install_documentation(root, TestRequest()) transaction.commit() logger.info( u'Silva documentation installed inside Silva root "%s".', identifier) if options.user: parts = options.user.split(':') if len(parts) < 2 or len(parts) > 3: fail('Impossible to interpret user definition') username = parts[0] password = parts[1] role = parts[2] if len(parts) == 3 else 'Manager' acl_users = root._getOb('acl_users') users = acl_users._getOb('users') roles = acl_users._getOb('roles') if not role in roles.listRoleIds(): fail(u'Role "%s" unknown.' % role) users.addUser(username, username, password) roles.assignRoleToPrincipal(role, username) transaction.commit() logger.info( u'User added to Silva root "%s".', identifier)
def _get_source(self): c = self.aq_inner.aq_parent while True: if INewsPublication.providedBy(c): return c if IRoot.providedBy(c): return None c = c.aq_parent return None
def update(self): self.get_icon = IIconResolver(self.request).get_tag self.main_services = self.get_services(self.context.get_root()) self.local_services = None container = self.context.get_publication() while not IRoot.providedBy(container): if ISiteManager(container).is_site(): self.local_services = self.get_services(container) break container = aq_parent(container).get_publication()
def current_section_class(self): before = None for parent in self.request.PARENTS: if IRoot.providedBy(parent): if before is not None and ISilvaObject.providedBy(before): return 'section-{0}'.format(before.getId()) else: break before = parent return 'section-root'
def getStopCondition(self, container): ''' Returns true if recursive upward traversal has to stop. Subclasses may override. @param container: the actual container object ''' return (container is None or self._isLocalSite(container) or IRoot.providedBy(container) or #self._isVirtualHostRoot(container) or not ITraversable.providedBy(container))
def update_used_space(self, delta, verify=True): if IContentImporter.providedBy(aq_parent(self)): aq_inner(self).update_used_space(delta, verify) return self.used_space += delta # If we add stuff, check we're not over quota. if verify and delta > 0: self._verify_quota() if not IRoot.providedBy(self): container = aq_parent(self) if container is not None: container.update_used_space(delta, verify)
def get_default_viewer(context): """Adapter factory to get the contextual news viewer for a news item """ parents = context.aq_chain[1:] for parent in parents: if IRoot.providedBy(parent): return None if INewsViewer.providedBy(parent): return parent if INewsPublication.providedBy(parent): default = parent.get_default() if default and INewsViewer.providedBy(default): return default return None
def availableSources(context): """List available sources in the site starting at context. """ sources = {} while context is not None: for item in context.objectValues(): if (IExternalSource.providedBy(item) and item.id not in sources and item.is_usable()): sources[item.id] = item if IRoot.providedBy(context): break context = Acquisition.aq_parent(context) sources = list(sources.items()) sources.sort(key=lambda i: i[1].get_title().lower()) return sources
def availableSources(context): """List available sources in the site starting at context. """ sources = {} while context is not None: for item in context.objectValues(): if (IExternalSource.providedBy(item) and item.id not in sources and item.is_usable()): sources[item.id] = item if IRoot.providedBy(context): break context = Acquisition.aq_parent(context) sources = sources.items() sources.sort(key=lambda i: i[1].get_title().lower()) return sources
def register_remove(target, event): if not IContainer.providedBy(aq_parent(target)): return if IRoot.providedBy(event.object): # If you delete your Silva root, we don't care about anything. return if event.oldParent is not None: if event.object is target: if event.newParent is not event.oldParent: # That was a move or a delete, but not a rename invalidation_transaction.register_entry( target, 'remove') elif event.newParent is None: # This was a recursive delete invalidation_transaction.register_entry( target, 'remove')
def get_navigation(self): service = getUtility(IIntIds) parents = [] content = self.context.get_container() def identifier(content): return "nav" + str(service.register(content)) while content: parents.append(identifier(content)) if IRoot.providedBy(content): break content = aq_parent(content) parents.reverse() return {"current": parents}
def upgrade(self, root, from_version, to_version, whitelist=None, blacklist=None): """Upgrade a root object from the from_version to the to_version. """ if self.__in_process is True: raise ValueError(u"An upgrade process is already going on") log_stream = tempfile.NamedTemporaryFile() log_handler = logging.StreamHandler(log_stream) logger.addHandler(log_handler) try: logger.info( u'Upgrading from %s to %s.', from_version, to_version) notify(UpgradeStartedEvent(root, from_version, to_version)) start = datetime.datetime.now() end = None versions = get_upgrade_chain( self.__registry.keys(), from_version, to_version) if not versions: logger.info(u'Nothing needs to be done.') process = UpgradeProcess(self, versions, whitelist=whitelist, blacklist=blacklist) if IRoot.providedBy(root): # First, upgrade Silva Root so Silva services / # extensions will be upgraded logger.info( u'Upgrading root to versions %s.', ', '.join(versions)) process.upgrade_content(root) commit() # Now, upgrade site content logger.info(u'Upgrading content to version %s.', ', '.join(versions)) process.upgrade_container(root, blacklist=['Silva Root',]) process.post_upgrade() end = datetime.datetime.now() logger.info( u'Upgrade finished in %d seconds.', (end - start).seconds) finally: logger.removeHandler(log_handler) self.__in_process = False notify(UpgradeFinishedEvent(root, from_version, to_version, end is not None)) log_stream.seek(0, 0) return log_stream
def _breadcrumbs(self, preview=False, skip=None): name = minimize(self._title(preview=preview)) container = aq_parent(self.context) if skip is not None: while skip.providedBy(container): container = aq_parent(container) if (container is None or IRoot.providedBy(self.context) or self._virtual_root(self.context)): return ({'name': name, 'url': self.__str__()},) base = tuple() parent = queryMultiAdapter((container, self.request), IContentURL) if parent is not None: base = tuple(parent._breadcrumbs(preview, skip)) if (not IDisableBreadcrumbTag.providedBy(self.context) and (not IContent.providedBy(self.context) or not self.context.is_default())): base += ({'name': name, 'url': self.__str__()},) return base
def run(self, root, options): target = root target_path = options.folder or options.content to_version = root.get_silva_software_version() from_version = options.version if target_path and not from_version: logger.error('You need to provide --from-version ' 'to upgrade a folder or a content.') exit(3) if target_path: try: target = root.unrestrictedTraverse(target_path) except (KeyError, AttributeError): logger.error('Invalid content path %s.', target_path) exit(1) if not ISilvaObject.providedBy(target): logger.error('Content %s is not a Silva content.', target_path) exit(2) if not from_version: from_version = root.get_silva_content_version() logger.info("Upgrade from version %s to version %s." % ( from_version, to_version)) if options.content: registry.upgrade_content( target, from_version, to_version, whitelist=options.require_tags, blacklist=options.exclude_tags) else: registry.upgrade( target, from_version, to_version, whitelist=options.require_tags, blacklist=options.exclude_tags) if IRoot.providedBy(target): target._content_version = to_version transaction.commit()
def update(self): if IRoot.providedBy(self.context): self.fields['acquire'].mode = silvaforms.DISPLAY else: self.fields['acquire'].mode = silvaforms.INPUT
def is_installed(root, extension): return IRoot.providedBy(root)
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 available(self): if IRoot.providedBy(self.context): return False if not checkPermission('silva.ManageSilvaContent', self.context): return False return super(ContainerTypeForm, self).available()
def unregister(version, event): # If we remove the root, we can't unregister if not IRoot.providedBy(event.object): service = getUtility(IContentLayoutService) service.unregister_page_model(version)
def getRedirectedContent(self, form): content = form.context if not IRoot.providedBy(content): content = aq_parent(aq_inner(content)) return content