ed427633f87be41d20b3e97d263b7c0a15483b4f
[WebKit.git] / Tools / Scripts / webkitpy / benchmark_runner / http_server_driver / http_server / twisted_http_server.py
1 #!/usr/bin/env python
2
3 import argparse
4 import logging
5 import os
6 import sys
7 from pkg_resources import require, VersionConflict, DistributionNotFound
8
9 try:
10     require("Twisted>=15.5.0")
11     import twisted
12 except (ImportError, VersionConflict, DistributionNotFound):
13     sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../../..')))
14     from webkitpy.thirdparty.autoinstalled.twisted_15_5_0 import twisted
15
16 from twisted.web import static, server
17 from twisted.web.resource import Resource
18 from twisted.internet import reactor
19
20 _log = logging.getLogger(__name__)
21
22
23 class ServerControl(Resource):
24     isLeaf = True
25
26     def render_GET(self, request):
27         _log.info("Serving request %s" % request)
28         reactor.stop()
29         return ""
30
31     def render_POST(self, request):
32         _log.info("Serving request %s" % request)
33         sys.stdout.write(request.content.read())
34         sys.stdout.flush()
35         reactor.stop()
36         return 'OK'
37
38
39 if __name__ == '__main__':
40     parser = argparse.ArgumentParser(description='python twisted_http_server.py web_root')
41     parser.add_argument('web_root')
42     parser.add_argument('--port', type=int, default=0)
43     args = parser.parse_args()
44     web_root = static.File(args.web_root)
45     serverControl = ServerControl()
46     web_root.putChild('shutdown', serverControl)
47     web_root.putChild('report', serverControl)
48     reactor.listenTCP(args.port, server.Site(web_root))
49     reactor.run()