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

misc fixes from merge:

- xmlqueryindexsource: fix typo, improve tests to be more clear with url encoding
- exceptions: move UpstreamException and AppNotFound to wbexceptions
- docker: ensure sample_archive is added to Dockerfile still
- yaml: use python Loader to support custom intrepolation of env vars
- content rewrite: ensure custom exceptions passed up to frontendapp
This commit is contained in:
Ilya Kreymer 2019-03-07 21:18:04 -08:00 committed by John Berlin
parent 42b8c3a22b
commit 1b0c9c6895
No known key found for this signature in database
GPG Key ID: 6EF5E4B442011B02
8 changed files with 29 additions and 18 deletions

View File

@ -1,8 +1,6 @@
build/ build/
dist/ dist/
karma-tests/ karma-tests/
sample_archive/
tests/
tests_disabled/ tests_disabled/
venv/ venv/
collections/ collections/

View File

@ -17,7 +17,7 @@ from pywb.recorder.recorderapp import RecorderApp
from pywb.utils.loaders import load_yaml_config from pywb.utils.loaders import load_yaml_config
from pywb.utils.geventserver import GeventServer from pywb.utils.geventserver import GeventServer
from pywb.utils.io import StreamIter from pywb.utils.io import StreamIter
from pywb.utils.wbexception import NotFoundException, WbException from pywb.utils.wbexception import NotFoundException, WbException, AppPageNotFound
from pywb.warcserver.warcserver import WarcServer from pywb.warcserver.warcserver import WarcServer
@ -646,13 +646,6 @@ class FrontEndApp(object):
return response return response
# ============================================================================
class AppPageNotFound(WbException):
@property
def status_code(self):
return 404
# ============================================================================ # ============================================================================
class MetadataCache(object): class MetadataCache(object):
"""This class holds the collection medata template string and """This class holds the collection medata template string and

View File

@ -17,8 +17,8 @@ from pywb.rewrite.url_rewriter import IdentityUrlRewriter, UrlRewriter
from pywb.rewrite.wburl import WbUrl from pywb.rewrite.wburl import WbUrl
from pywb.rewrite.url_rewriter import UrlRewriter, IdentityUrlRewriter from pywb.rewrite.url_rewriter import UrlRewriter, IdentityUrlRewriter
from pywb.utils.wbexception import WbException, NotFoundException
from pywb.rewrite.cookies import CookieTracker from pywb.rewrite.cookies import CookieTracker
from pywb.utils.wbexception import WbException, NotFoundException, UpstreamException
from pywb.utils.canonicalize import canonicalize from pywb.utils.canonicalize import canonicalize
from pywb.utils.io import BUFF_SIZE, OffsetLimitReader, no_except_close from pywb.utils.io import BUFF_SIZE, OffsetLimitReader, no_except_close
from pywb.utils.memento import MementoUtils from pywb.utils.memento import MementoUtils

View File

@ -16,7 +16,6 @@ from six.moves.urllib.parse import unquote_plus, urlsplit, urlencode
import time import time
import pkgutil import pkgutil
import base64 import base64
import yaml
import cgi import cgi
import re import re

View File

@ -81,6 +81,7 @@ from six import StringIO
from io import BytesIO from io import BytesIO
import requests import requests
import yaml import yaml
from yaml import Loader
from pywb.utils.loaders import BlockLoader, HMACCookieMaker, to_file_url from pywb.utils.loaders import BlockLoader, HMACCookieMaker, to_file_url
from pywb.utils.loaders import extract_client_cookie from pywb.utils.loaders import extract_client_cookie
@ -182,7 +183,7 @@ collection:
other: ${PYWB_NOT}/archive/${PYWB_FOO} other: ${PYWB_NOT}/archive/${PYWB_FOO}
""" """
config_data = yaml.load(config) config_data = yaml.load(config, Loader=Loader)
assert config_data['collection']['coll']['index'] == './test/index' assert config_data['collection']['coll']['index'] == './test/index'
assert config_data['collection']['coll']['archive'] == './test/archive/bar' assert config_data['collection']['coll']['archive'] == './test/archive/bar'

View File

@ -50,3 +50,21 @@ class LiveResourceException(WbException):
def status_code(self): def status_code(self):
return 400 return 400
# ============================================================================
class UpstreamException(WbException):
def __init__(self, status_code, url, details):
super(UpstreamException, self).__init__(url=url, msg=details)
self._status_code = status_code
@property
def status_code(self):
return self._status_code
# ============================================================================
class AppPageNotFound(WbException):
@property
def status_code(self):
return 404

View File

@ -246,7 +246,7 @@ class XmlQueryIndexSource(BaseIndexSource):
try: try:
#OpenSearch API requires double-escaping #OpenSearch API requires double-escaping
#TODO: add option to not double escape if needed #TODO: add option to not double escape if needed
query_url = self.query_api_url + '?q' + quote_plus(query + quote_plus(url)) query_url = self.query_api_url + '?q=' + quote_plus(query + quote_plus(url))
self.logger.debug("Running query: %s" % query_url) self.logger.debug("Running query: %s" % query_url)
response = self.session.get(query_url) response = self.session.get(query_url)
response.raise_for_status() response.raise_for_status()

View File

@ -3,6 +3,8 @@ from pywb.warcserver.test.testutils import BaseTestClass, key_ts_res
from pywb.warcserver.index.indexsource import XmlQueryIndexSource from pywb.warcserver.index.indexsource import XmlQueryIndexSource
from pywb.warcserver.index.aggregator import SimpleAggregator from pywb.warcserver.index.aggregator import SimpleAggregator
from six.moves.urllib.parse import quote_plus
from mock import patch from mock import patch
import pytest import pytest
@ -10,14 +12,14 @@ import pytest
# ============================================================================ # ============================================================================
def mock_get(self, url): def mock_get(self, url):
string = '' string = ''
if 'type%3Aurlquery' in url: if quote_plus(XmlQueryIndexSource.EXACT_QUERY) in url:
if 'http%253A%252F%252Fexample.com%252Fsome%252Fpath' in url: if quote_plus(quote_plus('http://example.com/some/path')) in url:
string = URL_RESPONSE_2 string = URL_RESPONSE_2
elif 'http%253A%252F%252Fexample.com%252F' in url: elif quote_plus(quote_plus('http://example.com/')) in url:
string = URL_RESPONSE_1 string = URL_RESPONSE_1
elif 'type%3Aprefixquery' in url: elif quote_plus(XmlQueryIndexSource.PREFIX_QUERY) in url:
string = PREFIX_QUERY string = PREFIX_QUERY
class MockResponse(object): class MockResponse(object):