mirror of
https://github.com/python/cpython.git
synced 2025-07-22 18:55:22 +00:00

(with one small bugfix in bgen/bgen/scantools.py) This replaces string module functions with string methods for the stuff in the Tools directory. Several uses of string.letters etc. are still remaining.
100 lines
3.9 KiB
Python
100 lines
3.9 KiB
Python
"""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()
|
|
|
|
|