1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-24 06:59:52 +01:00

cli: use wsgiref w/ threading by default to support proxy mode

waitress still available with --server=waitress flag
This commit is contained in:
Ilya Kreymer 2015-07-31 02:47:03 -07:00
parent 191ebe1132
commit 0fd3d39ab8
2 changed files with 20 additions and 10 deletions

View File

@ -32,6 +32,7 @@ class BaseCli(object):
parser = ArgumentParser(desc) parser = ArgumentParser(desc)
parser.add_argument('-p', '--port', type=int, default=default_port) parser.add_argument('-p', '--port', type=int, default=default_port)
parser.add_argument('-t', '--threads', type=int, default=4) parser.add_argument('-t', '--threads', type=int, default=4)
parser.add_argument('-s', '--server')
self.desc = desc self.desc = desc
@ -48,14 +49,19 @@ class BaseCli(object):
pass pass
def run(self): def run(self):
try: if self.r.server == 'waitress':
from waitress import serve self.run_waitress()
print(self.desc) else:
serve(self.application, port=self.r.port, threads=self.r.threads) self.run_wsgiref()
except ImportError: # pragma: no cover
# Shouldn't ever happen as installing waitress, but just in case.. def run_waitress(self):
from pywb.framework.wsgi_wrappers import start_wsgi_ref_server from waitress import serve
start_wsgi_ref_server(self.application, self.desc, port=self.r.port) 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)
#============================================================================= #=============================================================================

View File

@ -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 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 # disable is_hop_by_hop restrictions
import wsgiref.handlers 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) logging.info('Starting %s on port %s', name, port)
class ThreadingWSGIServer(ThreadingMixIn, WSGIServer):
pass
try: try:
httpd = make_server('', port, the_app) httpd = make_server('', port, the_app, ThreadingWSGIServer)
httpd.serve_forever() httpd.serve_forever()
except KeyboardInterrupt as ex: except KeyboardInterrupt as ex:
pass pass