diff --git a/README.txt b/README.txt index 409fb20..3938d8b 100755 --- a/README.txt +++ b/README.txt @@ -19,9 +19,9 @@ with lower-level aspects like type or state management. >>> site = placefulSetUp(True) >>> from zope import component - >>> from zope.app import zapi >>> from zope.interface import Interface >>> from zope.publisher.browser import TestRequest + >>> from zope.traversing.api import getName Concepts and Relations @@ -70,11 +70,11 @@ ConceptRelation): We can now ask our concepts for their related child and parent concepts: - >>> [zapi.getName(c) for c in cc1.getChildren()] + >>> [getName(c) for c in cc1.getChildren()] [u'cc2'] >>> len(cc1.getParents()) 0 - >>> [zapi.getName(p) for p in cc2.getParents()] + >>> [getName(p) for p in cc2.getParents()] [u'cc1'] >>> len(cc2.getChildren()) @@ -283,7 +283,7 @@ from concepts to resources: >>> form = dict(action='remove', qualifier='resources', ... tokens=['.loops/resources/doc1:.loops/concepts/standard']) >>> view = ConceptConfigureView(cc1, TestRequest(form=form)) - >>> [zapi.getName(r.context) for r in view.resources()] + >>> [getName(r.context) for r in view.resources()] [u'doc1'] >>> view.update() True @@ -358,7 +358,7 @@ There are a few convienence methods for accessing parent and child nodes: True >>> m11.getParentNode() is m1 True - >>> [zapi.getName(child) for child in m11.getChildNodes()] + >>> [getName(child) for child in m11.getChildNodes()] [u'm111', u'm112'] What is returned by these may be controlled by the nodeType attribute: diff --git a/browser/concept.py b/browser/concept.py index d1f896e..7957577 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -112,8 +112,9 @@ class ConceptView(BaseView): cm = self.loopsRoot.getConceptManager() hasType = cm.getTypePredicate() standard = cm.getDefaultPredicate() - rels = sorted(self.context.getChildRelations(), - key=(lambda x: x.second.title.lower())) + #rels = sorted(self.context.getChildRelations(), + # key=(lambda x: x.second.title.lower())) + rels = self.context.getChildRelations() for r in rels: if r.predicate == hasType: # only show top-level entries for type instances: diff --git a/browser/node.py b/browser/node.py index d0f3589..aedd325 100644 --- a/browser/node.py +++ b/browser/node.py @@ -333,7 +333,11 @@ class NodeView(BaseView): def getUrlForTarget(self, target): """ Return URL of given target view given as .targetXXX URL. """ - return '%s/.target%s' % (self.url, target.uniqueId) + if isinstance(target, BaseView): + return '%s/.target%s' % (self.url, target.uniqueId) + else: + return ('%s/.target%s' % + (self.url, util.getUidForObject(target))) def getActions(self, category='object'): actions = [] diff --git a/concept.py b/concept.py index e679958..914446d 100644 --- a/concept.py +++ b/concept.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2005 Helmut Merz helmutm@cy55.de +# Copyright (c) 2007 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ $Id$ """ from zope import component, schema -from zope.app import zapi +#from zope.app import zapi from zope.app.container.btree import BTreeContainer from zope.app.container.contained import Contained from zope.cachedescriptors.property import Lazy @@ -31,7 +31,7 @@ from zope.component import adapts from zope.interface import implements from zope.interface import alsoProvides, directlyProvides, directlyProvidedBy from zope.security.proxy import removeSecurityProxy -from zope.traversing.api import getName +from zope.traversing.api import getName, getParent from persistent import Persistent from cybertools.relation import DyadicRelation @@ -64,8 +64,8 @@ class BaseRelation(DyadicRelation): def getPredicateName(self): baseName = super(BaseRelation, self).getPredicateName() - id = zapi.getUtility(IRelationRegistry).getUniqueIdForObject(self.predicate) - return '.'.join((baseName, str(id))) + id = util.getUidForObject(self.predicate) + return '.'.join((baseName, id)) # Problem with reindex catalog, needs __parent__ - but this does not help: #__parent__ = None @@ -121,7 +121,7 @@ class Concept(Contained, Persistent): typePred = self.getConceptManager().getTypePredicate() if typePred is None: raise ValueError('No type predicate found for ' - + zapi.getName(self)) + + getName(self)) if current is not None: self.deassignParent(current, [typePred]) self.assignParent(concept, typePred) @@ -131,7 +131,7 @@ class Concept(Contained, Persistent): return self.conceptType def getLoopsRoot(self): - return zapi.getParent(self).getLoopsRoot() + return getParent(self).getLoopsRoot() def getConceptManager(self): return self.getLoopsRoot().getConceptManager() @@ -158,14 +158,16 @@ class Concept(Contained, Persistent): rels = getRelations(second=self, relationships=relationships) return [r.first for r in rels] - def getChildRelations(self, predicates=None, child=None): + def getChildRelations(self, predicates=None, child=None, sort='default'): predicates = predicates is None and ['*'] or predicates relationships = [ConceptRelation(self, None, p) for p in predicates] - # TODO: sort... - return getRelations(first=self, second=child, relationships=relationships) + if sort == 'default': + sort = lambda x: (x.order, x.second.title.lower()) + return sorted(getRelations(first=self, second=child, relationships=relationships), + key=sort) - def getChildren(self, predicates=None): - return [r.second for r in self.getChildRelations(predicates)] + def getChildren(self, predicates=None, sort='default'): + return [r.second for r in self.getChildRelations(predicates, sort=sort)] def getParentRelations (self, predicates=None, parent=None): predicates = predicates is None and ['*'] or predicates @@ -179,7 +181,7 @@ class Concept(Contained, Persistent): def assignChild(self, concept, predicate=None, order=0, relevance=1.0): if predicate is None: predicate = self.getConceptManager().getDefaultPredicate() - registry = zapi.getUtility(IRelationRegistry) + registry = component.getUtility(IRelationRegistry) rel = ConceptRelation(self, concept, predicate) if order != 0: rel.order = order @@ -192,7 +194,7 @@ class Concept(Contained, Persistent): concept.assignChild(self, predicate, order, relevance) def deassignChild(self, child, predicates=None): - registry = zapi.getUtility(IRelationRegistry) + registry = component.getUtility(IRelationRegistry) for rel in self.getChildRelations(predicates, child): registry.unregister(rel) @@ -213,7 +215,7 @@ class Concept(Contained, Persistent): def assignResource(self, resource, predicate=None, order=0, relevance=1.0): if predicate is None: predicate = self.getConceptManager().getDefaultPredicate() - registry = zapi.getUtility(IRelationRegistry) + registry = component.getUtility(IRelationRegistry) rel = ResourceRelation(self, resource, predicate) if order != 0: rel.order = order @@ -223,7 +225,7 @@ class Concept(Contained, Persistent): registry.register(rel) def deassignResource(self, resource, predicates=None): - registry = zapi.getUtility(IRelationRegistry) + registry = component.getUtility(IRelationRegistry) for rel in self.getResourceRelations(predicates, resource): registry.unregister(rel) @@ -240,7 +242,7 @@ class ConceptManager(BTreeContainer): predicateType = None def getLoopsRoot(self): - return zapi.getParent(self) + return getParent(self) def getAllParents(self, collectGrants=False): return Jeep() @@ -250,7 +252,8 @@ class ConceptManager(BTreeContainer): def getTypeConcept(self): if self.typeConcept is None: - self.typeConcept = self['type'] + #self.typeConcept = self['type'] + self.typeConcept = self.get('type') return self.typeConcept def getDefaultPredicate(self): diff --git a/helpers.txt b/helpers.txt index 91e9fcc..2fe8b04 100755 --- a/helpers.txt +++ b/helpers.txt @@ -14,13 +14,13 @@ Let's first do some basic imports >>> site = placefulSetUp(True) >>> from zope import interface, component - >>> from zope.app import zapi >>> from zope.interface import Interface >>> from zope.publisher.browser import TestRequest and provide a relation registry: - >>> from cybertools.relation.interfaces import IRelationRegistry + >>> from cybertools.relation.tests import IntIdsStub + >>> component.provideUtility(IntIdsStub()) >>> from cybertools.relation.registry import DummyRelationRegistry >>> component.provideUtility(DummyRelationRegistry()) @@ -62,7 +62,7 @@ resources, >>> file1 = resources['file1'] = Resource(u'A file') >>> file1.resourceType = concepts['file'] -(the use of Document may get deprecated soon:) +(note: the use of Document is deprecated) >>> from loops.resource import Document >>> doc1 = Document(u'Zope Info') @@ -176,7 +176,7 @@ Now let's have a look at resources. >>> file1_type.factory -(The use of Document will be deprecated soon...) +(The use of Document is deprecated!) >>> from loops.interfaces import IResource, IDocument >>> from loops.type import ResourceType