Skip to content
A small collection of useful utilities for the Tornado Webserver
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This is a collection of addons and accompanying unit tests for the excellent Tornado web server

These addons are licensed the same as Tornado under the Apache Licence, Version 2.0 (


Just place this directory in your python path or run the following:

sudo python install


Every addon will have a set of accompanying unit tests. We prefer to run them via Nose.

cd tornado_addons/


The best source of information is the comments in or They're fairly well commented and give a better understanding of the libs.


Here's a simple example.

import tornado.web
from tornado_addons.route import route

class SomeHandler(tornado.web.RequestHandler):

t = tornado.web.Application(route.get_routes(), {'some app': 'settings'}

Async yields

Here's an example with normal callbacks.

from tornado.httpclient import AsyncHTTPClient

class SomeHandler(tornado.web.RequestHandler):
    def get(self):
        self.somedata = 'xxx'
        AsyncHTTPClient.fetch( 'http://over/there',
            callback=self.my_async_http_cb )

    def my_async_http_cb(self, fetch_data):
        # do stuff with fetchdata here

Or, you can wrap your methods with async_yield...

from tornado_addons.async_yield import async_yield, AsyncYieldMixin

class SomeHandler(tornado.web.RequestHandler, AsyncYieldMixin):

    def some_func(self, callback):
        x = yield some_async_call(callback=self.yield_cb)

    def get(self):
        ycb = self.yield_cb
        retval = yield some_func(ycb)
        somedata = 'xxx'
        fetchdata = yield AsyncHTTPClient.fetch( 'http://over/there',
                              callback=ycb )
        # do stuff with fetchdata here
        self.write(fetchdata.body if not fetchdata.error else '')

The @async_yield wrapper works for methods bound to a RequestHandler.


Cushion is a bit of an extraction layer around trombi, an asynchronous CouchDB driver for Tornado.

It provides a mixin for RequestHandler that simplifies database access, especially when used in conjunction with async_yield.

from tornado.web import RequestHandler
from tornado_addons.cushion import CushionDBMixin
from tornado_addons.async_yield import async_yield, AsyncYieldMixin

class SomeHandler(RequestHandler, CushionDBMixin, AsyncYieldMixin):

    def get(self):
        ycb = self.mycb('get')
        yield self.db_setup('someDB', uri_to_couchdb, ycb)
        x = yield self.db_one('some_key', ycb)
        # ... do stuff wth your data in x now
Something went wrong with that request. Please try again.