diff --git a/pywb/apps/cli.py b/pywb/apps/cli.py index 632f3380..cc572a1c 100644 --- a/pywb/apps/cli.py +++ b/pywb/apps/cli.py @@ -32,6 +32,7 @@ class BaseCli(object): parser = ArgumentParser(desc) parser.add_argument('-p', '--port', type=int, default=default_port) parser.add_argument('-t', '--threads', type=int, default=4) + parser.add_argument('-s', '--server') self.desc = desc @@ -48,14 +49,19 @@ class BaseCli(object): pass def run(self): - try: - from waitress import serve - print(self.desc) - serve(self.application, port=self.r.port, threads=self.r.threads) - except ImportError: # pragma: no cover - # Shouldn't ever happen as installing waitress, but just in case.. - from pywb.framework.wsgi_wrappers import start_wsgi_ref_server - start_wsgi_ref_server(self.application, self.desc, port=self.r.port) + if self.r.server == 'waitress': + self.run_waitress() + else: + self.run_wsgiref() + + def run_waitress(self): + from waitress import serve + print(self.desc) + serve(self.application, port=self.r.port, threads=self.r.threads) + + def run_wsgiref(self): #pragma: no cover + from pywb.framework.wsgi_wrappers import start_wsgi_ref_server + start_wsgi_ref_server(self.application, self.desc, port=self.r.port) #============================================================================= diff --git a/pywb/framework/wsgi_wrappers.py b/pywb/framework/wsgi_wrappers.py index bb2da921..87237399 100644 --- a/pywb/framework/wsgi_wrappers.py +++ b/pywb/framework/wsgi_wrappers.py @@ -161,7 +161,8 @@ def init_app(init_func, load_yaml=True, config_file=None, config=None): #================================================================= def start_wsgi_ref_server(the_app, name, port): # pragma: no cover - from wsgiref.simple_server import make_server + from wsgiref.simple_server import make_server, WSGIServer + from SocketServer import ThreadingMixIn # disable is_hop_by_hop restrictions import wsgiref.handlers @@ -172,8 +173,11 @@ def start_wsgi_ref_server(the_app, name, port): # pragma: no cover logging.info('Starting %s on port %s', name, port) + class ThreadingWSGIServer(ThreadingMixIn, WSGIServer): + pass + try: - httpd = make_server('', port, the_app) + httpd = make_server('', port, the_app, ThreadingWSGIServer) httpd.serve_forever() except KeyboardInterrupt as ex: pass