--- /dev/null
+import phial
+
+def handler(request):
+ return phial.Response(
+ status='200 OK',
+ headers=[('Content-Type', 'text/plain')],
+ content=[b'Hello, world\n'],
+ )
+
+app = phial.App(handler)
+
+if __name__ == '__main__':
+ from twisted.internet import reactor
+ from twisted.web.server import Site
+ from twisted.web.wsgi import WSGIResource
+
+ reactor_args = {}
+ resource = WSGIResource(reactor, reactor.getThreadPool(), app)
+ site = Site(resource)
+ reactor.listenTCP(5000, site)
+ reactor.run(**reactor_args)
--- /dev/null
+import collections
+
+Request = collections.namedtuple(
+ 'Request',
+ (
+ 'environ',
+ )
+)
+
+Response = collections.namedtuple(
+ 'Response',
+ (
+ 'status',
+ 'headers',
+ 'content',
+ ),
+)
+
+def App(handler):
+ def app(environ, start_fn):
+ response = handler(Request(environ))
+
+ start_fn(response.status, response.headers)
+ return response.content
+ return app