1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +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.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
#=================================================================
class WBHandler(WbUrlHandler):
def __init__(self, index_reader, replay,
search_view=None, config=None):
class WBHandler(SearchPageWbUrlHandler):
def __init__(self, query_handler, 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_name = config.get('fallback')
@ -59,14 +95,6 @@ class WBHandler(WbUrlHandler):
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):
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.archivalrouter import ArchivalRouter, Route
from handlers import StaticHandler
from handlers import StaticHandler, SearchPageWbUrlHandler
from replay_views import RewriteLiveView
#=================================================================
class RewriteHandler(WbUrlHandler):
class RewriteHandler(SearchPageWbUrlHandler):
def __init__(self, config):
super(RewriteHandler, self).__init__(config)
self.rewrite_view = RewriteLiveView(config)
def __call__(self, wbrequest):
if wbrequest.wb_url_str == '/':
return self.render_search_page(wbrequest)
return self.rewrite_view(wbrequest)
def __str__(self):

View File

@ -6,13 +6,9 @@ from pywb.framework.wbrequestresponse import WbRequest
from pywb.framework.memento import MementoRequest
from pywb.framework.basehandlers import BaseHandler
from pywb.warc.recordloader import ArcWarcRecordLoader
from pywb.warc.resolvingloader import ResolvingLoader
from views import J2TemplateView, add_env_globals
from views import J2TemplateView
from views import J2HtmlCapturesView, HeadInsertView
from replay_views import ReplayView
from live_rewrite_handler import RewriteHandler
from query_handler import QueryHandler
@ -63,31 +59,10 @@ class DictChain:
#=================================================================
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 = wb_handler_class(
query_handler,
replayer,
search_view=search_view,
config=config,
)

View File

@ -65,7 +65,7 @@ class BaseContentView(object):
def __call__(self, wbrequest, *args):
# render top level frame if in frame 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.options['is_proxy'] and
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.memento import make_timemap, LINK_FORMAT
from handlers import WBHandler
import urlparse
import logging
@ -62,7 +60,8 @@ def is_wb_handler(obj):
if not hasattr(obj, 'handler'):
return False
return isinstance(obj.handler, WBHandler)
#return isinstance(obj.handler, WBHandler)
return obj.handler.__class__.__name__ == "WBHandler"
#=================================================================