python-2.5.2/win32/Tools/versioncheck/pyversioncheck.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 """pyversioncheck - Module to help with checking versions"""
       
     2 import types
       
     3 import rfc822
       
     4 import urllib
       
     5 import sys
       
     6 
       
     7 # Verbose options
       
     8 VERBOSE_SILENT=0        # Single-line reports per package
       
     9 VERBOSE_NORMAL=1        # Single-line reports per package, more info if outdated
       
    10 VERBOSE_EACHFILE=2      # Report on each URL checked
       
    11 VERBOSE_CHECKALL=3      # Check each URL for each package
       
    12 
       
    13 # Test directory
       
    14 ## urllib bug: _TESTDIR="ftp://ftp.cwi.nl/pub/jack/python/versiontestdir/"
       
    15 _TESTDIR="http://www.cwi.nl/~jack/versiontestdir/"
       
    16 
       
    17 def versioncheck(package, url, version, verbose=0):
       
    18     ok, newversion, fp = checkonly(package, url, version, verbose)
       
    19     if verbose > VERBOSE_NORMAL:
       
    20         return ok
       
    21     if ok < 0:
       
    22         print '%s: No correctly formatted current version file found'%(package)
       
    23     elif ok == 1:
       
    24         print '%s: up-to-date (version %s)'%(package, version)
       
    25     else:
       
    26         print '%s: version %s installed, version %s found:' % \
       
    27                         (package, version, newversion)
       
    28         if verbose > VERBOSE_SILENT:
       
    29             while 1:
       
    30                 line = fp.readline()
       
    31                 if not line: break
       
    32                 sys.stdout.write('\t'+line)
       
    33     return ok
       
    34 
       
    35 def checkonly(package, url, version, verbose=0):
       
    36     if verbose >= VERBOSE_EACHFILE:
       
    37         print '%s:'%package
       
    38     if type(url) == types.StringType:
       
    39         ok, newversion, fp = _check1version(package, url, version, verbose)
       
    40     else:
       
    41         for u in url:
       
    42             ok, newversion, fp = _check1version(package, u, version, verbose)
       
    43             if ok >= 0 and verbose < VERBOSE_CHECKALL:
       
    44                 break
       
    45     return ok, newversion, fp
       
    46 
       
    47 def _check1version(package, url, version, verbose=0):
       
    48     if verbose >= VERBOSE_EACHFILE:
       
    49         print '  Checking %s'%url
       
    50     try:
       
    51         fp = urllib.urlopen(url)
       
    52     except IOError, arg:
       
    53         if verbose >= VERBOSE_EACHFILE:
       
    54             print '    Cannot open:', arg
       
    55         return -1, None, None
       
    56     msg = rfc822.Message(fp, seekable=0)
       
    57     newversion = msg.getheader('current-version')
       
    58     if not newversion:
       
    59         if verbose >= VERBOSE_EACHFILE:
       
    60             print '    No "Current-Version:" header in URL or URL not found'
       
    61         return -1, None, None
       
    62     version = version.lower().strip()
       
    63     newversion = newversion.lower().strip()
       
    64     if version == newversion:
       
    65         if verbose >= VERBOSE_EACHFILE:
       
    66             print '    Version identical (%s)'%newversion
       
    67         return 1, version, fp
       
    68     else:
       
    69         if verbose >= VERBOSE_EACHFILE:
       
    70             print '    Versions different (installed: %s, new: %s)'% \
       
    71                         (version, newversion)
       
    72         return 0, newversion, fp
       
    73 
       
    74 
       
    75 def _test():
       
    76     print '--- TEST VERBOSE=1'
       
    77     print '--- Testing existing and identical version file'
       
    78     versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=1)
       
    79     print '--- Testing existing package with new version'
       
    80     versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=1)
       
    81     print '--- Testing package with non-existing version file'
       
    82     versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=1)
       
    83     print '--- Test package with 2 locations, first non-existing second ok'
       
    84     versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']
       
    85     versioncheck('VersionTestPackage', versfiles, '1.0', verbose=1)
       
    86     print '--- TEST VERBOSE=2'
       
    87     print '--- Testing existing and identical version file'
       
    88     versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=2)
       
    89     print '--- Testing existing package with new version'
       
    90     versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=2)
       
    91     print '--- Testing package with non-existing version file'
       
    92     versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=2)
       
    93     print '--- Test package with 2 locations, first non-existing second ok'
       
    94     versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']
       
    95     versioncheck('VersionTestPackage', versfiles, '1.0', verbose=2)
       
    96 
       
    97 if __name__ == '__main__':
       
    98     _test()