diff --git a/pywb/webapp/handlers.py b/pywb/webapp/handlers.py index ecc477bc..6228de3e 100644 --- a/pywb/webapp/handlers.py +++ b/pywb/webapp/handlers.py @@ -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' diff --git a/pywb/webapp/live_rewrite_handler.py b/pywb/webapp/live_rewrite_handler.py index d2af7028..0a89bd4c 100644 --- a/pywb/webapp/live_rewrite_handler.py +++ b/pywb/webapp/live_rewrite_handler.py @@ -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): diff --git a/pywb/webapp/pywb_init.py b/pywb/webapp/pywb_init.py index e17a9485..2fd02377 100644 --- a/pywb/webapp/pywb_init.py +++ b/pywb/webapp/pywb_init.py @@ -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, ) diff --git a/pywb/webapp/replay_views.py b/pywb/webapp/replay_views.py index c113d733..0b8bb528 100644 --- a/pywb/webapp/replay_views.py +++ b/pywb/webapp/replay_views.py @@ -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)): diff --git a/pywb/webapp/views.py b/pywb/webapp/views.py index 903cc818..c49be8c9 100644 --- a/pywb/webapp/views.py +++ b/pywb/webapp/views.py @@ -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" #=================================================================