[Twisted-Python] How to return a meaningful response to an AMP command when deferreds are involved?

Nathan nathan.stocks at gmail.com
Wed Apr 2 13:05:49 MDT 2008


On my AMP server I'm using twisted.enterprise to query a postgres
database and do inserts.  I'd like to return whether the insert
succeeded or failed as the response to the AMP responder function --
is there an established pattern for doing things like that?

So basically, with the amp command:

class MyInsert(amp.Command):
   arguments = [('an_int',amp.Integer())]
   response = [('succeeded',amp.Boolean())]

....on the client I do:

amp_client.callRemote(MyInsert, an_int)

...on the server:

@MyInsert.responder
def my_insert(self, an_int):
   qry_def = self.dbpool.runOperation("insert into mytable the_number
values (%d);" % an_int)
   qry_def.addCallback(self._my_insert_ok)
   qry_def.addErrback(self._my_insert_err)
# Here's the AMP response...but I don't KNOW whether it succeeded yet!
# ...but I've _got_ to return a response dict  from this function or
AMP gives an error!
   return {'succeeded':True}

def _my_insert_ok(self, none_object):
   print "It succeeded"

def _my_insert_err(self, failure_object):
   print "It failed with: %s" % failure_object.getErrorMessage()

~ Nathan




More information about the Twisted-Python mailing list