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:
parent
d99f7f996c
commit
1a78fffa22
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user