def fullNumber(self, value): if IDraftedContent.providedBy(self): location = self.__parent__.getLocation() parents = filter(IUserManual.providedBy, [location] + getParents(location)) else: parents = filter(IUserManual.providedBy, getParents(self)) manual = parents[-1] numbers = map(int, value.split('.')) ct = getUtility(IContentType, name='content.usermanualpage') del self.__parent__[self.__name__] for number in numbers[0:-1]: try: manual = IOrder(manual).getByPosition(number) except KeyError: m = ct.create(_(u'Autocreated page'), _(u'Autocreated page description')) m.number = number ct.__bind__(manual).add(m) manual = m self.number = numbers[-1] manual[INameChooser(manual).chooseName(self.__name__, self)] = self IOrder(self.__parent__).rebuild() if IUserManualPage.providedBy(self.__parent__): return '%s.%s'%(self.__parent__.fullNumber, self.number) return str(self.number)
def getItemParentThreads(item): res = [] parents = [] for parent in [item]+getParents(item): for shortcut in IShortcuts(parent, {}).items(): res.append(parents + [shortcut]+ getParents(shortcut)) parents.append(parent) res.append(parents) def getUrl(items): items = filter(lambda y: not ISite.providedBy(y), items) items.reverse() return "%s/%s"%(absoluteURL(items[0], request), "/".join(map(lambda x: x.__name__, items[1:]))) return map(lambda x: getUrl(x), res)
def getServicePath(self): path = [ parent.__name__ for parent in getParents(self) if parent.__name__ ] path.reverse() path.append(self.__name__) return path
def evolve(context): root = getRootFolder(context) old_site = getSite() for site in findObjectsMatching(root, ISite.providedBy): setSite(site) try: for shortcut in list(findObjectsMatching(site, IShortcut.providedBy)): print 'updating shortcut', shortcut try: getParents(shortcut.raw_target) except TypeError: try: objectRemoved(shortcut.raw_target, None) except ComponentLookupError: pass finally: setSite(old_site)
def getId(self): context = self.context if not context.__name__: # always try to be unique return str(id(context)) parents = [context.__name__] parents += [parent.__name__ for parent in getParents(context) if parent.__name__] return '\\'.join(parents)
def getTitle(self, content): def itemtitle(i): item = IItem(i, None) if item is None: return i.__name__ else: return u"%s (%s)" % (item.title, i.__name__) items = filter(lambda x: x.__name__ is not None, reversed([content] + getParents(content))) return "/".join(map(itemtitle, items))
def __init__(self, context, request, view, manager=None): context = removeSecurityProxy(context) objects = [] vhr = request.getVirtualHostRoot() try: parents = [context] + list(getParents(context)) except: site = getSite() parents = [site] + list(getParents(site)) for obj in parents: objects.append(obj) if sameProxiedObjects(obj, vhr) or isinstance(obj, Exception): break objects.reverse() self.objects = objects super(BreadcrumbsViewlet, self).__init__( context, request, view, manager)
def update(self, instance): global tagging name = u'portlet:%s'%instance.__name__ value = self.genValue() # update self tagging.update(name, value, instance.context) # update in parents for context in getParents(instance.context): tagging.update(name, value, context)
def findObjectsProviding(root): if ISite.providedBy(root): yield root try: if len(getParents(root)) > 3: raise StopIteration() except TypeError: raise StopIteration() values = getattr(root, 'values', None) if callable(values): for subobj in values(): for match in findObjectsProviding(subobj): yield match
def _get_values(self, value, includeValue=False): try: intid = getUtility(IIntIds) parents = getParents(value) except: return None if includeValue: parents.append(value) ids = [] for ob in parents: id = intid.queryId(removeAllProxies(ob)) if id is not None: ids.append(id) if ids: return ids else: return None
def __call__(self): root = IPhysicallyLocatable(self.context).getNearestSite() parents = getParents(self.context) # remove all parents below the first found site while parents[-1] != root: parents.pop() parents.pop() #remove Site from parents parents.reverse() parentSiblings = [ sorted( [ {'name':IEntryNav(sibling).getEntryMenuName(), 'order':IEntryNav(sibling).getEntryMenuOrder(), 'url':absoluteURL(sibling, self.request), 'active':((sibling in parents) and 'parent') or False} for sibling in IEntryNav(item).getSiblings() ] , key=itemgetter('order')) for item in parents ] mySiblings = sorted( [ {'name':IEntryNav(sibling).getEntryMenuName(), 'order':IEntryNav(sibling).getEntryMenuOrder(), 'url':absoluteURL(sibling, self.request), 'active':((sibling == self.context) and 'self') or False} \ for sibling in IEntryNav(self.context).getSiblings() ] , key=itemgetter('order')) children = sorted( [ {'name':IEntryNav(child).getEntryMenuName(), 'order':IEntryNav(child).getEntryMenuOrder(), 'url':absoluteURL(child, self.request) } for child in IEntryNav(self.context).getChildren() ], key=itemgetter('order')) parentSiblings.append(mySiblings) if len(children): parentSiblings.append(children) return parentSiblings
def __call__(self, context): terms = [] ids = getUtility(IIntIds) site = getSite() try: for i in [site] + getParents(site): if not ISite.providedBy(i): continue setSite(i) fields = getUtility(IProfileFields) for name, field in fields.items(): id = ids.getId(field) path = getPath(i)[1:] if path: path += '/' terms.append((path+IItem(field).title, id)) terms.sort() return Vocabulary( [SimpleTerm(name, name, title) for title, name in terms]) finally: setSite(site)
def getURL(self, item): request = self.request try: parents = getParents(item) except TypeError: return '#' def getItemParentThreads(item): res = [] parents = [] for parent in [item]+getParents(item): for shortcut in IShortcuts(parent, {}).items(): res.append(parents + [shortcut]+ getParents(shortcut)) parents.append(parent) res.append(parents) def getUrl(items): items = filter(lambda y: not ISite.providedBy(y), items) items.reverse() return "%s/%s"%(absoluteURL(items[0], request), "/".join(map(lambda x: x.__name__, items[1:]))) return map(lambda x: getUrl(x), res) contextURL = absoluteURL(self.context, self.request) try: return filter(lambda x: contextURL in x, getItemParentThreads(item))[0] except IndexError: return absoluteURL(item, request)
def singleBranchTree(self, root=''): """Return an XML document with the siblings and parents of an object. There is only one branch expanded, in other words, the tree is filled with the object, its siblings and its parents with their respective siblings. """ result = 'selected' oldItem = self.context vh = self.request.getVirtualHostRoot() if vh: vhrootView = getMultiAdapter( (vh, self.request), name='absolute_url') baseURL = vhrootView() + '/' try: rootName = '[' + vh.__name__ + ']' except: # we got the containment root itself as the virtual host # and there is no name. rootName = _('[top]') parents = getParentsFromContextToObject(self.context, vh) else: rootName = _('[top]') baseURL = self.request.getApplicationURL() + '/' parents = getParents(self.context) rootName = translate(rootName, context=self.request, default=rootName) for item in parents: # skip skin if present #if item == oldItem: # continue subItems = [] if IReadContainer.providedBy(item): keys = list(item.keys()) if len(keys) >= 1000: keys = [] else: keys = [] # include the site manager keys.append(u'++etc++site') for name in keys: # Only include items we can traverse to subItem = traverse(item, name, None) iconUrl = self.getIconUrl(subItem) subitem_len = self.getLengthOf(subItem) if subitem_len >= 0: # the test below seems to be broken # with the ++etc++site case if subItem == oldItem: subItems.append(xmlEscapeWithCData( u'<collection name=%s length=%s ' u'icon_url=%s>%s</collection>', name, subitem_len, iconUrl, result)) else: subItems.append(xmlEscape( u'<collection name=%s length=%s ' u'icon_url=%s/>', name, subitem_len, iconUrl)) else: subItems.append(xmlEscape( u'<item name=%s icon_url=%s />', name, iconUrl)) result = u' '.join(subItems) oldItem = item # do not forget root folder iconUrl = self.getIconUrl(oldItem) result = xmlEscapeWithCData( u'<collection name=%s baseURL=%s length=%s ' u'icon_url=%s isroot="">%s</collection>', rootName, baseURL, len(oldItem), iconUrl, result) self.request.response.setHeader('Content-Type', 'text/xml') setNoCacheHeaders(self.request.response) title = translate(titleTemplate, context=self.request, default=titleTemplate) loading = translate(loadingMsg, context=self.request, default=loadingMsg) return xmlEscapeWithCData( u'<?xml version="1.0" ?>' u'<children title_tpl=%s loading_msg=%s>%s</children>', title, loading, result)
def UpdateEntryChildrenOnRemoveSubscriber(entry, event): for obj in getParents(entry): if IEntryCountChildren.providedBy(obj): obj.children -= 1 #remove one child-count on all parents
def UpdateEntryChildrenOnAddSubscriber(entry, event): for obj in getParents(entry): if IEntryCountChildren.providedBy(obj): obj.children += 1 #add one child-count on all parents
def _get_values_shortcuts(self, value, includeValue=False, includeShortcuts=True): try: intid = getUtility(IIntIds) parents = set(getParents(value)) except Exception, e: return None
def testGetParents(self): from zope.traversing.api import getParents self.assertEqual(getParents(self.item), [self.folder, self.root])
def url(self): return '%s/'%absoluteURL(filter(IUserManual.providedBy, getParents(self.context))[0], self.request)
def getServicePath(self): path = [parent.__name__ for parent in getParents(self) if parent.__name__] path.reverse() path.append(self.__name__) return path
def testGetParents(self): from zope.traversing.api import getParents self.assertEqual( getParents(self.item), [self.folder, self.root] )
def parents(self): parent_list = getParents(self.context) parent_list.reverse() return parent_list[1:]
def resultURL(self, context, request): site = None for path_element in [context] + getParents(context): if IQuotationtoolSite.providedBy(path_element): site = path_element return absoluteURL(site, request) + u"/@@searchResult.html"