diff --git a/common.py b/common.py index f6b19cf..493b14c 100644 --- a/common.py +++ b/common.py @@ -18,8 +18,6 @@ """ Common stuff. - -$Id$ """ from zope import component @@ -350,23 +348,24 @@ class RelationSet(object): @Lazy def predicate(self): - #return self.conceptManager[self.predicateName] return self.conceptManager.get(self.predicateName) class ParentRelationSet(RelationSet): def add(self, related, order=0, relevance=1.0): - #if isinstance(related, AdapterBase): - # related = related.context 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 noSecurityCheck=self.noSecurityCheck) self.context.assignParent(related, self.predicate, order, relevance) def remove(self, related): - #if isinstance(related, AdapterBase): - # related = related.context self.context.deassignParent(baseObject(related), [self.predicate]) def __iter__(self): @@ -396,8 +395,13 @@ class ParentRelationSet(RelationSet): class ChildRelationSet(RelationSet): def add(self, related, order=0, relevance=1.0): - if isinstance(related, AdapterBase): - related = related.context + related = baseObject(related) + 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.assignChild(related, self.predicate, order, relevance)