Skip to content

Commit 8a0eb21

Browse files
committed
fix: use better type annotations
1 parent a99ac98 commit 8a0eb21

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

version_query/version.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)