66
77from functools import total_ordering
88import functools
9- import re
109
1110import attr
1211import semantic_version
@@ -158,6 +157,13 @@ def __ge__(self, other):
158157 return NotImplemented
159158 return self .value .__ge__ (other .value )
160159
160+ def to_dict (self ):
161+ return {
162+ "string" : self .string ,
163+ "normalized_string" : self .normalized_string ,
164+ "value" : str (self .value ),
165+ }
166+
161167
162168@attr .s (frozen = True , order = False , hash = True )
163169class GenericVersion (Version ):
@@ -452,17 +458,18 @@ def __lt__(self, other):
452458 return NotImplemented
453459 base_vers1 = self .value [:- 1 ]
454460 base_vers2 = other .value [:- 1 ]
455- if base_vers1 == base_vers2 and (is_prerelease (self .value ) or is_prerelease (other .value )):
456- return is_prerelease1_lt_prerelease2 (self .value , other .value )
461+ # Check if versions have the same base, and `one and only one` of them is a pre-release.
462+ if base_vers1 == base_vers2 and (is_prerelease (self .value ) != is_prerelease (other .value )):
463+ return is_prerelease (self .value )
457464 return self .value .__lt__ (other .value )
458465
459466 def __gt__ (self , other ):
460467 if not isinstance (other , self .__class__ ):
461468 return NotImplemented
462469 base_vers1 = self .value [:- 1 ]
463470 base_vers2 = other .value [:- 1 ]
464- if base_vers1 == base_vers2 and (is_prerelease (self .value ) or is_prerelease (other .value )):
465- return not is_prerelease1_lt_prerelease2 ( self . value , other .value )
471+ if base_vers1 == base_vers2 and (is_prerelease (self .value ) != is_prerelease (other .value )):
472+ return is_prerelease ( other .value )
466473 return self .value .__gt__ (other .value )
467474
468475
@@ -471,14 +478,6 @@ def is_prerelease(value):
471478 return patch .startswith ("-beta" ) or patch .startswith ("-alpha" )
472479
473480
474- def is_prerelease1_lt_prerelease2 (value1 , value2 ):
475- if is_prerelease (value1 ) and is_prerelease (value2 ):
476- patch1 = value1 [- 1 ]
477- patch2 = value2 [- 1 ]
478- return patch1 [1 :] < patch2 [1 :]
479- return is_prerelease (value1 ) and not is_prerelease (value2 )
480-
481-
482481@attr .s (frozen = True , order = False , eq = False , hash = True )
483482class OpensslVersion (Version ):
484483 """
0 commit comments