]> granicus.if.org Git - python/commitdiff
Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local...
authorFlorent Xicluna <florent.xicluna@gmail.com>
Mon, 15 Mar 2010 18:08:58 +0000 (18:08 +0000)
committerFlorent Xicluna <florent.xicluna@gmail.com>
Mon, 15 Mar 2010 18:08:58 +0000 (18:08 +0000)
Use this feature to fix test_normalization.

Lib/test/test_normalization.py
Lib/test/test_support.py
Misc/NEWS

index f9f4f68a201716292049e23c502c7084c1a1dee3..2c4972098ab81f6658d8f2f3b4d6646bf901f92a 100644 (file)
@@ -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()
index a8f9fbf78f2c5408d7b567f0e13e5f3e320b18a7..9bb432949b0d8edf93ce809a272777cf606ac929 100644 (file)
@@ -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,
                           '<test string>', '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):
index 7430d4394efe0638ac940e78512fad07e60248fc..a6fe33ac74c7f50525b14bcf9533973e6c61d664 100644 (file)
--- 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?
 =================================