Skip to content

Commit a05e0ab

Browse files
committed
refactor: split and clean up one complex function
1 parent 2200b53 commit a05e0ab

File tree

1 file changed

+41
-25
lines changed

1 file changed

+41
-25
lines changed

version_query/version.py

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -172,35 +172,51 @@ def __init__( # pylint: disable = keyword-arg-before-vararg, too-many-arguments
172172

173173
def _get_pre_release_from_args(self, args) -> t.Tuple[
174174
t.Sequence[t.Tuple[t.Optional[str], t.Optional[str], t.Optional[int]]], int]:
175+
"""Get pre-release version component from args."""
176+
if args and isinstance(args[0], tuple):
177+
return self._get_prerelease_from_tuples(args)
178+
175179
pre_release: t.List[t.Tuple[t.Optional[str], t.Optional[str], t.Optional[int]]] = []
176180
consumed_args = 0
177-
if args and isinstance(args[0], tuple):
178-
for i, arg in enumerate(args):
179-
if not isinstance(arg, tuple):
180-
break
181-
if len(arg) == 3 and arg[0] in (None, '.', '-'):
182-
pre_release.append(arg)
183-
consumed_args += 1
184-
continue
185-
if i == len(args) - 1:
181+
accumulated: t.List[t.Union[int, str, None]] = []
182+
for i, arg in enumerate(args):
183+
if not accumulated:
184+
if arg in (None, '.', '-'):
185+
if len(args) < i + 3:
186+
raise ValueError(
187+
'expected 3 consecutive values'
188+
f' from index {i} in args={args} in {repr(self)}')
189+
else:
186190
break
187-
raise ValueError(f'pre-release segment arg={arg} (index {i} in args={args}'
188-
f' in {repr(self)}) must be a 3-tuple')
189-
else:
190-
accumulated: t.List[t.Union[int, str, None]] = []
191-
for i, arg in enumerate(args):
192-
if not accumulated:
193-
if arg in (None, '.', '-'):
194-
if len(args) < i + 3:
195-
raise ValueError(f'expected 3 consecutive values from index {i}'
196-
f' in args={args} in {repr(self)}')
197-
else:
198-
break
199-
accumulated.append(arg)
191+
accumulated.append(arg)
192+
consumed_args += 1
193+
if len(accumulated) == 3:
194+
_separator, _type, _patch = \
195+
accumulated # pylint: disable = unbalanced-tuple-unpacking
196+
assert _separator is None or isinstance(_separator, str), _separator
197+
assert _type is None or isinstance(_type, str), _type
198+
assert _patch is None or isinstance(_patch, int), _patch
199+
pre_release.append((_separator, _type, _patch))
200+
accumulated = []
201+
return pre_release, consumed_args
202+
203+
def _get_prerelease_from_tuples(self, args) -> t.Tuple[
204+
t.Sequence[t.Tuple[t.Optional[str], t.Optional[str], t.Optional[int]]], int]:
205+
"""Get pre-release version component from args, assuming they are sequence of tuples."""
206+
pre_release: t.List[t.Tuple[t.Optional[str], t.Optional[str], t.Optional[int]]] = []
207+
consumed_args = 0
208+
for i, arg in enumerate(args):
209+
if not isinstance(arg, tuple):
210+
break
211+
if len(arg) == 3 and arg[0] in (None, '.', '-'):
212+
pre_release.append(arg)
200213
consumed_args += 1
201-
if len(accumulated) == 3:
202-
pre_release.append(tuple(accumulated))
203-
accumulated = []
214+
continue
215+
if i == len(args) - 1:
216+
break
217+
raise ValueError(
218+
f'pre-release segment arg={arg} (index {i} in args={args} in {repr(self)})'
219+
' must be a 3-tuple')
204220
return pre_release, consumed_args
205221

206222
@property

0 commit comments

Comments
 (0)