mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +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)
|
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:
|
if wbrequest.wb_url.timestamp:
|
||||||
timestamp = wbrequest.wb_url.timestamp
|
timestamp = wbrequest.wb_url.timestamp
|
||||||
else:
|
else:
|
||||||
timestamp = datetime_to_timestamp(datetime.utcnow())
|
timestamp = datetime_to_timestamp(datetime.utcnow())
|
||||||
|
|
||||||
embed_url = wbrequest.wb_url.to_str(mod='')
|
|
||||||
|
|
||||||
params = dict(embed_url=embed_url,
|
params = dict(embed_url=embed_url,
|
||||||
wbrequest=wbrequest,
|
wbrequest=wbrequest,
|
||||||
timestamp=timestamp,
|
timestamp=timestamp,
|
||||||
url=wbrequest.wb_url.url,
|
url=wbrequest.wb_url.url,
|
||||||
banner_html=self.banner_html)
|
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')]
|
headers = [('Content-Type', 'text/html; charset=utf-8')]
|
||||||
status_headers = StatusAndHeaders('200 OK', headers)
|
status_headers = StatusAndHeaders('200 OK', headers)
|
||||||
|
|
||||||
@ -125,20 +130,23 @@ class WBHandler(SearchPageWbUrlHandler):
|
|||||||
|
|
||||||
def handle_request(self, wbrequest):
|
def handle_request(self, wbrequest):
|
||||||
try:
|
try:
|
||||||
response = self.handle_query(wbrequest)
|
cdx_lines, output = self.index_reader.load_for_request(wbrequest)
|
||||||
except NotFoundException as nfe:
|
except NotFoundException as nfe:
|
||||||
return self.handle_not_found(wbrequest, nfe)
|
return self.handle_not_found(wbrequest, nfe)
|
||||||
|
|
||||||
if isinstance(response, WbResponse):
|
if output != 'text' and wbrequest.wb_url.is_replay():
|
||||||
return response
|
return self.handle_replay(wbrequest, cdx_lines)
|
||||||
|
else:
|
||||||
|
return self.handle_query(wbrequest, cdx_lines, output)
|
||||||
|
|
||||||
cdx_lines, cdx_callback = response
|
def handle_query(self, wbrequest, cdx_lines, output):
|
||||||
return self.handle_replay(wbrequest, cdx_lines, cdx_callback)
|
return self.index_reader.make_cdx_response(wbrequest,
|
||||||
|
cdx_lines,
|
||||||
|
output)
|
||||||
|
|
||||||
def handle_query(self, wbrequest):
|
def handle_replay(self, wbrequest, cdx_lines):
|
||||||
return self.index_reader.load_for_request(wbrequest)
|
cdx_callback = self.index_reader.cdx_load_callback(wbrequest)
|
||||||
|
|
||||||
def handle_replay(self, wbrequest, cdx_lines, cdx_callback):
|
|
||||||
return self.replay.render_content(wbrequest,
|
return self.replay.render_content(wbrequest,
|
||||||
cdx_lines,
|
cdx_lines,
|
||||||
cdx_callback)
|
cdx_callback)
|
||||||
@ -166,7 +174,8 @@ class StaticHandler(BaseHandler):
|
|||||||
self.block_loader = BlockLoader()
|
self.block_loader = BlockLoader()
|
||||||
|
|
||||||
def __call__(self, wbrequest):
|
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:
|
try:
|
||||||
data = self.block_loader.load(full_path)
|
data = self.block_loader.load(full_path)
|
||||||
|
@ -69,11 +69,7 @@ class QueryHandler(object):
|
|||||||
params['output'] = output
|
params['output'] = output
|
||||||
|
|
||||||
cdx_iter = self.load_cdx(wbrequest, params)
|
cdx_iter = self.load_cdx(wbrequest, params)
|
||||||
|
return cdx_iter, output
|
||||||
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'])
|
|
||||||
|
|
||||||
def load_cdx(self, wbrequest, params):
|
def load_cdx(self, wbrequest, params):
|
||||||
if wbrequest:
|
if wbrequest:
|
||||||
@ -96,12 +92,12 @@ class QueryHandler(object):
|
|||||||
cdx_iter = self.cdx_server.load_cdx(**params)
|
cdx_iter = self.cdx_server.load_cdx(**params)
|
||||||
return cdx_iter
|
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 not text, the iterator is assumed to be CDXObjects
|
||||||
if output and output != 'text':
|
if output and output != 'text':
|
||||||
view = self.views.get(output)
|
view = self.views.get(output)
|
||||||
if view:
|
if view:
|
||||||
return view.render_response(wbrequest, cdx_iter)
|
return view.render_response(wbrequest, cdx_iter, **kwargs)
|
||||||
|
|
||||||
return WbResponse.text_stream(cdx_iter)
|
return WbResponse.text_stream(cdx_iter)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user