From: Florent Xicluna Date: Mon, 15 Mar 2010 18:08:58 +0000 (+0000) Subject: Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local... X-Git-Tag: v2.7b1~345 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3cc8f211ed0d569836114d0d54c6298a21e6dde3;p=python Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local cache. Use this feature to fix test_normalization. --- diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py index f9f4f68a20..2c4972098a 100644 --- a/Lib/test/test_normalization.py +++ b/Lib/test/test_normalization.py @@ -6,15 +6,12 @@ import sys import os from unicodedata import normalize, unidata_version -TESTDATAFILE = "NormalizationTest" + os.extsep + "txt" +TESTDATAFILE = "NormalizationTest.txt" TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE -if os.path.exists(TESTDATAFILE): - f = open(TESTDATAFILE) - l = f.readline() - f.close() - if not unidata_version in l: - os.unlink(TESTDATAFILE) +def check_version(testfile): + hdr = testfile.readline() + return unidata_version in hdr class RangeError(Exception): pass @@ -40,13 +37,14 @@ def unistr(data): class NormalizationTest(unittest.TestCase): def test_main(self): + part = None part1_data = {} # Hit the exception early try: - open_urlresource(TESTDATAURL) + testdata = open_urlresource(TESTDATAURL, check_version) except (IOError, HTTPException): self.skipTest("Could not retrieve " + TESTDATAURL) - for line in open_urlresource(TESTDATAURL): + for line in testdata: if '#' in line: line = line.split('#')[0] line = line.strip() diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index a8f9fbf78f..9bb432949b 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -32,6 +32,7 @@ __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module", "threading_cleanup", "reap_children", "cpython_only", "check_impl_detail", "get_attribute", "py3k_bytes"] + class Error(Exception): """Base class for regression test exceptions.""" @@ -463,15 +464,30 @@ def check_syntax_error(testcase, statement): testcase.assertRaises(SyntaxError, compile, statement, '', 'exec') -def open_urlresource(url): +def open_urlresource(url, check=None): import urlparse, urllib2 - requires('urlfetch') filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL! fn = os.path.join(os.path.dirname(__file__), "data", filename) + + def check_valid_file(fn): + f = open(fn) + if check is None: + return f + elif check(f): + f.seek(0) + return f + f.close() + if os.path.exists(fn): - return open(fn) + f = check_valid_file(fn) + if f is not None: + return f + unlink(fn) + + # Verify the requirement before downloading the file + requires('urlfetch') print >> get_original_stdout(), '\tfetching %s ...' % url f = urllib2.urlopen(url, timeout=15) @@ -483,7 +499,11 @@ def open_urlresource(url): s = f.read() finally: f.close() - return open(fn) + + f = check_valid_file(fn) + if f is not None: + return f + raise TestFailed('invalid resource "%s"' % fn) class WarningsRecorder(object): diff --git a/Misc/NEWS b/Misc/NEWS index 7430d4394e..a6fe33ac74 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -76,6 +76,12 @@ Build - Issue #7705: Fix linking on FreeBSD. +Tests +----- + +- Issue #7783: test.test_support.open_urlresource invalidates the outdated + files from the local cache. + What's New in Python 2.7 alpha 4? =================================