@@ -147,13 +147,13 @@ def from_py_version(cls, py_version: packaging.version.Version):
147147 """Create version from a standard Python version object."""
148148 if not isinstance (py_version , packaging .version .Version ):
149149 _LOG .warning ('attempting to parse %s as packaging.version.Version...' , type (py_version ))
150- ver = py_version ._version
150+ ver = py_version ._version # pylint: disable = protected-access
151151 major , minor , patch = [ver .release [i ] if len (ver .release ) > i
152152 else None for i in range (3 )]
153153 pre_release : t .Optional [t .Sequence [
154154 t .Tuple [t .Optional [str ], t .Optional [str ], t .Optional [int ]]]] = None
155155 local = None
156- pre_ver : t .Optional [t .Tuple [None , int ]]
156+ pre_ver : t .Optional [t .Tuple [str | None , int ]]
157157 if len (ver .release ) == 4 :
158158 pre_ver = (None , ver .release [3 ])
159159 elif len (ver .release ) > 4 :
@@ -176,12 +176,14 @@ def from_py_version(cls, py_version: packaging.version.Version):
176176 local = tuple (itertools .chain .from_iterable (
177177 (dot , str (_ )) for dot , _ in zip ('.' * len (ver .local ), ver .local )))[1 :]
178178 _LOG .debug ('parsing %s %s' , type (py_version ), py_version )
179+ assert major is not None
179180 return cls (major , minor , patch , pre_release = pre_release , local = local )
180181
181182 @classmethod
182183 def from_sem_version (cls , sem_version : t .Union [dict , semver .VersionInfo ]):
183184 """Create version from semantic version object."""
184185 _LOG .debug ('parsing %s %s' , type (sem_version ), sem_version )
186+ local : str | tuple | None
185187 if isinstance (sem_version , semver .VersionInfo ):
186188 major , minor , patch = sem_version .major , sem_version .minor , sem_version .patch
187189 pre_release = sem_version .prerelease
@@ -202,15 +204,15 @@ def from_version(cls, version: 'Version'):
202204
203205 def __init__ (
204206 self , major : int , minor : t .Optional [int ] = None , patch : t .Optional [int ] = None , * args ,
205- pre_release : t .Sequence [
206- t .Tuple [t .Optional [str ], t .Optional [str ], t .Optional [int ]]] = None ,
207- local : t .Union [str , tuple ] = None ):
207+ pre_release : t .Optional [ t . Sequence [
208+ t .Tuple [t .Optional [str ], t .Optional [str ], t .Optional [int ]]]] = None ,
209+ local : t .Union [str , tuple , None ] = None ):
208210 self ._major : t .Optional [int ] = None
209211 self ._minor : t .Optional [int ] = None
210212 self ._patch : t .Optional [int ] = None
211213 self ._pre_release : t .Optional [
212214 t .List [t .Tuple [t .Optional [str ], t .Optional [str ], t .Optional [int ]]]] = None
213- self ._local : t .Optional [t .Sequence [str ]] = None
215+ self ._local : t .Optional [t .Tuple [str , ... ]] = None
214216
215217 self .release = major , minor , patch
216218
@@ -224,7 +226,7 @@ def __init__(
224226 args = args [consumed_args :]
225227 else :
226228 pre_release = None
227- self .pre_release = pre_release
229+ self .pre_release = pre_release if pre_release is None else list ( pre_release )
228230
229231 if args and local is not None :
230232 raise ValueError (f'args={ args } and local={ local } are present at the same time'
@@ -258,7 +260,7 @@ def _get_pre_release_from_args(self, args) -> t.Tuple[
258260 raise ValueError (f'pre-release segment arg={ arg } (index { i } in args={ args } '
259261 f' in { repr (self )} ) must be a 3-tuple' )
260262 else :
261- accumulated : t .List [t .Union [int , str ]] = []
263+ accumulated : t .List [t .Union [int , str , None ]] = []
262264 for i , arg in enumerate (args ):
263265 if not accumulated :
264266 if arg in (None , '.' , '-' ):
@@ -312,7 +314,7 @@ def release(self, release: t.Tuple[int, t.Optional[int], t.Optional[int]]):
312314
313315 @property
314316 def pre_release (self ) -> t .Optional [
315- t .Sequence [t .Tuple [t .Optional [str ], t .Optional [str ], t .Optional [int ]]]]:
317+ t .List [t .Tuple [t .Optional [str ], t .Optional [str ], t .Optional [int ]]]]:
316318 """Pre-release version component."""
317319 if self ._pre_release is None :
318320 return None
0 commit comments