1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-19 18:29:37 +01:00
pywb/pywb/query.py

81 lines
2.4 KiB
Python

import indexreader
import utils
import wbrequestresponse
import wbexceptions
from jinja2 import Environment, FileSystemLoader
class QueryHandler:
def __init__(self, cdxserver = None):
if not cdxserver:
cdxserver = indexreader.RemoteCDXServer('http://web.archive.org/cdx/search/cdx')
self.cdxserver = cdxserver
def __call__(self, wbrequest):
wburl = wbrequest.wb_url
# init standard params
params = self.cdxserver.getQueryParams(wburl)
# add any custom params from the request
params.update(wbrequest.customParams)
cdxlines = self.cdxserver.load(wburl.url, params)
cdxlines = utils.peek_iter(cdxlines)
if cdxlines is None:
raise wbexceptions.NotFoundException('WB Does Not Have Url: ' + wburl.url)
cdxlines = self.filterCdx(wbrequest, cdxlines)
# Output raw cdx stream
return wbrequestresponse.WbResponse.text_stream(cdxlines)
def filterCdx(self, wbrequest, cdxlines):
# Subclasses may wrap cdxlines iterator in a filter
return cdxlines
class J2QueryRenderer:
def __init__(self, template_dir, template_file):
self.template_file = template_file
self.jinja_env = Environment(loader = FileSystemLoader(template_dir), trim_blocks = True)
def __call__(self, wbrequest, query_response):
cdxlines = query_response.body
def parse_cdx():
for cdx in cdxlines:
try:
cdx = indexreader.CDXCaptureResult(cdx)
yield cdx
except wbexceptions.InvalidCDXException:
import traceback
traceback.print_exc()
pass
template = self.jinja_env.get_template(self.template_file)
response = template.render(cdxlines = parse_cdx(),
url = wbrequest.wb_url.url,
prefix = wbrequest.wb_prefix)
return wbrequestresponse.WbResponse.text_response(str(response), content_type = 'text/html')
## ===========
## Simple handlers for debugging
class EchoEnv:
def __call__(self, wbrequest):
return wbrequestresponse.WbResponse.text_response(str(wbrequest.env))
class EchoRequest:
def __call__(self, wbrequest):
return wbrequestresponse.WbResponse.text_response(str(wbrequest))