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