misc cleanup

This commit is contained in:
Manuel Barkhau 2020-10-09 22:23:17 +00:00
parent 15c560a0c5
commit e3067a06ea
3 changed files with 64 additions and 47 deletions

View file

@ -146,12 +146,33 @@ def _log_no_change(subcmd: str, version_pattern: str, old_version: str) -> None:
logger.info(f"Perhaps try: pycalver {subcmd} {available_flags_str} ") logger.info(f"Perhaps try: pycalver {subcmd} {available_flags_str} ")
def _get_normalized_pattern(raw_pattern: str, version_pattern: typ.Optional[str]) -> str:
is_version_pattern_required = "{version}" in raw_pattern or "{pep440_version}" in raw_pattern
if is_version_pattern_required and version_pattern is None:
logger.error(
"Argument --version-pattern=<PATTERN> is required"
" for placeholders: {version}/{pep440_version}."
)
sys.exit(1)
elif version_pattern is None:
_version_pattern = "INVALID" # pacify mypy, it's not referenced in raw_pattern
else:
_version_pattern = version_pattern
if is_version_pattern_required:
return v2patterns.normalize_pattern(_version_pattern, raw_pattern)
else:
return raw_pattern
@click.group() @click.group()
@click.version_option(version="v202010.1041-beta") @click.version_option(version="v202010.1041-beta")
@click.help_option() @click.help_option()
@click.option('-v', '--verbose', count=True, help="Control log level. -vv for debug level.") @click.option('-v', '--verbose', count=True, help="Control log level. -vv for debug level.")
def cli(verbose: int = 0) -> None: def cli(verbose: int = 0) -> None:
"""Automatically update PyCalVer version strings in all project files.""" """Automatically update PyCalVer version strings in all project files."""
if verbose:
_configure_logging(verbose=max(_VERBOSE, verbose)) _configure_logging(verbose=max(_VERBOSE, verbose))
@ -168,10 +189,16 @@ def cli(verbose: int = 0) -> None:
f"{', '.join(VALID_RELEASE_TAG_VALUES)}." f"{', '.join(VALID_RELEASE_TAG_VALUES)}."
), ),
) )
@click.option("--major" , is_flag=True, default=False, help="Increment major component.") @click.option("--major", is_flag=True, default=False, help="Increment major component.")
@click.option("-m" , "--minor", is_flag=True, default=False, help="Increment minor component.") @click.option("-m" , "--minor", is_flag=True, default=False, help="Increment minor component.")
@click.option("-p" , "--patch", is_flag=True, default=False, help="Increment patch component.") @click.option("-p" , "--patch", is_flag=True, default=False, help="Increment patch component.")
@click.option("-r" , "--release-num", is_flag=True, default=False, help="Increment release number.") @click.option(
"-r",
"--release-num",
is_flag=True,
default=False,
help="Increment release number (rc1, rc2, rc3..).",
)
@click.option("--pin-date", is_flag=True, default=False, help="Leave date components unchanged.") @click.option("--pin-date", is_flag=True, default=False, help="Leave date components unchanged.")
@click.option( @click.option(
"--date", "--date",
@ -193,10 +220,11 @@ def test(
) -> None: ) -> None:
"""Increment a version number for demo purposes.""" """Increment a version number for demo purposes."""
_configure_logging(verbose=max(_VERBOSE, verbose)) _configure_logging(verbose=max(_VERBOSE, verbose))
raw_pattern = pattern # use internal naming convention
tag = release # use internal naming convention tag = release # use internal naming convention
_validate_release_tag(tag) _validate_release_tag(tag)
raw_pattern = pattern # use internal naming convention
_validate_flags(raw_pattern, major, minor, patch) _validate_flags(raw_pattern, major, minor, patch)
_date = _validate_date(date, pin_date) _date = _validate_date(date, pin_date)
@ -316,24 +344,7 @@ def grep(
_configure_logging(verbose) _configure_logging(verbose)
raw_pattern = pattern # use internal naming convention raw_pattern = pattern # use internal naming convention
normalized_pattern = _get_normalized_pattern(raw_pattern, version_pattern)
is_version_pattern_required = "{version}" in raw_pattern or "{pep440_version}" in raw_pattern
if is_version_pattern_required and version_pattern is None:
logger.error(
"Argument --version-pattern=<PATTERN> is required"
" for placeholders: {version}/{pep440_version}."
)
sys.exit(1)
elif version_pattern is None:
_version_pattern = "INVALID" # pacify mypy, it's not referenced in raw_pattern
else:
_version_pattern = version_pattern
if is_version_pattern_required:
normalized_pattern = v2patterns.normalize_pattern(_version_pattern, raw_pattern)
else:
normalized_pattern = raw_pattern
isatty = getattr(sys.stdout, 'isatty', lambda: False) isatty = getattr(sys.stdout, 'isatty', lambda: False)
@ -630,7 +641,13 @@ def _update_cfg_from_vcs(cfg: config.Config, fetch: bool) -> config.Config:
@click.option("--major", is_flag=True, default=False, help="Increment major component.") @click.option("--major", is_flag=True, default=False, help="Increment major component.")
@click.option("-m", "--minor", is_flag=True, default=False, help="Increment minor component.") @click.option("-m", "--minor", is_flag=True, default=False, help="Increment minor component.")
@click.option("-p", "--patch", is_flag=True, default=False, help="Increment patch component.") @click.option("-p", "--patch", is_flag=True, default=False, help="Increment patch component.")
@click.option("-r", "--release-num", is_flag=True, default=False, help="Increment release number.") @click.option(
"-r",
"--release-num",
is_flag=True,
default=False,
help="Increment release number (rc1, rc2, rc3..).",
)
@click.option("--pin-date", is_flag=True, default=False, help="Leave date components unchanged.") @click.option("--pin-date", is_flag=True, default=False, help="Leave date components unchanged.")
@click.option( @click.option(
"--date", "--date",

View file

@ -102,20 +102,20 @@ FieldValues = typ.Dict[FieldKey, MatchGroupStr]
VersionInfoKW = typ.Dict[str, typ.Union[str, int, None]] VersionInfoKW = typ.Dict[str, typ.Union[str, int, None]]
def _parse_calendar_info(field_values: FieldValues) -> version.V2CalendarInfo: def parse_field_values_to_cinfo(field_values: FieldValues) -> version.V2CalendarInfo:
"""Parse normalized V2CalendarInfo from groups of a matched pattern. """Parse normalized V2CalendarInfo from groups of a matched pattern.
>>> cinfo = _parse_version_info({'year_y': "2021", 'week_w': "02"}) >>> cinfo = parse_field_values_to_cinfo({'year_y': "2021", 'week_w': "02"})
>>> (cinfo.year_y, cinfo.week_w) >>> (cinfo.year_y, cinfo.week_w)
(2021, 2) (2021, 2)
>>> cinfo = _parse_version_info({'year_y': "2021", 'week_u': "02"}) >>> cinfo = parse_field_values_to_cinfo({'year_y': "2021", 'week_u': "02"})
>>> (cinfo.year_y, cinfo.week_u) >>> (cinfo.year_y, cinfo.week_u)
(2021, 2) (2021, 2)
>>> cinfo = _parse_version_info({'year_g': "2021", 'week_v': "02"}) >>> cinfo = parse_field_values_to_cinfo({'year_g': "2021", 'week_v': "02"})
>>> (cinfo.year_g, cinfo.week_v) >>> (cinfo.year_g, cinfo.week_v)
(2021, 2) (2021, 2)
>>> cinfo = _parse_version_info({'year_y': "2021", 'month': "01", 'dom': "03"}) >>> cinfo = parse_field_values_to_cinfo({'year_y': "2021", 'month': "01", 'dom': "03"})
>>> (cinfo.year_y, cinfo.month, cinfo.dom) >>> (cinfo.year_y, cinfo.month, cinfo.dom)
(2021, 1, 3) (2021, 1, 3)
>>> (cinfo.year_y, cinfo.week_w, cinfo.year_y, cinfo.week_u,cinfo.year_g, cinfo.week_v) >>> (cinfo.year_y, cinfo.week_w, cinfo.year_y, cinfo.week_u,cinfo.year_g, cinfo.week_v)
@ -179,30 +179,30 @@ def _parse_calendar_info(field_values: FieldValues) -> version.V2CalendarInfo:
) )
def _parse_version_info(field_values: FieldValues) -> version.V2VersionInfo: def parse_field_values_to_vinfo(field_values: FieldValues) -> version.V2VersionInfo:
"""Parse normalized V2VersionInfo from groups of a matched pattern. """Parse normalized V2VersionInfo from groups of a matched pattern.
>>> vinfo = _parse_version_info({'year_y': "2018", 'month': "11", 'bid': "0099"}) >>> vinfo = parse_field_values_to_vinfo({'year_y': "2018", 'month': "11", 'bid': "0099"})
>>> (vinfo.year_y, vinfo.month, vinfo.quarter, vinfo.bid, vinfo.tag) >>> (vinfo.year_y, vinfo.month, vinfo.quarter, vinfo.bid, vinfo.tag)
(2018, 11, 4, '0099', 'final') (2018, 11, 4, '0099', 'final')
>>> vinfo = _parse_version_info({'year_y': "18", 'month': "11"}) >>> vinfo = parse_field_values_to_vinfo({'year_y': "18", 'month': "11"})
>>> (vinfo.year_y, vinfo.month, vinfo.quarter) >>> (vinfo.year_y, vinfo.month, vinfo.quarter)
(2018, 11, 4) (2018, 11, 4)
>>> vinfo = _parse_version_info({'year_y': "2018", 'doy': "11", 'bid': "099", 'tag': "beta"}) >>> vinfo = parse_field_values_to_vinfo({'year_y': "2018", 'doy': "11", 'bid': "099", 'tag': "beta"})
>>> (vinfo.year_y, vinfo.month, vinfo.dom, vinfo.doy, vinfo.bid, vinfo.tag) >>> (vinfo.year_y, vinfo.month, vinfo.dom, vinfo.doy, vinfo.bid, vinfo.tag)
(2018, 1, 11, 11, '099', 'beta') (2018, 1, 11, 11, '099', 'beta')
>>> vinfo = _parse_version_info({'year_y': "2018", 'month': "6", 'dom': "15"}) >>> vinfo = parse_field_values_to_vinfo({'year_y': "2018", 'month': "6", 'dom': "15"})
>>> (vinfo.year_y, vinfo.month, vinfo.dom, vinfo.doy) >>> (vinfo.year_y, vinfo.month, vinfo.dom, vinfo.doy)
(2018, 6, 15, 166) (2018, 6, 15, 166)
>>> vinfo = _parse_version_info({'major': "1", 'minor': "23", 'patch': "45"}) >>> vinfo = parse_field_values_to_vinfo({'major': "1", 'minor': "23", 'patch': "45"})
>>> (vinfo.major, vinfo.minor, vinfo.patch) >>> (vinfo.major, vinfo.minor, vinfo.patch)
(1, 23, 45) (1, 23, 45)
>>> vinfo = _parse_version_info({'major': "1", 'minor': "023", 'patch': "0045"}) >>> vinfo = parse_field_values_to_vinfo({'major': "1", 'minor': "023", 'patch': "0045"})
>>> (vinfo.major, vinfo.minor, vinfo.patch, vinfo.tag) >>> (vinfo.major, vinfo.minor, vinfo.patch, vinfo.tag)
(1, 23, 45, 'final') (1, 23, 45, 'final')
""" """
@ -210,7 +210,7 @@ def _parse_version_info(field_values: FieldValues) -> version.V2VersionInfo:
for key in field_values: for key in field_values:
assert key in VALID_FIELD_KEYS, key assert key in VALID_FIELD_KEYS, key
cinfo = _parse_calendar_info(field_values) cinfo = parse_field_values_to_cinfo(field_values)
fvals = field_values fvals = field_values
@ -263,19 +263,19 @@ def parse_version_info(
>>> vinfo = parse_version_info("v201712.0033-beta", raw_pattern="vYYYY0M.BUILD[-RELEASE]") >>> vinfo = parse_version_info("v201712.0033-beta", raw_pattern="vYYYY0M.BUILD[-RELEASE]")
>>> fvals = {'year_y': 2017, 'month': 12, 'bid': "0033", 'tag': "beta"} >>> fvals = {'year_y': 2017, 'month': 12, 'bid': "0033", 'tag': "beta"}
>>> assert vinfo == _parse_version_info(fvals) >>> assert vinfo == parse_field_values_to_vinfo(fvals)
>>> vinfo = parse_version_info("v201712.0033", raw_pattern="vYYYY0M.BUILD[-RELEASE]") >>> vinfo = parse_version_info("v201712.0033", raw_pattern="vYYYY0M.BUILD[-RELEASE]")
>>> fvals = {'year_y': 2017, 'month': 12, 'bid': "0033"} >>> fvals = {'year_y': 2017, 'month': 12, 'bid': "0033"}
>>> assert vinfo == _parse_version_info(fvals) >>> assert vinfo == parse_field_values_to_vinfo(fvals)
>>> vinfo = parse_version_info("201712.33b0", raw_pattern="YYYY0M.BLD[PYTAGNUM]") >>> vinfo = parse_version_info("201712.33b0", raw_pattern="YYYY0M.BLD[PYTAGNUM]")
>>> fvals = {'year_y': 2017, 'month': 12, 'bid': "33", 'tag': "beta", 'num': 0} >>> fvals = {'year_y': 2017, 'month': 12, 'bid': "33", 'tag': "beta", 'num': 0}
>>> assert vinfo == _parse_version_info(fvals) >>> assert vinfo == parse_field_values_to_vinfo(fvals)
>>> vinfo = parse_version_info("1.23.456", raw_pattern="MAJOR.MINOR.PATCH") >>> vinfo = parse_version_info("1.23.456", raw_pattern="MAJOR.MINOR.PATCH")
>>> fvals = {'major': "1", 'minor': "23", 'patch': "456"} >>> fvals = {'major': "1", 'minor': "23", 'patch': "456"}
>>> assert vinfo == _parse_version_info(fvals) >>> assert vinfo == parse_field_values_to_vinfo(fvals)
""" """
pattern = v2patterns.compile_pattern(raw_pattern) pattern = v2patterns.compile_pattern(raw_pattern)
match = pattern.regexp.match(version_str) match = pattern.regexp.match(version_str)
@ -293,7 +293,7 @@ def parse_version_info(
raise version.PatternError(err_msg) raise version.PatternError(err_msg)
else: else:
field_values = match.groupdict() field_values = match.groupdict()
return _parse_version_info(field_values) return parse_field_values_to_vinfo(field_values)
def is_valid(version_str: str, raw_pattern: str = "vYYYY0M.BUILD[-RELEASE]") -> bool: def is_valid(version_str: str, raw_pattern: str = "vYYYY0M.BUILD[-RELEASE]") -> bool:

View file

@ -164,7 +164,7 @@ def v1vnfo(**field_values):
def v2vnfo(**field_values): def v2vnfo(**field_values):
return v2version._parse_version_info(field_values) return v2version.parse_field_values_to_vinfo(field_values)
PARSE_V1_VERSION_TEST_CASES = [ PARSE_V1_VERSION_TEST_CASES = [
@ -214,7 +214,7 @@ def test_v1_parse_versions(pattern_str, line, expected_vinfo):
def test_v2_parse_versions(): def test_v2_parse_versions():
_vnfo = v2version.parse_version_info("v201712.0033", raw_pattern="vYYYY0M.BUILD[-RELEASE[NUM]]") _vnfo = v2version.parse_version_info("v201712.0033", raw_pattern="vYYYY0M.BUILD[-RELEASE[NUM]]")
fvals = {'year_y': 2017, 'month': 12, 'bid': "0033"} fvals = {'year_y': 2017, 'month': 12, 'bid': "0033"}
assert _vnfo == v2version._parse_version_info(fvals) assert _vnfo == v2version.parse_field_values_to_vinfo(fvals)
def test_v2_format_version(): def test_v2_format_version():