version.py (2820B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\version.py 2 import string, re 3 from types import StringType 4 5 class Version: 6 7 def __init__(self, vstring = None): 8 if vstring: 9 self.parse(vstring) 10 11 def __repr__(self): 12 return "%s ('%s')" % (self.__class__.__name__, str(self)) 13 14 15 class StrictVersion(Version): 16 version_re = re.compile('^(\\d+) \\. (\\d+) (\\. (\\d+))? ([ab](\\d+))?$', re.VERBOSE) 17 18 def parse(self, vstring): 19 match = self.version_re.match(vstring) 20 if not match: 21 raise ValueError, "invalid version number '%s'" % vstring 22 major, minor, patch, prerelease, prerelease_num = match.group(1, 2, 4, 5, 6) 23 if patch: 24 self.version = tuple(map(string.atoi, [major, minor, patch])) 25 else: 26 self.version = tuple(map(string.atoi, [major, minor]) + [0]) 27 if prerelease: 28 self.prerelease = (prerelease[0], string.atoi(prerelease_num)) 29 else: 30 self.prerelease = None 31 32 def __str__(self): 33 if self.version[2] == 0: 34 vstring = string.join(map(str, self.version[0:2]), '.') 35 else: 36 vstring = string.join(map(str, self.version), '.') 37 if self.prerelease: 38 vstring = vstring + self.prerelease[0] + str(self.prerelease[1]) 39 return vstring 40 41 def __cmp__(self, other): 42 if isinstance(other, StringType): 43 other = StrictVersion(other) 44 compare = cmp(self.version, other.version) 45 if compare == 0: 46 if not self.prerelease and not other.prerelease: 47 return 0 48 if self.prerelease and not other.prerelease: 49 return -1 50 if not self.prerelease and other.prerelease: 51 return 1 52 if self.prerelease and other.prerelease: 53 return cmp(self.prerelease, other.prerelease) 54 else: 55 return compare 56 57 58 class LooseVersion(Version): 59 component_re = re.compile('(\\d+ | [a-z]+ | \\.)', re.VERBOSE) 60 61 def __init__(self, vstring = None): 62 if vstring: 63 self.parse(vstring) 64 65 def parse(self, vstring): 66 self.vstring = vstring 67 components = filter(lambda x: x and x != '.', self.component_re.split(vstring)) 68 for i in range(len(components)): 69 try: 70 components[i] = int(components[i]) 71 except ValueError: 72 pass 73 74 self.version = components 75 76 def __str__(self): 77 return self.vstring 78 79 def __repr__(self): 80 return "LooseVersion ('%s')" % str(self) 81 82 def __cmp__(self, other): 83 if isinstance(other, StringType): 84 other = LooseVersion(other) 85 return cmp(self.version, other.version)