[Twisted-Python] DB dictionary/tuple result wrapper for woven models

James Y Knight foom at fuhm.net
Wed Oct 15 01:21:30 EDT 2003

I took dtuple.py (a wrapper that makes database results look like both 
a tuple and a dictionary simultaneously, which I found on the web) and 
wrapped it as a woven model, so you can use your database results and 
get submodels with both integer keys and column-name keys. It seems 
like it's probably useful to a bunch of people, so I'm making it 

Currently living at:

dbtupleize(curs, *args, **kw):
   Use this function as the argument to adbapi.runInteraction.

   return dbpool.runInteraction(dbtupleize, "select * from table")

   It returns a DatabaseList of DatabaseTuples.

   A DatabaseList is just like a normal list execpt it has a getKeys()

   A DatabaseTuple is both a tuple and dictionary. If used as a tuple,
   it is ordered in the same order as the enclosing DatabaseList's
   getKeys() method.

   One use case is with a template like so:
       <table model="users" view="List">
	<tr pattern="listHeader" view="List" model="keys">
	  <th pattern="listItem" view="Text" model="."></th>
	<tr pattern="listItem" view="List" model=".">
	  <td pattern="listItem" view="Text" model="."></td>

    and a model like:
       wmfactory_users(self, request):
         return dbpool.runInteraction(dbtupleize, "select * from users")

   Another is a template like:
        Userid: <span model="curuser/userid" view="Text" /><br>
        Email: <span model="curuser/email" view="Text" /><br>

    with a model like:
      wmfactory_curuser(self, request):
        return dbpool.runInteraction(dbtupleize, "select * from users 
where userid=%(self.curuserid)s", {'curuserid':self.curuserid})

As you can see from the comments in the file, it is doing a bit of 
excessive wrapping (wrapping a model around a dbtuple around the actual 
results), but since IMO woven models need a rewrite anyways, I'm not 
too concerned about integrating them more tightly into things at the 
moment, now that this works the way it is.


More information about the Twisted-Python mailing list