add ParentRelation property descriptor
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2913 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
96043fb340
commit
ab0e08e67d
1 changed files with 25 additions and 4 deletions
29
common.py
29
common.py
|
@ -302,10 +302,10 @@ class RelationSet(object):
|
||||||
|
|
||||||
class ParentRelationSet(RelationSet):
|
class ParentRelationSet(RelationSet):
|
||||||
|
|
||||||
def add(self, related):
|
def add(self, related, order=0, relevance=1.0):
|
||||||
if isinstance(related, AdapterBase):
|
if isinstance(related, AdapterBase):
|
||||||
related = related.context
|
related = related.context
|
||||||
self.context.assignParent(related, self.predicate)
|
self.context.assignParent(related, self.predicate, order, relevance)
|
||||||
|
|
||||||
def remove(self, related):
|
def remove(self, related):
|
||||||
if isinstance(related, AdapterBase):
|
if isinstance(related, AdapterBase):
|
||||||
|
@ -319,10 +319,10 @@ class ParentRelationSet(RelationSet):
|
||||||
|
|
||||||
class ChildRelationSet(RelationSet):
|
class ChildRelationSet(RelationSet):
|
||||||
|
|
||||||
def add(self, related):
|
def add(self, related, order=0, relevance=1.0):
|
||||||
if isinstance(related, AdapterBase):
|
if isinstance(related, AdapterBase):
|
||||||
related = related.context
|
related = related.context
|
||||||
self.context.assignChild(related, self.predicate)
|
self.context.assignChild(related, self.predicate, order, relevance)
|
||||||
|
|
||||||
def remove(self, related):
|
def remove(self, related):
|
||||||
if isinstance(related, AdapterBase):
|
if isinstance(related, AdapterBase):
|
||||||
|
@ -370,6 +370,27 @@ class ChildRelationSetProperty(RelationSetProperty):
|
||||||
factory = ChildRelationSet
|
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)
|
# caching (TBD)
|
||||||
|
|
||||||
def cached(obj):
|
def cached(obj):
|
||||||
|
|
Loading…
Add table
Reference in a new issue