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

refactor handlers: simplify handling methods: handle_request() called

for all requests, handle_query() only for url query/calendar, and
handle_replay() only for replay. Improves extensibility of the handling
path
This commit is contained in:
Ilya Kreymer 2014-10-19 00:33:32 -07:00
parent d99f7f996c
commit 1a78fffa22
2 changed files with 24 additions and 19 deletions

View File

@ -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)

View File

@ -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)