@@ -18,33 +18,39 @@ class VersionInfo(tuple):
1818 Example:
1919
2020 VersionInfo(1, 2, 0) == \
21- VersionInfo(major=1, minor=2, micro=0) == \
21+ VersionInfo(major=1, minor=2, micro=0, modifier='release' ) == \
2222 (1, 2, 0)
2323 '''
2424
2525 __slots__ = ()
2626
2727
28- _fields = ('major' , 'minor' , 'micro' )
28+ _fields = ('major' , 'minor' , 'micro' , 'modifier' )
2929
3030
31- def __new__ (cls , major , minor , micro ):
32- '''Create new instance of `VersionInfo(major, minor, micro)`.'''
33- return tuple .__new__ (cls , (major , minor , micro ))
31+ def __new__ (cls , major , minor = 0 , micro = 0 , modifier = 'release' ):
32+ '''
33+ Create new instance of `VersionInfo(major, minor, micro, modifier)`.
34+ '''
35+ assert isinstance (major , int )
36+ assert isinstance (minor , int )
37+ assert isinstance (micro , int )
38+ assert isinstance (modifier , basestring )
39+ return tuple .__new__ (cls , (major , minor , micro , modifier ))
3440
3541
3642 @classmethod
3743 def _make (cls , iterable , new = tuple .__new__ , len = len ):
3844 '''Make a new `VersionInfo` object from a sequence or iterable.'''
3945 result = new (cls , iterable )
40- if len (result ) != 3 :
41- raise TypeError ('Expected 3 arguments, got %d' % len (result ))
46+ if len (result ) != 4 :
47+ raise TypeError ('Expected 4 arguments, got %d' % len (result ))
4248 return result
4349
4450
4551 def __repr__ (self ):
4652 '''Return a nicely formatted representation string.'''
47- return 'VersionInfo(major=%r, minor=%r, micro=%r)' % self
53+ return 'VersionInfo(major=%r, minor=%r, micro=%r, modifier=%r )' % self
4854
4955
5056 def _asdict (self ):
@@ -59,21 +65,33 @@ def _replace(self, **kwargs):
5965 Make a `VersionInfo` object replacing specified fields with new values.
6066 '''
6167 result = \
62- self ._make (map (kwargs .pop , ('major' , 'minor' , 'micro' ), self ))
68+ self ._make (map (kwargs .pop , ('major' , 'minor' , 'micro' , 'modifier' ),
69+ self ))
6370 if kwargs :
6471 raise ValueError ('Got unexpected field names: %r' % kwargs .keys ())
6572 return result
6673
6774
6875 def __getnewargs__ (self ):
69- '''Return self as a plain tuple. Used by copy and pickle.'''
70- return tuple (self )
76+ '''Return self as a plain tuple. Used by copy and pickle.'''
77+ return tuple (self )
7178
79+ @property
80+ def version_text (self ):
81+ '''A textual description of the version, like '1.4.2 beta'.'''
82+ version_text = '%s.%s' % (self .major , self .minor )
83+ if self .micro :
84+ version_text += '.%s' % self .micro
85+ if self .modifier != 'release' :
86+ version_text += ' %s' % self .modifier
87+ return version_text
7288
73- major = property (_itemgetter (0 ), doc = 'Alias for field number 0' )
7489
90+ major = property (_itemgetter (0 ))
7591
76- minor = property (_itemgetter (1 ), doc = 'Alias for field number 1' )
92+ minor = property (_itemgetter (1 ))
7793
78-
79- micro = property (_itemgetter (2 ), doc = 'Alias for field number 2' )
94+ micro = property (_itemgetter (2 ))
95+
96+ modifier = property (_itemgetter (3 ))
97+
0 commit comments