2014-01-28 17:23:44 -08:00
|
|
|
import views
|
|
|
|
import utils
|
|
|
|
import urlparse
|
|
|
|
|
2014-01-31 10:04:21 -08:00
|
|
|
from wbrequestresponse import WbResponse
|
|
|
|
|
2014-01-28 17:23:44 -08:00
|
|
|
#=================================================================
|
|
|
|
# Standard WB Handler
|
|
|
|
#=================================================================
|
|
|
|
class WBHandler:
|
2014-01-31 10:04:21 -08:00
|
|
|
def __init__(self, cdx_reader, replay, capturespage = None, searchpage = None):
|
2014-01-28 17:23:44 -08:00
|
|
|
self.cdx_reader = cdx_reader
|
|
|
|
self.replay = replay
|
2014-01-31 10:04:21 -08:00
|
|
|
|
|
|
|
self.text_view = views.TextCapturesView()
|
|
|
|
self.html_view = capturespage
|
|
|
|
self.searchpage = searchpage
|
|
|
|
|
2014-01-28 17:23:44 -08:00
|
|
|
|
|
|
|
def __call__(self, wbrequest):
|
2014-01-31 10:04:21 -08:00
|
|
|
|
|
|
|
if wbrequest.wb_url_str == '/':
|
|
|
|
return self.render_searchpage(wbrequest)
|
|
|
|
|
2014-01-28 17:23:44 -08:00
|
|
|
with utils.PerfTimer(wbrequest.env.get('X_PERF'), 'query') as t:
|
|
|
|
cdx_lines = self.cdx_reader.load_for_request(wbrequest, parsed_cdx = True)
|
|
|
|
|
|
|
|
# new special modifier to always show cdx index
|
|
|
|
if wbrequest.wb_url.mod == 'cdx_':
|
2014-01-31 10:04:21 -08:00
|
|
|
return self.text_view.render_response(wbrequest, cdx_lines)
|
2014-01-28 17:23:44 -08:00
|
|
|
|
|
|
|
if (wbrequest.wb_url.type == wbrequest.wb_url.QUERY) or (wbrequest.wb_url.type == wbrequest.wb_url.URL_QUERY):
|
2014-01-31 10:04:21 -08:00
|
|
|
query_view = self.html_view if self.html_view else self.text_view
|
|
|
|
return query_view.render_response(wbrequest, cdx_lines)
|
2014-01-28 17:23:44 -08:00
|
|
|
|
|
|
|
with utils.PerfTimer(wbrequest.env.get('X_PERF'), 'replay') as t:
|
|
|
|
return self.replay(wbrequest, cdx_lines, self.cdx_reader)
|
|
|
|
|
|
|
|
|
2014-01-31 10:04:21 -08:00
|
|
|
def render_searchpage(self, wbrequest):
|
|
|
|
if self.searchpage:
|
|
|
|
return self.searchpage.render_response(wbrequest = wbrequest)
|
|
|
|
else:
|
|
|
|
return WbResponse.text_response('No Lookup Url Specified')
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return 'WBHandler: ' + str(self.cdx_reader) + ', ' + str(self.replay)
|
|
|
|
|
|
|
|
|
2014-01-28 17:23:44 -08:00
|
|
|
|
|
|
|
#=================================================================
|
|
|
|
# CDX-Server Handler -- pass all params to cdx server
|
|
|
|
#=================================================================
|
|
|
|
class CDXHandler:
|
|
|
|
def __init__(self, cdx_reader, view = None):
|
|
|
|
self.cdx_reader = cdx_reader
|
2014-01-31 10:04:21 -08:00
|
|
|
self.view = view if view else views.TextCapturesView()
|
2014-01-28 17:23:44 -08:00
|
|
|
|
|
|
|
def __call__(self, wbrequest):
|
|
|
|
url = wbrequest.wb_url.url
|
|
|
|
|
|
|
|
# use url= param to get actual url
|
|
|
|
params = urlparse.parse_qs(wbrequest.env['QUERY_STRING'])
|
|
|
|
|
|
|
|
url = params.get('url')
|
|
|
|
if not url:
|
|
|
|
raise Exception('Must specify a url= param to query cdx server')
|
|
|
|
|
|
|
|
url = url[0]
|
|
|
|
|
|
|
|
cdx_lines = self.cdx_reader.load_cdx(url, params, parsed_cdx = False)
|
|
|
|
|
|
|
|
return self.view(wbrequest, cdx_lines)
|
|
|
|
|
|
|
|
|
|
|
|
#=================================================================
|
|
|
|
# Debug Handlers
|
|
|
|
#=================================================================
|
|
|
|
class DebugEchoEnvHandler:
|
|
|
|
def __call__(self, wbrequest):
|
|
|
|
return wbrequestresponse.WbResponse.text_response(str(wbrequest.env))
|
|
|
|
|
|
|
|
#=================================================================
|
|
|
|
class DebugEchoHandler:
|
|
|
|
def __call__(self, wbrequest):
|
|
|
|
return wbrequestresponse.WbResponse.text_response(str(wbrequest))
|
|
|
|
|
|
|
|
|
|
|
|
|