performance improvement: only create new relation if necessary
This commit is contained in:
parent
341371604c
commit
1d5b525a59
1 changed files with 13 additions and 9 deletions
22
common.py
22
common.py
|
@ -18,8 +18,6 @@
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Common stuff.
|
Common stuff.
|
||||||
|
|
||||||
$Id$
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from zope import component
|
from zope import component
|
||||||
|
@ -350,23 +348,24 @@ class RelationSet(object):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def predicate(self):
|
def predicate(self):
|
||||||
#return self.conceptManager[self.predicateName]
|
|
||||||
return self.conceptManager.get(self.predicateName)
|
return self.conceptManager.get(self.predicateName)
|
||||||
|
|
||||||
|
|
||||||
class ParentRelationSet(RelationSet):
|
class ParentRelationSet(RelationSet):
|
||||||
|
|
||||||
def add(self, related, order=0, relevance=1.0):
|
def add(self, related, order=0, relevance=1.0):
|
||||||
#if isinstance(related, AdapterBase):
|
|
||||||
# related = related.context
|
|
||||||
related = baseObject(related)
|
related = baseObject(related)
|
||||||
|
existing = list(self.context.getParentRelations([self.predicate], related,
|
||||||
|
noSecurityCheck=self.noSecurityCheck))
|
||||||
|
if len(existing) == 1:
|
||||||
|
rel = existing[0]
|
||||||
|
if rel.order == order and rel.relevance == relevance:
|
||||||
|
return
|
||||||
self.context.deassignParent(related, [self.predicate], # avoid duplicates
|
self.context.deassignParent(related, [self.predicate], # avoid duplicates
|
||||||
noSecurityCheck=self.noSecurityCheck)
|
noSecurityCheck=self.noSecurityCheck)
|
||||||
self.context.assignParent(related, self.predicate, order, relevance)
|
self.context.assignParent(related, self.predicate, order, relevance)
|
||||||
|
|
||||||
def remove(self, related):
|
def remove(self, related):
|
||||||
#if isinstance(related, AdapterBase):
|
|
||||||
# related = related.context
|
|
||||||
self.context.deassignParent(baseObject(related), [self.predicate])
|
self.context.deassignParent(baseObject(related), [self.predicate])
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
|
@ -396,8 +395,13 @@ class ParentRelationSet(RelationSet):
|
||||||
class ChildRelationSet(RelationSet):
|
class ChildRelationSet(RelationSet):
|
||||||
|
|
||||||
def add(self, related, order=0, relevance=1.0):
|
def add(self, related, order=0, relevance=1.0):
|
||||||
if isinstance(related, AdapterBase):
|
related = baseObject(related)
|
||||||
related = related.context
|
existing = list(self.context.getChildRelations([self.predicate], related,
|
||||||
|
noSecurityCheck=self.noSecurityCheck))
|
||||||
|
if len(existing) == 1:
|
||||||
|
rel = existing[0]
|
||||||
|
if rel.order == order and rel.relevance == relevance:
|
||||||
|
return
|
||||||
self.context.deassignChild(related, [self.predicate]) # avoid duplicates
|
self.context.deassignChild(related, [self.predicate]) # avoid duplicates
|
||||||
self.context.assignChild(related, self.predicate, order, relevance)
|
self.context.assignChild(related, self.predicate, order, relevance)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue