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

replay api: make ReplayView overridable in WBHandler subclass,

allow custom content loader callable
This commit is contained in:
Ilya Kreymer 2015-01-29 20:10:41 -08:00
parent 7e017fd85e
commit 757345d317
4 changed files with 18 additions and 14 deletions

View File

@ -9,7 +9,7 @@ class ResolvingLoader:
self.path_resolvers = make_best_resolvers(paths)
self.record_loader = record_loader
def resolve_headers_and_payload(self, cdx, failed_files, cdx_loader):
def __call__(self, cdx, failed_files, cdx_loader, *args):
"""
Resolve headers and payload for a given capture
In the simple case, headers and payload are in the same record.

View File

@ -357,9 +357,7 @@ def load_from_cdx_test(cdx, revisit_func=load_orig_cdx, reraise=False,
cdx = CDXObject(cdx)
try:
(headers, stream) = resolve_loader.resolve_headers_and_payload(cdx,
failed_files,
revisit_func)
(headers, stream) = resolve_loader(cdx, failed_files, revisit_func)
print headers
sys.stdout.write(stream.readline())
sys.stdout.write(stream.readline())

View File

@ -112,6 +112,12 @@ class WBHandler(SearchPageWbUrlHandler):
create_template(config.get('not_found_html'),
'Not Found Error'))
self.replay = self._init_replay_view(config)
self.fallback_handler = None
self.fallback_name = config.get('fallback')
def _init_replay_view(self, config):
cookie_maker = config.get('cookie_maker')
record_loader = ArcWarcRecordLoader(cookie_maker=cookie_maker)
@ -120,10 +126,7 @@ class WBHandler(SearchPageWbUrlHandler):
resolving_loader = ResolvingLoader(paths=paths,
record_loader=record_loader)
self.replay = ReplayView(resolving_loader, config)
self.fallback_handler = None
self.fallback_name = config.get('fallback')
return ReplayView(resolving_loader, config)
def resolve_refs(self, handler_dict):
if self.fallback_name:

View File

@ -1,4 +1,6 @@
import re
import logging
from io import BytesIO
from urlparse import urlsplit
@ -87,8 +89,9 @@ class ReplayView(object):
failed_files)
except (CaptureException, ArchiveLoadFailed) as ce:
import traceback
traceback.print_exc()
#import traceback
#traceback.print_exc()
logging.debug(ce)
last_e = ce
pass
@ -131,10 +134,10 @@ class ReplayView(object):
return response
def replay_capture(self, wbrequest, cdx, cdx_loader, failed_files):
(status_headers, stream) = (self.content_loader.
resolve_headers_and_payload(cdx,
failed_files,
cdx_loader))
(status_headers, stream) = (self.content_loader(cdx,
failed_files,
cdx_loader,
wbrequest))
# check and reject self-redirect
self._reject_self_redirect(wbrequest, cdx, status_headers)