Python
11 Dec 2009 HTML Text
 
tornado adisp
 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import tornado.httpserver
import tornado.httpclient
import tornado.web
import tornado.options

from adisp import async, process

import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)

class MainHandler(tornado.web.RequestHandler):
    @process
    def perform_response(self, url):
        @async
        def do_get(callback):
            http = tornado.httpclient.AsyncHTTPClient()
            http.fetch(url, callback=lambda response: callback(response))

        response = yield do_get()

        if response.error:
            # Broken here
            raise tornado.web.HTTPError(500, 'Ooops')

        log.debug('Meoh!')
        self.write(response.body)
        self.finish()

    @tornado.web.asynchronous    
    def get(self, url):
        self.perform_response(url)
        log.debug('Nya!')

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

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