mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 02:15:10 +00:00 
			
		
		
		
	 aaab30e00c
			
		
	
	
		aaab30e00c
		
	
	
	
	
		
			
			(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()
 | |
| 	
 | |
|     
 |