From ab0e08e67d639d10654bfdff897a67189c96afdd Mon Sep 17 00:00:00 2001 From: helmutm Date: Thu, 9 Oct 2008 13:03:58 +0000 Subject: [PATCH] add ParentRelation property descriptor git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2913 fd906abe-77d9-0310-91a1-e0d9ade77398 --- common.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/common.py b/common.py index a8ca7a1..46068c0 100644 --- a/common.py +++ b/common.py @@ -302,10 +302,10 @@ class RelationSet(object): class ParentRelationSet(RelationSet): - def add(self, related): + def add(self, related, order=0, relevance=1.0): if isinstance(related, AdapterBase): related = related.context - self.context.assignParent(related, self.predicate) + self.context.assignParent(related, self.predicate, order, relevance) def remove(self, related): if isinstance(related, AdapterBase): @@ -319,10 +319,10 @@ class ParentRelationSet(RelationSet): class ChildRelationSet(RelationSet): - def add(self, related): + def add(self, related, order=0, relevance=1.0): if isinstance(related, AdapterBase): related = related.context - self.context.assignChild(related, self.predicate) + self.context.assignChild(related, self.predicate, order, relevance) def remove(self, related): if isinstance(related, AdapterBase): @@ -370,6 +370,27 @@ class ChildRelationSetProperty(RelationSetProperty): factory = ChildRelationSet +class ParentRelation(object): + + def __init__(self, predicateName): + self.predicateName = predicateName + + def __get__(self, inst, class_=None): + if inst is None: + return self + for obj in ParentRelationSet(inst, self.predicateName): + return obj + return None + + def __set__(self, inst, value): + s = ParentRelationSet(inst, self.predicateName) + for current in s: + if current != value: + s.remove(current) + if value is not None: + s.add(value) + + # caching (TBD) def cached(obj):