mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +01:00
refactor webapp: RewriteLiveHandler and WBHandler share a common base class,
SearchPageWbUrlHandler which renders the search page when there is no wburl move some inits from pywb_init to WBHandler itself
This commit is contained in:
parent
7c57345363
commit
b8a17b7cab
@ -8,19 +8,55 @@ from pywb.utils.loaders import BlockLoader
|
|||||||
from pywb.framework.basehandlers import BaseHandler, WbUrlHandler
|
from pywb.framework.basehandlers import BaseHandler, WbUrlHandler
|
||||||
from pywb.framework.wbrequestresponse import WbResponse
|
from pywb.framework.wbrequestresponse import WbResponse
|
||||||
|
|
||||||
|
from pywb.warc.recordloader import ArcWarcRecordLoader
|
||||||
|
from pywb.warc.resolvingloader import ResolvingLoader
|
||||||
|
|
||||||
|
from views import J2TemplateView, add_env_globals
|
||||||
|
from replay_views import ReplayView
|
||||||
|
|
||||||
|
|
||||||
|
#=================================================================
|
||||||
|
class SearchPageWbUrlHandler(WbUrlHandler):
|
||||||
|
"""
|
||||||
|
Loads a default search page html template to be shown when
|
||||||
|
the wb_url is empty
|
||||||
|
"""
|
||||||
|
def __init__(self, config):
|
||||||
|
self.search_view = (J2TemplateView.
|
||||||
|
create_template(config.get('search_html'),
|
||||||
|
'Search Page'))
|
||||||
|
|
||||||
|
def render_search_page(self, wbrequest, **kwargs):
|
||||||
|
if self.search_view:
|
||||||
|
return self.search_view.render_response(wbrequest=wbrequest,
|
||||||
|
prefix=wbrequest.wb_prefix,
|
||||||
|
**kwargs)
|
||||||
|
else:
|
||||||
|
return WbResponse.text_response('No Lookup Url Specified')
|
||||||
|
|
||||||
|
|
||||||
#=================================================================
|
#=================================================================
|
||||||
# Standard WB Handler
|
# Standard WB Handler
|
||||||
#=================================================================
|
#=================================================================
|
||||||
class WBHandler(WbUrlHandler):
|
class WBHandler(SearchPageWbUrlHandler):
|
||||||
def __init__(self, index_reader, replay,
|
def __init__(self, query_handler, config=None):
|
||||||
search_view=None, config=None):
|
super(WBHandler, self).__init__(config)
|
||||||
|
|
||||||
self.index_reader = index_reader
|
self.index_reader = query_handler
|
||||||
|
|
||||||
self.replay = replay
|
cookie_maker = config.get('cookie_maker')
|
||||||
|
record_loader = ArcWarcRecordLoader(cookie_maker=cookie_maker)
|
||||||
|
|
||||||
self.search_view = search_view
|
paths = config.get('archive_paths')
|
||||||
|
|
||||||
|
resolving_loader = ResolvingLoader(paths=paths,
|
||||||
|
record_loader=record_loader)
|
||||||
|
|
||||||
|
template_globals = config.get('template_globals')
|
||||||
|
if template_globals:
|
||||||
|
add_env_globals(template_globals)
|
||||||
|
|
||||||
|
self.replay = ReplayView(resolving_loader, config)
|
||||||
|
|
||||||
self.fallback_handler = None
|
self.fallback_handler = None
|
||||||
self.fallback_name = config.get('fallback')
|
self.fallback_name = config.get('fallback')
|
||||||
@ -59,14 +95,6 @@ class WBHandler(WbUrlHandler):
|
|||||||
|
|
||||||
return self.fallback_handler(wbrequest)
|
return self.fallback_handler(wbrequest)
|
||||||
|
|
||||||
def render_search_page(self, wbrequest, **kwargs):
|
|
||||||
if self.search_view:
|
|
||||||
return self.search_view.render_response(wbrequest=wbrequest,
|
|
||||||
prefix=wbrequest.wb_prefix,
|
|
||||||
**kwargs)
|
|
||||||
else:
|
|
||||||
return WbResponse.text_response('No Lookup Url Specified')
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return 'Web Archive Replay Handler'
|
return 'Web Archive Replay Handler'
|
||||||
|
|
||||||
|
@ -2,17 +2,21 @@ from pywb.framework.basehandlers import WbUrlHandler
|
|||||||
from pywb.framework.wbrequestresponse import WbResponse
|
from pywb.framework.wbrequestresponse import WbResponse
|
||||||
from pywb.framework.archivalrouter import ArchivalRouter, Route
|
from pywb.framework.archivalrouter import ArchivalRouter, Route
|
||||||
|
|
||||||
from handlers import StaticHandler
|
from handlers import StaticHandler, SearchPageWbUrlHandler
|
||||||
|
|
||||||
from replay_views import RewriteLiveView
|
from replay_views import RewriteLiveView
|
||||||
|
|
||||||
|
|
||||||
#=================================================================
|
#=================================================================
|
||||||
class RewriteHandler(WbUrlHandler):
|
class RewriteHandler(SearchPageWbUrlHandler):
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
|
super(RewriteHandler, self).__init__(config)
|
||||||
self.rewrite_view = RewriteLiveView(config)
|
self.rewrite_view = RewriteLiveView(config)
|
||||||
|
|
||||||
def __call__(self, wbrequest):
|
def __call__(self, wbrequest):
|
||||||
|
if wbrequest.wb_url_str == '/':
|
||||||
|
return self.render_search_page(wbrequest)
|
||||||
|
|
||||||
return self.rewrite_view(wbrequest)
|
return self.rewrite_view(wbrequest)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -6,13 +6,9 @@ from pywb.framework.wbrequestresponse import WbRequest
|
|||||||
from pywb.framework.memento import MementoRequest
|
from pywb.framework.memento import MementoRequest
|
||||||
from pywb.framework.basehandlers import BaseHandler
|
from pywb.framework.basehandlers import BaseHandler
|
||||||
|
|
||||||
from pywb.warc.recordloader import ArcWarcRecordLoader
|
from views import J2TemplateView
|
||||||
from pywb.warc.resolvingloader import ResolvingLoader
|
|
||||||
|
|
||||||
from views import J2TemplateView, add_env_globals
|
|
||||||
from views import J2HtmlCapturesView, HeadInsertView
|
from views import J2HtmlCapturesView, HeadInsertView
|
||||||
|
|
||||||
from replay_views import ReplayView
|
|
||||||
from live_rewrite_handler import RewriteHandler
|
from live_rewrite_handler import RewriteHandler
|
||||||
|
|
||||||
from query_handler import QueryHandler
|
from query_handler import QueryHandler
|
||||||
@ -63,31 +59,10 @@ class DictChain:
|
|||||||
|
|
||||||
#=================================================================
|
#=================================================================
|
||||||
def create_wb_handler(query_handler, config):
|
def create_wb_handler(query_handler, config):
|
||||||
|
|
||||||
cookie_maker = config.get('cookie_maker')
|
|
||||||
record_loader = ArcWarcRecordLoader(cookie_maker=cookie_maker)
|
|
||||||
|
|
||||||
paths = config.get('archive_paths')
|
|
||||||
|
|
||||||
resolving_loader = ResolvingLoader(paths=paths,
|
|
||||||
record_loader=record_loader)
|
|
||||||
|
|
||||||
template_globals = config.get('template_globals')
|
|
||||||
if template_globals:
|
|
||||||
add_env_globals(template_globals)
|
|
||||||
|
|
||||||
replayer = ReplayView(resolving_loader, config)
|
|
||||||
|
|
||||||
search_view = (J2TemplateView.
|
|
||||||
create_template(config.get('search_html'),
|
|
||||||
'Search Page'))
|
|
||||||
|
|
||||||
wb_handler_class = config.get('wb_handler_class', WBHandler)
|
wb_handler_class = config.get('wb_handler_class', WBHandler)
|
||||||
|
|
||||||
wb_handler = wb_handler_class(
|
wb_handler = wb_handler_class(
|
||||||
query_handler,
|
query_handler,
|
||||||
replayer,
|
|
||||||
search_view=search_view,
|
|
||||||
config=config,
|
config=config,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ class BaseContentView(object):
|
|||||||
def __call__(self, wbrequest, *args):
|
def __call__(self, wbrequest, *args):
|
||||||
# render top level frame if in frame mode
|
# render top level frame if in frame mode
|
||||||
# (not supported in proxy mode)
|
# (not supported in proxy mode)
|
||||||
if (self.is_frame_mode and
|
if (self.is_frame_mode and wbrequest.wb_url and
|
||||||
not wbrequest.wb_url.mod and
|
not wbrequest.wb_url.mod and
|
||||||
not wbrequest.options['is_proxy'] and
|
not wbrequest.options['is_proxy'] and
|
||||||
not wbrequest.options.get('is_timegate', False)):
|
not wbrequest.options.get('is_timegate', False)):
|
||||||
|
@ -2,8 +2,6 @@ from pywb.utils.timeutils import timestamp_to_datetime
|
|||||||
from pywb.framework.wbrequestresponse import WbResponse
|
from pywb.framework.wbrequestresponse import WbResponse
|
||||||
from pywb.framework.memento import make_timemap, LINK_FORMAT
|
from pywb.framework.memento import make_timemap, LINK_FORMAT
|
||||||
|
|
||||||
from handlers import WBHandler
|
|
||||||
|
|
||||||
import urlparse
|
import urlparse
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -62,7 +60,8 @@ def is_wb_handler(obj):
|
|||||||
if not hasattr(obj, 'handler'):
|
if not hasattr(obj, 'handler'):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return isinstance(obj.handler, WBHandler)
|
#return isinstance(obj.handler, WBHandler)
|
||||||
|
return obj.handler.__class__.__name__ == "WBHandler"
|
||||||
|
|
||||||
|
|
||||||
#=================================================================
|
#=================================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user