[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