[Twisted-web] Some help with Nevow and databse I/O
egaumer at pagecache.org
Fri Feb 24 11:11:21 MST 2006
Twisted is relatively new to me but I've become fascinated by the idea of
asynchronous network programming and I generally enjoy the feel of the
I'm developing a web application with a limited set of pages that will
eventually serve as a bandwidth statistics application (uses SNMP to poll
I'm using newvow to render some simple XML pages which basically take the form
def data_listCusotmers(self, context, data):
args = inevow.IRequest(context).args
db = shelve.open('authdb')
docFactory = loaders.xmlfile('templates/ListCustomers.html')
I have two questions that are somewhat interrelated. In my test cases I have
authentication (using nevow session guard) setup using a SHA stored via the
The true customer info is stored in a MySQL database. I can pull that data
doing the following:
def data_query(self, context, data):
return self.dbpool.runQuery('SELECT name, email, id, TransferType,
basic_charge, over_charge, permitted_transfer FROM Customers')
I've read Abe's book on twisted and on page 54 he states "Nevow is designed
from the ground up for Twisted, which means you can use Deferreds everywhere"
My question is do I have to use the adbapi module or can I use deferreds to
handle database queries?
I've read the docs on deferreds but I'd be lying if I said I can fully wrap my
brain around all aspects of the concept or how it's implemented.
I don't understand why I would need separate threads in the first place. I
know that the query would block but isn't that transaction being done via
sockets anyway? Why can't I use the same mechanism (deferred) I would use, to
say, defer work waiting on a response from a mail server? Can't I submit a
query, have the reactor go do something else, and have a callback run when
the data becomes available? Why do I need to spawn threads to avoid blocking?
It should be pretty obvious that I don't fully grasp the concept of
asynchronous socket programming. Can somebody provide insight that may help
me to better understand things.
I can live with using the adbapi but wonder if it's possible to simply defer
that work and use a callback mechanism (I'm using the original twisted.web
I've also read Glyf's post where he states "The documentation is really poor,
and never says this, but using Twisted, or rather ADBAPI, to convert every
single SQL statement into a separate transaction and handle its results
separately, has a whole slew of problems".
I was pretty much heading down this road but I don't really understand how
else to do it. I've browsed many examples and have never really come across
one that involves session.guard, newvow, and db access all in the same
application. Anyone have any experience they could share?
Debian GNU/Linux PPC
egaumer at pagecache.org
PGP/GPG Key 0xF15D41E9
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 189 bytes
Desc: not available
Url : http://twistedmatrix.com/pipermail/twisted-web/attachments/20060224/273e48e7/attachment.pgp
More information about the Twisted-web