1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +01:00

fallback: better way of setting fallbacks, check for 'resolve_refs' method on the handler

and pass handler_dict if one exists
This commit is contained in:
Ilya Kreymer 2014-07-20 18:24:08 -07:00
parent ca405ef179
commit 49deb501a6
2 changed files with 14 additions and 10 deletions

View File

@ -8,13 +8,15 @@ from pywb.utils.loaders import BlockLoader
from pywb.framework.basehandlers import BaseHandler, WbUrlHandler
from pywb.framework.wbrequestresponse import WbResponse
import logging
#=================================================================
# Standard WB Handler
#=================================================================
class WBHandler(WbUrlHandler):
def __init__(self, index_reader, replay,
search_view=None, config=None, handler_dict=None):
search_view=None, config=None):
self.index_reader = index_reader
@ -23,11 +25,11 @@ class WBHandler(WbUrlHandler):
self.search_view = search_view
self.fallback_handler = None
self.fallback_name = config.get('fallback')
if handler_dict:
fallback = config.get('fallback')
if fallback:
self.fallback_handler = handler_dict.get(fallback)
def resolve_refs(self, handler_dict):
if self.fallback_name:
self.fallback_handler = handler_dict.get(self.fallback_name)
def __call__(self, wbrequest):
if wbrequest.wb_url_str == '/':
@ -58,8 +60,6 @@ class WBHandler(WbUrlHandler):
raise
return self.fallback_handler(wbrequest)
#new_url = (self.redir_fallback + wbrequest.wb_url.to_str(timestamp=''))
#return WbResponse.redir_response(new_url)
def render_search_page(self, wbrequest, **kwargs):
if self.search_view:

View File

@ -62,7 +62,7 @@ class DictChain:
#=================================================================
def create_wb_handler(query_handler, config, handler_dict={}):
def create_wb_handler(query_handler, config):
cookie_maker = config.get('cookie_maker')
record_loader = ArcWarcRecordLoader(cookie_maker=cookie_maker)
@ -89,7 +89,6 @@ def create_wb_handler(query_handler, config, handler_dict={}):
replayer,
search_view=search_view,
config=config,
handler_dict=handler_dict,
)
return wb_handler
@ -207,7 +206,6 @@ def create_wb_router(passed_config={}):
wb_handler = create_wb_handler(
query_handler=query_handler,
config=route_config,
handler_dict=handler_dict,
)
handler_dict[name] = wb_handler
@ -237,6 +235,12 @@ def create_wb_router(passed_config={}):
for static_name, static_path in static_routes.iteritems():
routes.append(Route(static_name, StaticHandler(static_path)))
# resolve any cross handler references
for route in routes:
if hasattr(route.handler, 'resolve_refs'):
route.handler.resolve_refs(handler_dict)
# Check for new proxy mode!
if config.get('enable_http_proxy', False):
router = ProxyArchivalRouter