1
0
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:
Ilya Kreymer 2014-07-21 21:25:10 -07:00
parent 7c57345363
commit b8a17b7cab
5 changed files with 52 additions and 46 deletions

View File

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

View File

@ -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):

View File

@ -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,
) )

View File

@ -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)):

View File

@ -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"
#================================================================= #=================================================================