diff --git a/pywb/webapp/handlers.py b/pywb/webapp/handlers.py index b862e99a..b32cc2ad 100644 --- a/pywb/webapp/handlers.py +++ b/pywb/webapp/handlers.py @@ -74,20 +74,25 @@ class SearchPageWbUrlHandler(WbUrlHandler): return self.handle_request(wbrequest) - def get_top_frame_response(self, wbrequest): + def get_top_frame_params(self, wbrequest): + embed_url = wbrequest.wb_url.to_str(mod='') + if wbrequest.wb_url.timestamp: timestamp = wbrequest.wb_url.timestamp else: timestamp = datetime_to_timestamp(datetime.utcnow()) - embed_url = wbrequest.wb_url.to_str(mod='') - params = dict(embed_url=embed_url, wbrequest=wbrequest, timestamp=timestamp, url=wbrequest.wb_url.url, banner_html=self.banner_html) + return params + + def get_top_frame_response(self, wbrequest): + params = self.get_top_frame_params(wbrequest) + headers = [('Content-Type', 'text/html; charset=utf-8')] status_headers = StatusAndHeaders('200 OK', headers) @@ -125,20 +130,23 @@ class WBHandler(SearchPageWbUrlHandler): def handle_request(self, wbrequest): try: - response = self.handle_query(wbrequest) + cdx_lines, output = self.index_reader.load_for_request(wbrequest) except NotFoundException as nfe: return self.handle_not_found(wbrequest, nfe) - if isinstance(response, WbResponse): - return response + if output != 'text' and wbrequest.wb_url.is_replay(): + return self.handle_replay(wbrequest, cdx_lines) + else: + return self.handle_query(wbrequest, cdx_lines, output) - cdx_lines, cdx_callback = response - return self.handle_replay(wbrequest, cdx_lines, cdx_callback) + def handle_query(self, wbrequest, cdx_lines, output): + return self.index_reader.make_cdx_response(wbrequest, + cdx_lines, + output) - def handle_query(self, wbrequest): - return self.index_reader.load_for_request(wbrequest) + def handle_replay(self, wbrequest, cdx_lines): + cdx_callback = self.index_reader.cdx_load_callback(wbrequest) - def handle_replay(self, wbrequest, cdx_lines, cdx_callback): return self.replay.render_content(wbrequest, cdx_lines, cdx_callback) @@ -166,7 +174,8 @@ class StaticHandler(BaseHandler): self.block_loader = BlockLoader() def __call__(self, wbrequest): - full_path = self.static_path + wbrequest.wb_url_str + url = wbrequest.wb_url_str.split('?')[0] + full_path = self.static_path + url try: data = self.block_loader.load(full_path) diff --git a/pywb/webapp/query_handler.py b/pywb/webapp/query_handler.py index 2ac80fa7..6a404c17 100644 --- a/pywb/webapp/query_handler.py +++ b/pywb/webapp/query_handler.py @@ -69,11 +69,7 @@ class QueryHandler(object): params['output'] = output cdx_iter = self.load_cdx(wbrequest, params) - - if output != 'text' and wb_url.is_replay(): - return (cdx_iter, self.cdx_load_callback(wbrequest)) - - return self.make_cdx_response(wbrequest, cdx_iter, params['output']) + return cdx_iter, output def load_cdx(self, wbrequest, params): if wbrequest: @@ -96,12 +92,12 @@ class QueryHandler(object): cdx_iter = self.cdx_server.load_cdx(**params) return cdx_iter - def make_cdx_response(self, wbrequest, cdx_iter, output): + def make_cdx_response(self, wbrequest, cdx_iter, output, **kwargs): # if not text, the iterator is assumed to be CDXObjects if output and output != 'text': view = self.views.get(output) if view: - return view.render_response(wbrequest, cdx_iter) + return view.render_response(wbrequest, cdx_iter, **kwargs) return WbResponse.text_stream(cdx_iter)