mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-15 00:03:28 +01:00
wsgi server: default to gevent-based wsgi server for all cmd line server apps, add -s command for specifying server #201
cli: add 'webagg-server' cli command for running new webagg system tests: fix cli test for gevent server
This commit is contained in:
parent
4f9b963e13
commit
50a3353da3
@ -1,9 +1,4 @@
|
|||||||
import os
|
|
||||||
import logging
|
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from pywb.framework.wsgi_wrappers import init_app
|
|
||||||
from pywb.webapp.pywb_init import create_cdx_server_app, create_wb_router
|
|
||||||
|
|
||||||
|
|
||||||
#=================================================================
|
#=================================================================
|
||||||
def cdx_server(args=None): #pragma: no cover
|
def cdx_server(args=None): #pragma: no cover
|
||||||
@ -26,13 +21,18 @@ def wayback(args=None):
|
|||||||
desc='pywb Wayback Web Archive Replay').run()
|
desc='pywb Wayback Web Archive Replay').run()
|
||||||
|
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
def webagg():
|
||||||
|
WebaggCli().run()
|
||||||
|
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
class BaseCli(object):
|
class BaseCli(object):
|
||||||
def __init__(self, args=None, default_port=8080, desc=''):
|
def __init__(self, args=None, default_port=8080, desc=''):
|
||||||
parser = ArgumentParser(description=desc)
|
parser = ArgumentParser(description=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')
|
parser.add_argument('-s', '--server', default='gevent')
|
||||||
|
|
||||||
self.desc = desc
|
self.desc = desc
|
||||||
|
|
||||||
@ -40,6 +40,17 @@ class BaseCli(object):
|
|||||||
|
|
||||||
self.r = parser.parse_args(args)
|
self.r = parser.parse_args(args)
|
||||||
|
|
||||||
|
if self.r.server == 'gevent':
|
||||||
|
try:
|
||||||
|
from gevent.monkey import patch_all; patch_all()
|
||||||
|
print('Using Gevent')
|
||||||
|
except:
|
||||||
|
print('No Gevent')
|
||||||
|
self.r.server = 'wsgiref'
|
||||||
|
|
||||||
|
from pywb.framework.wsgi_wrappers import init_app
|
||||||
|
self.init_app = init_app
|
||||||
|
|
||||||
self.application = self.load()
|
self.application = self.load()
|
||||||
|
|
||||||
def _extend_parser(self, parser): #pragma: no cover
|
def _extend_parser(self, parser): #pragma: no cover
|
||||||
@ -49,7 +60,9 @@ class BaseCli(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if self.r.server == 'waitress': #pragma: no cover
|
if self.r.server == 'gevent': #pragma: no cover
|
||||||
|
self.run_gevent()
|
||||||
|
elif self.r.server == 'waitress': #pragma: no cover
|
||||||
self.run_waitress()
|
self.run_waitress()
|
||||||
else:
|
else:
|
||||||
self.run_wsgiref()
|
self.run_wsgiref()
|
||||||
@ -63,6 +76,11 @@ class BaseCli(object):
|
|||||||
from pywb.framework.wsgi_wrappers import start_wsgi_ref_server
|
from pywb.framework.wsgi_wrappers import start_wsgi_ref_server
|
||||||
start_wsgi_ref_server(self.application, self.desc, port=self.r.port)
|
start_wsgi_ref_server(self.application, self.desc, port=self.r.port)
|
||||||
|
|
||||||
|
def run_gevent(self):
|
||||||
|
from gevent.pywsgi import WSGIServer
|
||||||
|
print('Starting Gevent Server on ' + str(self.r.port))
|
||||||
|
WSGIServer(('', self.r.port), self.application).serve_forever()
|
||||||
|
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
class LiveCli(BaseCli):
|
class LiveCli(BaseCli):
|
||||||
@ -79,7 +97,8 @@ class LiveCli(BaseCli):
|
|||||||
enable_auto_colls=False,
|
enable_auto_colls=False,
|
||||||
collections={'live': '$liveweb'})
|
collections={'live': '$liveweb'})
|
||||||
|
|
||||||
return init_app(create_wb_router, load_yaml=False, config=config)
|
from pywb.webapp.pywb_init import create_wb_router
|
||||||
|
return self.init_app(create_wb_router, load_yaml=False, config=config)
|
||||||
|
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
@ -98,6 +117,9 @@ class ReplayCli(BaseCli):
|
|||||||
def run(self):
|
def run(self):
|
||||||
if self.r.autoindex:
|
if self.r.autoindex:
|
||||||
from pywb.manager.manager import CollectionsManager
|
from pywb.manager.manager import CollectionsManager
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
m = CollectionsManager('', must_exist=False)
|
m = CollectionsManager('', must_exist=False)
|
||||||
if not os.path.isdir(m.colls_dir):
|
if not os.path.isdir(m.colls_dir):
|
||||||
msg = 'No managed directory "{0}" for auto-indexing'
|
msg = 'No managed directory "{0}" for auto-indexing'
|
||||||
@ -114,17 +136,29 @@ class ReplayCli(BaseCli):
|
|||||||
#=============================================================================
|
#=============================================================================
|
||||||
class CdxCli(ReplayCli): #pragma: no cover
|
class CdxCli(ReplayCli): #pragma: no cover
|
||||||
def load(self):
|
def load(self):
|
||||||
|
from pywb.webapp.pywb_init import create_cdx_server_app
|
||||||
super(CdxCli, self).load()
|
super(CdxCli, self).load()
|
||||||
return init_app(create_cdx_server_app,
|
return self.init_app(create_cdx_server_app,
|
||||||
load_yaml=True)
|
load_yaml=True)
|
||||||
|
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
class WaybackCli(ReplayCli):
|
class WaybackCli(ReplayCli):
|
||||||
def load(self):
|
def load(self):
|
||||||
|
from pywb.webapp.pywb_init import create_wb_router
|
||||||
super(WaybackCli, self).load()
|
super(WaybackCli, self).load()
|
||||||
return init_app(create_wb_router,
|
return self.init_app(create_wb_router,
|
||||||
load_yaml=True)
|
load_yaml=True)
|
||||||
|
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
class WebaggCli(BaseCli):
|
||||||
|
def load(self):
|
||||||
|
from pywb.apps.webagg import application
|
||||||
|
return application
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.run_gevent()
|
||||||
|
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
|
1
setup.py
1
setup.py
@ -107,6 +107,7 @@ setup(
|
|||||||
live-rewrite-server = pywb.apps.cli:live_rewrite_server
|
live-rewrite-server = pywb.apps.cli:live_rewrite_server
|
||||||
cdx-indexer = pywb.warc.cdxindexer:main
|
cdx-indexer = pywb.warc.cdxindexer:main
|
||||||
wb-manager = pywb.manager.manager:main_wrap_exc
|
wb-manager = pywb.manager.manager:main_wrap_exc
|
||||||
|
webagg-server = pywb.apps.cli:webagg
|
||||||
""",
|
""",
|
||||||
classifiers=[
|
classifiers=[
|
||||||
'Development Status :: 4 - Beta',
|
'Development Status :: 4 - Beta',
|
||||||
|
@ -80,25 +80,24 @@ class TestManagedColls(object):
|
|||||||
def teardown(self):
|
def teardown(self):
|
||||||
J2TemplateView.shared_jinja_env = None
|
J2TemplateView.shared_jinja_env = None
|
||||||
|
|
||||||
#@patch('waitress.serve', lambda *args, **kwargs: None)
|
@patch('pywb.apps.cli.BaseCli.run_gevent', lambda *args, **kwargs: None)
|
||||||
@patch('six.moves.BaseHTTPServer.HTTPServer.serve_forever', lambda *args, **kwargs: None)
|
|
||||||
def test_run_cli(self):
|
def test_run_cli(self):
|
||||||
""" test new wayback cli interface
|
""" test new wayback cli interface
|
||||||
test autoindex error before collections inited
|
test autoindex error before collections inited
|
||||||
"""
|
"""
|
||||||
from pywb.apps.cli import wayback
|
from pywb.apps.cli import wayback
|
||||||
|
|
||||||
wayback(['-p', '0'])
|
wayback(['-p', '0', '-s', 'gevent'])
|
||||||
|
|
||||||
# Nothing to auto-index.. yet
|
# Nothing to auto-index.. yet
|
||||||
with raises(SystemExit):
|
with raises(SystemExit):
|
||||||
wayback(['-a', '-p', '0'])
|
wayback(['-a', '-p', '0', '-s', 'gevent'])
|
||||||
|
|
||||||
colls = os.path.join(self.root_dir, 'collections')
|
colls = os.path.join(self.root_dir, 'collections')
|
||||||
os.mkdir(colls)
|
os.mkdir(colls)
|
||||||
|
|
||||||
pywb.manager.autoindex.keep_running = False
|
pywb.manager.autoindex.keep_running = False
|
||||||
wayback(['-a', '-p', '0'])
|
wayback(['-a', '-p', '0', '-s', 'gevent'])
|
||||||
|
|
||||||
def test_create_first_coll(self):
|
def test_create_first_coll(self):
|
||||||
""" Test first collection creation, with all required dirs
|
""" Test first collection creation, with all required dirs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user