[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