1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +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.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)
#=============================================================================

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
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