1+ import dataclasses
12import itertools
23import os
34import re
45import shlex
56import textwrap
67from collections import defaultdict
78from collections .abc import Sequence
8- from functools import total_ordering
99
1010from ..typing import PathOrStr
1111
@@ -140,19 +140,17 @@ def parse_key_value_string(
140140 return dict (result )
141141
142142
143- @total_ordering
143+ @dataclasses . dataclass ( order = True )
144144class FlexibleVersion :
145- version_str : str
146- version_parts : tuple [int , ...]
147- suffix : str
148-
149- def __init__ (self , version_str : str ) -> None :
150- self .version_str = version_str
145+ version_parts : tuple [int , ...] = dataclasses .field (init = False , repr = False )
146+ suffix : str = dataclasses .field (init = False , repr = False )
147+ version_str : str = dataclasses .field (compare = False )
151148
149+ def __post_init__ (self ) -> None :
152150 # Split into numeric parts and the optional suffix
153- match = re .match (r"^[v]?(\d+(\.\d+)*)(.*)$" , version_str )
151+ match = re .match (r"^[v]?(\d+(\.\d+)*)(.*)$" , self . version_str )
154152 if not match :
155- msg = f"Invalid version string: { version_str } "
153+ msg = f"Invalid version string: { self . version_str } "
156154 raise ValueError (msg )
157155
158156 version_part , _ , suffix = match .groups ()
@@ -172,18 +170,5 @@ def _remove_trailing_zeros(parts: tuple[int, ...]) -> tuple[int, ...]:
172170 parts = parts [:- 1 ]
173171 return parts
174172
175- def __eq__ (self , other : object ) -> bool :
176- if not isinstance (other , FlexibleVersion ):
177- raise NotImplementedError ()
178- return (self .version_parts , self .suffix ) == (other .version_parts , other .suffix )
179-
180- def __lt__ (self , other : object ) -> bool :
181- if not isinstance (other , FlexibleVersion ):
182- raise NotImplementedError ()
183- return (self .version_parts , self .suffix ) < (other .version_parts , other .suffix )
184-
185- def __repr__ (self ) -> str :
186- return f"FlexibleVersion('{ self .version_str } ')"
187-
188173 def __str__ (self ) -> str :
189174 return self .version_str
0 commit comments