Skip to content

Commit 0fd3d39

Browse files
committed
cli: use wsgiref w/ threading by default to support proxy mode
waitress still available with --server=waitress flag
1 parent 191ebe1 commit 0fd3d39

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

pywb/apps/cli.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def __init__(self, args=None, default_port=8080, desc=''):
3232
parser = ArgumentParser(desc)
3333
parser.add_argument('-p', '--port', type=int, default=default_port)
3434
parser.add_argument('-t', '--threads', type=int, default=4)
35+
parser.add_argument('-s', '--server')
3536

3637
self.desc = desc
3738

@@ -48,14 +49,19 @@ def load(self): #pragma: no cover
4849
pass
4950

5051
def run(self):
51-
try:
52-
from waitress import serve
53-
print(self.desc)
54-
serve(self.application, port=self.r.port, threads=self.r.threads)
55-
except ImportError: # pragma: no cover
56-
# Shouldn't ever happen as installing waitress, but just in case..
57-
from pywb.framework.wsgi_wrappers import start_wsgi_ref_server
58-
start_wsgi_ref_server(self.application, self.desc, port=self.r.port)
52+
if self.r.server == 'waitress':
53+
self.run_waitress()
54+
else:
55+
self.run_wsgiref()
56+
57+
def run_waitress(self):
58+
from waitress import serve
59+
print(self.desc)
60+
serve(self.application, port=self.r.port, threads=self.r.threads)
61+
62+
def run_wsgiref(self): #pragma: no cover
63+
from pywb.framework.wsgi_wrappers import start_wsgi_ref_server
64+
start_wsgi_ref_server(self.application, self.desc, port=self.r.port)
5965

6066

6167
#=============================================================================

pywb/framework/wsgi_wrappers.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,8 @@ def init_app(init_func, load_yaml=True, config_file=None, config=None):
161161

162162
#=================================================================
163163
def start_wsgi_ref_server(the_app, name, port): # pragma: no cover
164-
from wsgiref.simple_server import make_server
164+
from wsgiref.simple_server import make_server, WSGIServer
165+
from SocketServer import ThreadingMixIn
165166

166167
# disable is_hop_by_hop restrictions
167168
import wsgiref.handlers
@@ -172,8 +173,11 @@ def start_wsgi_ref_server(the_app, name, port): # pragma: no cover
172173

173174
logging.info('Starting %s on port %s', name, port)
174175

176+
class ThreadingWSGIServer(ThreadingMixIn, WSGIServer):
177+
pass
178+
175179
try:
176-
httpd = make_server('', port, the_app)
180+
httpd = make_server('', port, the_app, ThreadingWSGIServer)
177181
httpd.serve_forever()
178182
except KeyboardInterrupt as ex:
179183
pass

0 commit comments

Comments
 (0)