From 2d0cb5745d7a603f22afd9406c7f09a724bacbc8 Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Wed, 22 Jan 2014 15:28:01 -0800 Subject: [PATCH] enable bulk doctest testing via `nosetests --with-doctest` as well as individual doctests andd utils.enable_doctests() func which checks if executing app is nosetests (is there a better a way?) --- pywb/archivalrouter.py | 6 ++++-- pywb/archiveloader.py | 5 +++-- pywb/header_rewriter.py | 5 +++-- pywb/html_rewriter.py | 5 +++-- pywb/indexreader.py | 25 ++++++++++++------------- pywb/regex_rewriters.py | 8 +++----- pywb/replay.py | 4 ++-- pywb/url_rewriter.py | 9 +++++++-- pywb/utils.py | 15 ++++++++++++++- 9 files changed, 51 insertions(+), 31 deletions(-) diff --git a/pywb/archivalrouter.py b/pywb/archivalrouter.py index 529be99a..182bc791 100644 --- a/pywb/archivalrouter.py +++ b/pywb/archivalrouter.py @@ -138,8 +138,9 @@ class ReferRedirect: return WbResponse.redir_response(final_url) -if __name__ == "__main__": - import doctest + +import utils +if __name__ == "__main__" or utils.enable_doctests(): def test_redir(matchHost, request_uri, referrer): env = {'REL_REQUEST_URI': request_uri, 'HTTP_REFERER': referrer} @@ -153,6 +154,7 @@ if __name__ == "__main__": return rep.status_headers.getHeader('Location') + import doctest doctest.testmod() diff --git a/pywb/archiveloader.py b/pywb/archiveloader.py index a3b77e2f..03ca7111 100644 --- a/pywb/archiveloader.py +++ b/pywb/archiveloader.py @@ -372,8 +372,8 @@ class ChunkedLineReader(LineReader): #================================================================= -if __name__ == "__main__": - import doctest +import utils +if __name__ == "__main__" or utils.enable_doctests(): import os import pprint @@ -385,5 +385,6 @@ if __name__ == "__main__": archive = testloader.load(path, offset, length) pprint.pprint((archive.type, archive.rec_headers, archive.status_headers)) + import doctest doctest.testmod() diff --git a/pywb/header_rewriter.py b/pywb/header_rewriter.py index 57d790b4..322046c6 100644 --- a/pywb/header_rewriter.py +++ b/pywb/header_rewriter.py @@ -115,8 +115,8 @@ class HeaderRewriter: return (newHeaders, removedHeaderDict) -if __name__ == "__main__": - import doctest +import utils +if __name__ == "__main__" or utils.enable_doctests(): import os import pprint import url_rewriter @@ -129,5 +129,6 @@ if __name__ == "__main__": rewritten = headerrewriter.rewrite(StatusAndHeaders(status, headers), urlrewriter) return vars(rewritten) + import doctest doctest.testmod() diff --git a/pywb/html_rewriter.py b/pywb/html_rewriter.py index 5b32e2e2..82113bfe 100644 --- a/pywb/html_rewriter.py +++ b/pywb/html_rewriter.py @@ -309,8 +309,8 @@ class WBHtml(HTMLParser): #print #parser.feed(instr) #print -if __name__ == "__main__": - import doctest +import utils +if __name__ == "__main__" or utils.enable_doctests(): url_rewriter = ArchivalUrlRewriter('/20131226101010/http://example.com/some/path/index.html', '/web/') @@ -318,6 +318,7 @@ if __name__ == "__main__": parser = WBHtml(url_rewriter, headInsert = headInsert) print parser.rewrite(data) + parser.close() + import doctest doctest.testmod() diff --git a/pywb/indexreader.py b/pywb/indexreader.py index 1acac741..f5b10669 100644 --- a/pywb/indexreader.py +++ b/pywb/indexreader.py @@ -9,16 +9,15 @@ from wbarchivalurl import ArchivalUrl class RemoteCDXServer: """ >>> x = cdxserver.load('example.com', parse_cdx = True, limit = '2') - >>> pprint(x[0]) - {'digest': 'HT2DYGA5UKZCPBSFVCV3JOBXGW2G5UUA', - 'length': '1792', - 'mimetype': 'text/html', - 'original': 'http://example.com:80/', - 'statuscode': '200', - 'timestamp': '20020120142510', - 'urlkey': 'com,example)/'} - - """ + >>> pprint(x[0].items()) + [('urlkey', 'com,example)/'), + ('timestamp', '20020120142510'), + ('original', 'http://example.com:80/'), + ('mimetype', 'text/html'), + ('statuscode', '200'), + ('digest', 'HT2DYGA5UKZCPBSFVCV3JOBXGW2G5UUA'), + ('length', '1792')] + """ def __init__(self, serverUrl, cookie = None): self.serverUrl = serverUrl @@ -124,11 +123,11 @@ class CDXCaptureResult(OrderedDict): # Testing - -if __name__ == "__main__": - import doctest +import utils +if __name__ == "__main__" or utils.enable_doctests(): from pprint import pprint cdxserver = RemoteCDXServer('http://web.archive.org/cdx/search/cdx') + import doctest doctest.testmod() diff --git a/pywb/regex_rewriters.py b/pywb/regex_rewriters.py index 7ae5acd1..e3a01291 100644 --- a/pywb/regex_rewriters.py +++ b/pywb/regex_rewriters.py @@ -214,10 +214,8 @@ class CSSRewriter(RegexRewriter): (CSSRewriter.CSS_IMPORT_NO_URL_REGEX, RegexRewriter.archivalRewrite(rewriter), 1), ] - -if __name__ == "__main__": - import doctest - +import utils +if __name__ == "__main__" or utils.enable_doctests(): arcrw = ArchivalUrlRewriter('/20131010im_/http://example.com/', '/web/') def test_js(string, extra = []): @@ -230,7 +228,7 @@ if __name__ == "__main__": return CSSRewriter(arcrw).rewrite(string) - + import doctest doctest.testmod() diff --git a/pywb/replay.py b/pywb/replay.py index 326a8933..5cada1bf 100644 --- a/pywb/replay.py +++ b/pywb/replay.py @@ -196,7 +196,7 @@ class ReplayHandler(object): #================================================================= class RewritingReplayHandler(ReplayHandler): - def __init__(self, resolvers, archiveloader, headInsert = None, headerRewriter = None, redir_to_exact = True): + def __init__(self, resolvers, archiveloader, headInsert = None, headerRewriter = None, redir_to_exact = True, buffer_response = False): ReplayHandler.__init__(self, resolvers, archiveloader) self.headInsert = headInsert if not headerRewriter: @@ -205,7 +205,7 @@ class RewritingReplayHandler(ReplayHandler): self.redir_to_exact = redir_to_exact # buffer or stream rewritten response - self.buffer_response = False + self.buffer_response = buffer_response def _textContentType(self, contentType): diff --git a/pywb/url_rewriter.py b/pywb/url_rewriter.py index 7958b260..cec3abf2 100644 --- a/pywb/url_rewriter.py +++ b/pywb/url_rewriter.py @@ -3,6 +3,7 @@ import urlparse from wbarchivalurl import ArchivalUrl + class ArchivalUrlRewriter: """ >>> test_rewrite('other.html', '/20131010/http://example.com/path/page.html', 'https://web.archive.org/web/') @@ -112,11 +113,15 @@ class ArchivalUrlRewriter: return url -if __name__ == "__main__": - import doctest +import utils +if __name__ == "__main__" or utils.enable_doctests(): def test_rewrite(rel_url, base_url, prefix, mod = None): rewriter = ArchivalUrlRewriter(base_url, prefix) return rewriter.rewrite(rel_url, mod) + import doctest doctest.testmod() + + + diff --git a/pywb/utils.py b/pywb/utils.py index f055736e..f2db7365 100644 --- a/pywb/utils.py +++ b/pywb/utils.py @@ -131,7 +131,20 @@ def rel_request_uri(environ, include_query=1): return url -if __name__ == "__main__": + +#============================================ +# Support for bulk doctest testing via nose +# nosetests --with-doctest + +import sys +is_in_nose = sys.argv[0].endswith('nosetests') + +def enable_doctests(): + return is_in_nose + +#============================================ + +if __name__ == "__main__" or enable_doctests(): import doctest doctest.testmod()