easy_tornado

easy_tornado is a tornado extension to make fast and easy to set up a web application with tornado webserver.

Source code at: http://github.com/felipecruz/tornado

Tornado HelloWorld

import tornado.httpserver
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

easy_tornado

from tornado.contrib.easy_app import start, \
                                     expose_get

@expose_get('/home/')
def home(tornado):
    tornado.write("Hello World")

start(__name__)

It will expose your function as get or post (@expose_get or @expose_set) to the url set on those decorators. Tornado parameter let you acess all tornado functions (write and render for example)

 

easy_tornado provides you another options

Expose system

It allow you to expose methods on some Class, with some settings. It’s very helpful to write small web applications as you write object-oriented systems.

code:

from tornado.contrib.easy_app import start, expose_get, expose_post
import os, datetime

settings = {
    "static_path": os.path.join(os.path.dirname(__file__), "static"),
}

class WikiPage():
    def __init__(self, id, content, parent=None):
        self.id = id
        self.content = content
        self.history = []
        self.last_modify = datetime.datetime.now()
        self.parent = parent

class Wiki():
    pages = {}

    def __init__(self):
        Wiki.pages['Teste'] = 'Pagina de Teste'

    @expose_get('/create')
    def page_create_page(self, tornado):
        tornado.render('templates/create_page.html')

    @expose_post('/post')
    def create_page(self, tornado):
        page = None
        wikipage = WikiPage(tornado.get_argument('name'), tornado.get_argument('content'), None)
        wikipage.last_modify = datetime.datetime.now()
        if wikipage.id in Wiki.pages:
            page = Wiki.pages[wikipage.id]
        if not page:
            Wiki.pages[wikipage.id] = wikipage

        tornado.redirect("/get/%s" % tornado.get_argument('name'))

    @expose_get('/get/(.+)')
    def get_page(self, id, tornado):
        if id in Wiki.pages:
            tornado.write(Wiki.pages[id])
        else:
            return None

start(Wiki, settings)

Expose classes

It will expose all classes in your module to ‘target’ attribute, both get and post methods

code:

from tornado.contrib.easy_app import start

class MainHandler():
    target = r'/(\w+)'
    def get(self, name):
        self.write("Hello %s" % name)

start(__name__)