11
11
'test'
12
12
]
13
13
14
+ STAGES = ['tp' , 'beta' , 'rc' ]
14
15
15
- class Version (namedtuple ('_Version' , 'major minor patch rc edition' )):
16
+
17
+ class Version (namedtuple ('_Version' , 'major minor patch stage edition' )):
16
18
17
19
@classmethod
18
20
def parse (cls , version ):
19
21
edition = None
20
22
version = version .lstrip ('v' )
21
- version , _ , rc = version .partition ('-' )
22
- if rc :
23
- if 'rc' not in rc :
24
- edition = rc
25
- rc = None
26
- elif '-' in rc :
27
- edition , rc = rc .split ('-' )
28
-
23
+ version , _ , stage = version .partition ('-' )
24
+ if stage :
25
+ if not any (marker in stage for marker in STAGES ):
26
+ edition = stage
27
+ stage = None
28
+ elif '-' in stage :
29
+ edition , stage = stage .split ('-' )
29
30
major , minor , patch = version .split ('.' , 3 )
30
- return cls (major , minor , patch , rc , edition )
31
+ return cls (major , minor , patch , stage , edition )
31
32
32
33
@property
33
34
def major_minor (self ):
@@ -38,14 +39,22 @@ def order(self):
38
39
"""Return a representation that allows this object to be sorted
39
40
correctly with the default comparator.
40
41
"""
41
- # rc releases should appear before official releases
42
- rc = (0 , self .rc ) if self .rc else (1 , )
43
- return (int (self .major ), int (self .minor ), int (self .patch )) + rc
42
+ # non-GA releases should appear before GA releases
43
+ # Order: tp -> beta -> rc -> GA
44
+ if self .stage :
45
+ for st in STAGES :
46
+ if st in self .stage :
47
+ stage = (STAGES .index (st ), self .stage )
48
+ break
49
+ else :
50
+ stage = (len (STAGES ),)
51
+
52
+ return (int (self .major ), int (self .minor ), int (self .patch )) + stage
44
53
45
54
def __str__ (self ):
46
- rc = '-{}' .format (self .rc ) if self .rc else ''
55
+ stage = '-{}' .format (self .stage ) if self .stage else ''
47
56
edition = '-{}' .format (self .edition ) if self .edition else ''
48
- return '.' .join (map (str , self [:3 ])) + edition + rc
57
+ return '.' .join (map (str , self [:3 ])) + edition + stage
49
58
50
59
51
60
def main ():
0 commit comments