From bdb5d3ceb2734916683557d986dfd8112475e966 Mon Sep 17 00:00:00 2001 From: Wil Tan Date: Thu, 24 Dec 2009 20:13:03 +1100 Subject: [PATCH] initial commit --- src/README.rst | 22 ++++ src/gt/__init__.py | 0 src/gt/__init__.pyc | Bin 0 -> 129 bytes src/gt/monkey.py | 247 ++++++++++++++++++++++++++++++++++++++++++++ src/gt/monkey.pyc | Bin 0 -> 10242 bytes 5 files changed, 269 insertions(+) create mode 100644 src/README.rst create mode 100644 src/gt/__init__.py create mode 100644 src/gt/__init__.pyc create mode 100644 src/gt/monkey.py create mode 100644 src/gt/monkey.pyc diff --git a/src/README.rst b/src/README.rst new file mode 100644 index 0000000..4b3e4eb --- /dev/null +++ b/src/README.rst @@ -0,0 +1,22 @@ +gtornado = Tornado + gevent +=========================== + +:Author: Wil Tan +:Version: $Revision: + + +Introduction +------------ + +Tornado_ is a high performance web server and framework. It operates in a non-blocking fashion, +utilizing Linux's epoll_ facility when available. It also comes bundled with several niceties +such as authentication via OpenID, OAuth, secure cookies, templates, CSRF protection and UI modules. + +Unfortunately, some of its features ties the developer into its own asynchronous API implementation. + +This module is an experiment to monkey patch it just enough to make it run under gevent. +One advantage of doing so is that one can use a coroutine-style and code in a blocking fashion +while being able to use the tornado framework. + +.. _Tornado: http://www.tornadoweb.org/ +.. _epoll: http://www.kernel.org/doc/man-pages/online/pages/man4/epoll.4.html diff --git a/src/gt/__init__.py b/src/gt/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/gt/__init__.pyc b/src/gt/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6f9255b63a1597b51c9430e5e1e085d3ec71992 GIT binary patch literal 129 zcmdn|iI>ZCtATei0~9axV_9R2wC%)HE!_;|g7%3=hello') + + + def http_cb(r): + body = r.input_buffer.read() + treq = HTTPRequest( + r.typestr, # method + r.uri, # uri + headers=dict(r.get_input_headers()), # need to transform from list of tuples to dict + body=body, + remote_ip=r.remote_host, + protocol="http", # or https + host=None, # 127.0.0.1? + files=None, # ?? + connection=FakeConnection(r)) + + parse_post_body(treq, body) + + """ + print "http request = ", r + for m in dir(r): + o = eval("r." + m) + if type(o) in (str, list, int, tuple): + print "r.%s = %r" % (m, o) + """ + t_app(treq) + + self._httpserver = gevent.http.HTTPServer(http_cb) + + def listen(self, port): + self._httpserver.serve_forever(('0.0.0.0', port), backlog=128) + + @classmethod + def instance(cls): + print "new instance?" + if not hasattr(cls, "_instance"): + cls._instance = cls() + return cls._instance + + _httpserver = __import__('tornado.httpserver', fromlist=['fromlist_has_to_be_non_empty']) + _httpserver.HTTPServer = GHttpServer + + +def patch_tornado(): + patch_tornado_ioloop() + patch_tornado_httpserver() diff --git a/src/gt/monkey.pyc b/src/gt/monkey.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4497e92eea90dc6afa943dd6baef793ab1df537 GIT binary patch literal 10242 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 literal 0 HcmV?d00001