[Checkins] SVN: megrok.rdb/trunk/src/megrok/rdb/ More customization options for QueryContainer.

Martijn Faassen faassen at infrae.com
Thu Sep 4 14:23:01 EDT 2008


Log message for revision 90819:
  More customization options for QueryContainer.
  

Changed:
  U   megrok.rdb/trunk/src/megrok/rdb/README.txt
  U   megrok.rdb/trunk/src/megrok/rdb/components.py

-=-
Modified: megrok.rdb/trunk/src/megrok/rdb/README.txt
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/README.txt	2008-09-04 18:17:43 UTC (rev 90818)
+++ megrok.rdb/trunk/src/megrok/rdb/README.txt	2008-09-04 18:23:00 UTC (rev 90819)
@@ -442,4 +442,27 @@
   [True, True]
   >>> sorted([value.__name__ for (key, value) in qc.items()])
   [u'1', u'2']
-  
\ No newline at end of file
+ 
+Customizing QueryContainer further
+----------------------------------
+
+Sometimes it's useful to define a custom keyfunc and custom method to
+retrieve the key from the database - these usually are implemented
+together::
+
+  >>> class KeyfuncQueryContainer(rdb.QueryContainer):
+  ...   def query(self):
+  ...      return session.query(Department)
+  ...   def keyfunc(self, value):
+  ...      return 'd' + unicode(value.id)
+  ...   def dbget(self, key):
+  ...      if not key.startswith('d'):
+  ...          return None
+  ...      return self.query().get(key[1:])
+
+  >>> qc = KeyfuncQueryContainer()
+  >>> qc.keys()
+  [u'd1', u'd2']
+  >>> qc[u'd1'].id
+  1
+

Modified: megrok.rdb/trunk/src/megrok/rdb/components.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/components.py	2008-09-04 18:17:43 UTC (rev 90818)
+++ megrok.rdb/trunk/src/megrok/rdb/components.py	2008-09-04 18:23:00 UTC (rev 90819)
@@ -117,14 +117,17 @@
         return value
 
     def __getitem__(self, key):
-        result = self.query().get(key)
+        result = self.dbget(key)
         if result is None:
             raise KeyError(key)
         result = self.convert(result)
         result.__parent__ = self
         result.__name__ = key
         return result
-    
+
+    def dbget(self, key):        
+        return self.query().get(key)
+
     def get(self, key, default=None):
         try:
             return self[key]



More information about the Checkins mailing list