[Checkins] SVN: lovely.relation/trunk/ extend the
PropertyRelationManager to provide relations on a property based
Juergen Kartnaller
juergen at kartnaller.at
Wed Sep 12 12:00:51 EDT 2007
Log message for revision 79595:
extend the PropertyRelationManager to provide relations on a property based
on a relation type.
Changed:
U lovely.relation/trunk/CHANGES.txt
U lovely.relation/trunk/src/lovely/relation/property.py
U lovely.relation/trunk/src/lovely/relation/property.txt
-=-
Modified: lovely.relation/trunk/CHANGES.txt
===================================================================
--- lovely.relation/trunk/CHANGES.txt 2007-09-12 15:19:13 UTC (rev 79594)
+++ lovely.relation/trunk/CHANGES.txt 2007-09-12 16:00:51 UTC (rev 79595)
@@ -5,6 +5,9 @@
After
=====
+- extend the PropertyRelationManager to provide relations on a property based
+ on a relation type.
+
- DataRealtionProperty allows the annotation of the relation
Modified: lovely.relation/trunk/src/lovely/relation/property.py
===================================================================
--- lovely.relation/trunk/src/lovely/relation/property.py 2007-09-12 15:19:13 UTC (rev 79594)
+++ lovely.relation/trunk/src/lovely/relation/property.py 2007-09-12 16:00:51 UTC (rev 79595)
@@ -180,23 +180,23 @@
self.context = context
self._field = getattr(context.__class__, propertyName)
- def getRelations(self):
+ def getRelations(self, relType=None):
+ if relType is None:
+ relType = self._field._relType
manager = self._field._manager
if isinstance(self._field, RelationPropertyOut):
- return manager.getSourceRelations(
- self.context, self._field._relType)
+ return manager.getSourceRelations(self.context, relType)
else:
- return manager.getTargetRelations(
- self.context, self._field._relType)
+ return manager.getTargetRelations(self.context, relType)
- def getRelationTokens(self):
+ def getRelationTokens(self, relType=None):
+ if relType is None:
+ relType = self._field._relType
manager = self._field._manager
if isinstance(self._field, RelationPropertyOut):
- return manager.getSourceRelationTokens(
- self.context, self._field._relType)
+ return manager.getSourceRelationTokens(self.context, relType)
else:
- return manager.getTargetRelationTokens(
- self.context, self._field._relType)
+ return manager.getTargetRelationTokens(self.context, relType)
class RelationPropertyBase(object):
Modified: lovely.relation/trunk/src/lovely/relation/property.txt
===================================================================
--- lovely.relation/trunk/src/lovely/relation/property.txt 2007-09-12 15:19:13 UTC (rev 79594)
+++ lovely.relation/trunk/src/lovely/relation/property.txt 2007-09-12 16:00:51 UTC (rev 79595)
@@ -88,6 +88,7 @@
... teaser = RelationPropertyOut(documentTeaser)
... featured = RelationPropertyOut(documentTeaser, relType='featured')
... related = RelationPropertyOut(documentRelated)
+ ... connected = RelationPropertyOut(documentRelated, relType='connected')
... backrefs = RelationPropertyIn(documentRelated)
... def __init__(self, name):
... self.name = name
@@ -200,7 +201,6 @@
>>> doc1.related
[<document u'Doc Three'>, <document u'Doc Two'>]
-
Note are different to documents. They are not allowed to change/remove backrefs.
>>> class INote(interface.Interface):
@@ -378,7 +378,37 @@
>>> relations[0].sources, relations[0].targets
(<document u'Doc One'>, <document u'Doc Two'>)
+A more advanced use case is the use of backrefs for different relation types
+which is the case if a relation manager is used for different properties. Our
+test example provides this via the "related" and the "connected" property.
+ >>> manager = PropertyRelationManager(doc2, 'backrefs')
+
+There are currently no backrefs to the relation type "connected".
+
+ >>> [rel.sources for rel in manager.getRelations('connected')]
+ []
+
+But we have backrefs for "documentRelated" which is also the default relation
+type used if no relation type is given.
+
+ >>> [rel.sources for rel in manager.getRelations('documentRelated')]
+ [<document u'Doc One'>]
+ >>> [rel.sources for rel in manager.getRelations()]
+ [<document u'Doc One'>]
+
+Now we connect doc1 and doc2 to doc3.
+
+ >>> doc3.connected = [doc2, doc1]
+
+Now we have a backref for "connected".
+
+ >>> [rel.sources for rel in manager.getRelations('connected')]
+ [<document u'Doc Three'>]
+ >>> [rel.sources for rel in manager.getRelations('documentRelated')]
+ [<document u'Doc One'>]
+
+
Event Handlers
--------------
More information about the Checkins
mailing list