python-2.5.2/win32/Tools/versioncheck/pyversioncheck.py
changeset 0 ae805ac0140d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python-2.5.2/win32/Tools/versioncheck/pyversioncheck.py	Fri Apr 03 17:19:34 2009 +0100
@@ -0,0 +1,98 @@
+"""pyversioncheck - Module to help with checking versions"""
+import types
+import rfc822
+import urllib
+import sys
+
+# Verbose options
+VERBOSE_SILENT=0        # Single-line reports per package
+VERBOSE_NORMAL=1        # Single-line reports per package, more info if outdated
+VERBOSE_EACHFILE=2      # Report on each URL checked
+VERBOSE_CHECKALL=3      # Check each URL for each package
+
+# Test directory
+## urllib bug: _TESTDIR="ftp://ftp.cwi.nl/pub/jack/python/versiontestdir/"
+_TESTDIR="http://www.cwi.nl/~jack/versiontestdir/"
+
+def versioncheck(package, url, version, verbose=0):
+    ok, newversion, fp = checkonly(package, url, version, verbose)
+    if verbose > VERBOSE_NORMAL:
+        return ok
+    if ok < 0:
+        print '%s: No correctly formatted current version file found'%(package)
+    elif ok == 1:
+        print '%s: up-to-date (version %s)'%(package, version)
+    else:
+        print '%s: version %s installed, version %s found:' % \
+                        (package, version, newversion)
+        if verbose > VERBOSE_SILENT:
+            while 1:
+                line = fp.readline()
+                if not line: break
+                sys.stdout.write('\t'+line)
+    return ok
+
+def checkonly(package, url, version, verbose=0):
+    if verbose >= VERBOSE_EACHFILE:
+        print '%s:'%package
+    if type(url) == types.StringType:
+        ok, newversion, fp = _check1version(package, url, version, verbose)
+    else:
+        for u in url:
+            ok, newversion, fp = _check1version(package, u, version, verbose)
+            if ok >= 0 and verbose < VERBOSE_CHECKALL:
+                break
+    return ok, newversion, fp
+
+def _check1version(package, url, version, verbose=0):
+    if verbose >= VERBOSE_EACHFILE:
+        print '  Checking %s'%url
+    try:
+        fp = urllib.urlopen(url)
+    except IOError, arg:
+        if verbose >= VERBOSE_EACHFILE:
+            print '    Cannot open:', arg
+        return -1, None, None
+    msg = rfc822.Message(fp, seekable=0)
+    newversion = msg.getheader('current-version')
+    if not newversion:
+        if verbose >= VERBOSE_EACHFILE:
+            print '    No "Current-Version:" header in URL or URL not found'
+        return -1, None, None
+    version = version.lower().strip()
+    newversion = newversion.lower().strip()
+    if version == newversion:
+        if verbose >= VERBOSE_EACHFILE:
+            print '    Version identical (%s)'%newversion
+        return 1, version, fp
+    else:
+        if verbose >= VERBOSE_EACHFILE:
+            print '    Versions different (installed: %s, new: %s)'% \
+                        (version, newversion)
+        return 0, newversion, fp
+
+
+def _test():
+    print '--- TEST VERBOSE=1'
+    print '--- Testing existing and identical version file'
+    versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=1)
+    print '--- Testing existing package with new version'
+    versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=1)
+    print '--- Testing package with non-existing version file'
+    versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=1)
+    print '--- Test package with 2 locations, first non-existing second ok'
+    versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']
+    versioncheck('VersionTestPackage', versfiles, '1.0', verbose=1)
+    print '--- TEST VERBOSE=2'
+    print '--- Testing existing and identical version file'
+    versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=2)
+    print '--- Testing existing package with new version'
+    versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=2)
+    print '--- Testing package with non-existing version file'
+    versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=2)
+    print '--- Test package with 2 locations, first non-existing second ok'
+    versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']
+    versioncheck('VersionTestPackage', versfiles, '1.0', verbose=2)
+
+if __name__ == '__main__':
+    _test()