| Index: native_client_sdk/src/tools/httpd.py
|
| diff --git a/native_client_sdk/src/tools/httpd.py b/native_client_sdk/src/tools/httpd.py
|
| index f771d433e2f631f3b2f0bc0b3150ebe17826c4a7..4fcb89a685c5bc59c923808fe613f97427b9d319 100755
|
| --- a/native_client_sdk/src/tools/httpd.py
|
| +++ b/native_client_sdk/src/tools/httpd.py
|
| @@ -4,7 +4,6 @@
|
| # found in the LICENSE file.
|
|
|
| import BaseHTTPServer
|
| -import imp
|
| import logging
|
| import multiprocessing
|
| import optparse
|
| @@ -42,12 +41,9 @@ def SanityCheckDirectory(dirname):
|
| sys.exit(1)
|
|
|
|
|
| -class PluggableHTTPServer(BaseHTTPServer.HTTPServer):
|
| +class HTTPServer(BaseHTTPServer.HTTPServer):
|
| def __init__(self, *args, **kwargs):
|
| BaseHTTPServer.HTTPServer.__init__(self, *args)
|
| - self.serve_dir = kwargs.get('serve_dir', '.')
|
| - self.test_mode = kwargs.get('test_mode', False)
|
| - self.delegate_map = {}
|
| self.running = True
|
| self.result = 0
|
|
|
| @@ -56,64 +52,7 @@ class PluggableHTTPServer(BaseHTTPServer.HTTPServer):
|
| self.result = result
|
|
|
|
|
| -class PluggableHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
| - def _FindDelegateAtPath(self, dirname):
|
| - # First check the cache...
|
| - logging.debug('Looking for cached delegate in %s...' % dirname)
|
| - handler_script = os.path.join(dirname, 'handler.py')
|
| -
|
| - if dirname in self.server.delegate_map:
|
| - result = self.server.delegate_map[dirname]
|
| - if result is None:
|
| - logging.debug('Found None.')
|
| - else:
|
| - logging.debug('Found delegate.')
|
| - return result
|
| -
|
| - # Don't have one yet, look for one.
|
| - delegate = None
|
| - logging.debug('Testing file %s for existence...' % handler_script)
|
| - if os.path.exists(handler_script):
|
| - logging.debug(
|
| - 'File %s exists, looking for HTTPRequestHandlerDelegate.' %
|
| - handler_script)
|
| -
|
| - module = imp.load_source('handler', handler_script)
|
| - delegate_class = getattr(module, 'HTTPRequestHandlerDelegate', None)
|
| - delegate = delegate_class()
|
| - if not delegate:
|
| - logging.warn(
|
| - 'Unable to find symbol HTTPRequestHandlerDelegate in module %s.' %
|
| - handler_script)
|
| -
|
| - return delegate
|
| -
|
| - def _FindDelegateForURLRecurse(self, cur_dir, abs_root):
|
| - delegate = self._FindDelegateAtPath(cur_dir)
|
| - if not delegate:
|
| - # Didn't find it, try the parent directory, but stop if this is the server
|
| - # root.
|
| - if cur_dir != abs_root:
|
| - parent_dir = os.path.dirname(cur_dir)
|
| - delegate = self._FindDelegateForURLRecurse(parent_dir, abs_root)
|
| -
|
| - logging.debug('Adding delegate to cache for %s.' % cur_dir)
|
| - self.server.delegate_map[cur_dir] = delegate
|
| - return delegate
|
| -
|
| - def _FindDelegateForURL(self, url_path):
|
| - path = self.translate_path(url_path)
|
| - if os.path.isdir(path):
|
| - dirname = path
|
| - else:
|
| - dirname = os.path.dirname(path)
|
| -
|
| - abs_serve_dir = os.path.abspath(self.server.serve_dir)
|
| - delegate = self._FindDelegateForURLRecurse(dirname, abs_serve_dir)
|
| - if not delegate:
|
| - logging.info('No handler found for path %s. Using default.' % url_path)
|
| - return delegate
|
| -
|
| +class HTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
| def _SendNothingAndDie(self, result=0):
|
| self.send_response(200, 'OK')
|
| self.send_header('Content-type', 'text/html')
|
| @@ -121,18 +60,8 @@ class PluggableHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
| self.end_headers()
|
| self.server.Shutdown(result)
|
|
|
| - def send_head(self):
|
| - delegate = self._FindDelegateForURL(self.path)
|
| - if delegate:
|
| - return delegate.send_head(self)
|
| - return self.base_send_head()
|
| -
|
| - def base_send_head(self):
|
| - return SimpleHTTPServer.SimpleHTTPRequestHandler.send_head(self)
|
| -
|
| def do_GET(self):
|
| - # TODO(binji): pyauto tests use the ?quit=1 method to kill the server.
|
| - # Remove this when we kill the pyauto tests.
|
| + # Browsing to ?quit=1 will kill the server cleanly.
|
| _, _, _, query, _ = urlparse.urlsplit(self.path)
|
| if query:
|
| params = urlparse.parse_qs(query)
|
| @@ -140,39 +69,17 @@ class PluggableHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
| self._SendNothingAndDie()
|
| return
|
|
|
| - delegate = self._FindDelegateForURL(self.path)
|
| - if delegate:
|
| - return delegate.do_GET(self)
|
| - return self.base_do_GET()
|
| -
|
| - def base_do_GET(self):
|
| return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
|
|
| - def do_POST(self):
|
| - delegate = self._FindDelegateForURL(self.path)
|
| - if delegate:
|
| - return delegate.do_POST(self)
|
| - return self.base_do_POST()
|
| -
|
| - def base_do_POST(self):
|
| - if self.server.test_mode:
|
| - if self.path == '/ok':
|
| - self._SendNothingAndDie(0)
|
| - elif self.path == '/fail':
|
| - self._SendNothingAndDie(1)
|
| -
|
|
|
| class LocalHTTPServer(object):
|
| """Class to start a local HTTP server as a child process."""
|
|
|
| - def __init__(self, dirname, port, test_mode):
|
| + def __init__(self, dirname, port):
|
| parent_conn, child_conn = multiprocessing.Pipe()
|
| self.process = multiprocessing.Process(
|
| target=_HTTPServerProcess,
|
| - args=(child_conn, dirname, port, {
|
| - 'serve_dir': dirname,
|
| - 'test_mode': test_mode,
|
| - }))
|
| + args=(child_conn, dirname, port, {}))
|
| self.process.start()
|
| if parent_conn.poll(10): # wait 10 seconds
|
| self.port = parent_conn.recv()
|
| @@ -255,8 +162,7 @@ def _HTTPServerProcess(conn, dirname, port, server_kwargs):
|
| """
|
| try:
|
| os.chdir(dirname)
|
| - httpd = PluggableHTTPServer(('', port), PluggableHTTPRequestHandler,
|
| - **server_kwargs)
|
| + httpd = HTTPServer(('', port), HTTPRequestHandler, **server_kwargs)
|
| except socket.error as e:
|
| sys.stderr.write('Error creating HTTPServer: %s\n' % e)
|
| sys.exit(1)
|
| @@ -288,10 +194,6 @@ def main(args):
|
| parser.add_option('--no-dir-check', '--no_dir_check',
|
| help='No check to ensure serving from safe directory.',
|
| dest='do_safe_check', action='store_false', default=True)
|
| - parser.add_option('--test-mode',
|
| - help='Listen for posts to /ok or /fail and shut down the server with '
|
| - ' errorcodes 0 and 1 respectively.',
|
| - action='store_true')
|
|
|
| # To enable bash completion for this command first install optcomplete
|
| # and then add this line to your .bashrc:
|
| @@ -306,8 +208,7 @@ def main(args):
|
| if options.do_safe_check:
|
| SanityCheckDirectory(options.serve_dir)
|
|
|
| - server = LocalHTTPServer(options.serve_dir, int(options.port),
|
| - options.test_mode)
|
| + server = LocalHTTPServer(options.serve_dir, int(options.port))
|
|
|
| # Serve until the client tells us to stop. When it does, it will give us an
|
| # errorcode.
|
|
|