Tornado, CouchDB Clients, LaunchPad OpenID and other fun explorations...

I've been working on something for my PyCon talk for *far* too long now.  I started in Nevow + Athena, which is a technology I'm moderately familiar with, having written Cinemon using it (though that was years ago now).  I got a nice single-person implementation done with Athena and then started looking into how to get Google/Yahoo/MSN single-sign-on integrated while getting some sort of persistence mechanism integrated.

I got stalled somewhere in there as I searched for the one-true-Twisted-web-way.  Stalling happens sometimes when my mind is saying "hey, this is way too much work for too little forward motion".  I probably burned half a dozen hours over almost a week pouring through (often broken) docs and code for Nevow, Athena, Guard, Twisted Web, Twisted Web2 and AsyncDB and came out mind-numbed and needing a break.

So, I spent time playing with twisted-cometd (broken, no longer even mentioned in release notes for the package), then I started playing with Tornado-in-Twisted... oh, OpenID auth is built in...  But doesn't seem to work in the Twisted version... so I decided to play with the non-Twisted version this evening.  A bit of impetus there came from the fact that a friend had offered to help with the project if we used Tornado :) .

That was easy.  I did a bit of work to get a login-with-LaunchPad (OpenID) button working (still unsatisfied with that, but just because I don't have a registration with them, so don't get back anything useful wrt metadata).  I set up a page to let the user choose from multiple identity providers for login.  I refactored the long-polling javascript client code from a demo to be more "me-ish".  Then I implemented a CouchDB client to provide storage.

CouchDB is actually new for me (one of the reasons I decided to play with it this evening).  I've seen many talks about it, watched people use it, read articles about the implementation, and generally understood it, but I'd never actually done anything with it.  So far, it seems easy.  I'm effectively using raw (async) HTTP queries to get/put/delete and query and even with that it's relatively straightforward.

Anyway, at this point I can actually start working on the tool I want to build again.  For now I'm going to go forward with the Tornado implementation and move my Athena UI prototype (which is 90% jquery, css and html) over to it.  With authentication and storage done (though I don't have MSN login, I'm likely going to punt on that) I can just finish the remainder of the UI coding and be done with it.  Maybe I'll look back at Twisted-Tornado if I find myself needing e.g. IRC bot integration (possible, but not critically important).  I doubt I'll go back to the Athena version at this point, not for any reason other than that I've got a working shell already.

Having now done some (relatively low-level) network coding (the CouchDB client) using Tornado's async model, I strongly prefer the Twisted Deferred, but the coherent documentation and API and built-in support for OpenID/OAuth means I have come un-stuck and can move forward again, and if that means using slightly more awkward callbacks, then so be it.


  1. Dirkjan Ochtman

    Dirkjan Ochtman on 12/29/2009 8:22 a.m. #

    You know about couchdb-python, paisley and couchdbkit already, right?

  2. Mike C. Fletcher

    Mike C. Fletcher on 12/29/2009 11:19 a.m. #

    I knew about couchdb-python (used it to poke around), paisley didn't come up as I wasn't playing with CouchDB when I was using Twisted. CouchDBKit never came up in my travels.

Comments are closed.


Pingbacks are closed.