run_dev_server.py revision 88448d9ae4dfff1805045790ef5f32495d62abcc
188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown#!/usr/bin/env python
288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown# Copyright (c) 2012 The Chromium Authors. All rights reserved.
388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown# Use of this source code is governed by a BSD-style license that can be
488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown# found in the LICENSE file.
588448d9ae4dfff1805045790ef5f32495d62abccJeff Brownimport optparse
688448d9ae4dfff1805045790ef5f32495d62abccJeff Brownimport os
788448d9ae4dfff1805045790ef5f32495d62abccJeff Brownimport sys
888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown
988448d9ae4dfff1805045790ef5f32495d62abccJeff Brownimport SimpleHTTPServer
1088448d9ae4dfff1805045790ef5f32495d62abccJeff Brownimport BaseHTTPServer
1188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown
1288448d9ae4dfff1805045790ef5f32495d62abccJeff Brownfrom build import calcdeps
1388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown
1488448d9ae4dfff1805045790ef5f32495d62abccJeff BrownDEFAULT_PORT = 8003
1588448d9ae4dfff1805045790ef5f32495d62abccJeff Brown
1688448d9ae4dfff1805045790ef5f32495d62abccJeff Brownclass Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
1788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  def do_GET(self):
1888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown    if self.path == '/src/deps.js':
1988448d9ae4dfff1805045790ef5f32495d62abccJeff Brown      self.log_message('Regenerating deps')
2088448d9ae4dfff1805045790ef5f32495d62abccJeff Brown      calcdeps.regenerate_deps()
2188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown    return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
2288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown
2388448d9ae4dfff1805045790ef5f32495d62abccJeff Brownclass Server(BaseHTTPServer.HTTPServer):
2488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  def handle_one_request(self):
2588448d9ae4dfff1805045790ef5f32495d62abccJeff Brown    try:
2688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown      HTTPServer.handle_one_request(self)
2788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown    except KeyboardInterrupt:
2888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown      sys.exit(255)
2988448d9ae4dfff1805045790ef5f32495d62abccJeff Brown
3088448d9ae4dfff1805045790ef5f32495d62abccJeff Browndef Main(args):
3188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  parser = optparse.OptionParser()
3288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  parser.add_option('--port',
3388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown                    action='store',
3488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown                    type='int',
3588448d9ae4dfff1805045790ef5f32495d62abccJeff Brown                    default=DEFAULT_PORT,
3688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown                    help='Port to serve from')
3788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  options, args = parser.parse_args()
3888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  server = Server(('', options.port), Handler)
3988448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  sys.stderr.write("Now running on http://localhost:%i\n" % options.port)
4088448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  server.serve_forever()
4188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown
4288448d9ae4dfff1805045790ef5f32495d62abccJeff Brownif __name__ == '__main__':
4388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  sys.exit(Main(sys.argv[1:]))
44