From e3067a06ea8d39afd541a814957c3efa4e2e31a0 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Fri, 9 Oct 2020 22:23:17 +0000 Subject: [PATCH] misc cleanup --- src/pycalver/cli.py | 71 ++++++++++++++++++++++++--------------- src/pycalver/v2version.py | 36 ++++++++++---------- test/test_version.py | 4 +-- 3 files changed, 64 insertions(+), 47 deletions(-) diff --git a/src/pycalver/cli.py b/src/pycalver/cli.py index f12186c..db6bdb4 100755 --- a/src/pycalver/cli.py +++ b/src/pycalver/cli.py @@ -146,13 +146,34 @@ def _log_no_change(subcmd: str, version_pattern: str, old_version: str) -> None: 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= 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.version_option(version="v202010.1041-beta") @click.help_option() @click.option('-v', '--verbose', count=True, help="Control log level. -vv for debug level.") def cli(verbose: int = 0) -> None: """Automatically update PyCalVer version strings in all project files.""" - _configure_logging(verbose=max(_VERBOSE, verbose)) + if verbose: + _configure_logging(verbose=max(_VERBOSE, verbose)) @cli.command() @@ -168,10 +189,16 @@ def cli(verbose: int = 0) -> None: f"{', '.join(VALID_RELEASE_TAG_VALUES)}." ), ) -@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("-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("--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("-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 (rc1, rc2, rc3..).", +) @click.option("--pin-date", is_flag=True, default=False, help="Leave date components unchanged.") @click.option( "--date", @@ -193,10 +220,11 @@ def test( ) -> None: """Increment a version number for demo purposes.""" _configure_logging(verbose=max(_VERBOSE, verbose)) - raw_pattern = pattern # use internal naming convention - tag = release # use internal naming convention _validate_release_tag(tag) + + raw_pattern = pattern # use internal naming convention + _validate_flags(raw_pattern, major, minor, patch) _date = _validate_date(date, pin_date) @@ -315,25 +343,8 @@ def grep( verbose = max(_VERBOSE, verbose) _configure_logging(verbose) - raw_pattern = pattern # use internal naming convention - - 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= 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 + raw_pattern = pattern # use internal naming convention + normalized_pattern = _get_normalized_pattern(raw_pattern, version_pattern) 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("-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("-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( "--date", diff --git a/src/pycalver/v2version.py b/src/pycalver/v2version.py index bf41395..dfd1135 100644 --- a/src/pycalver/v2version.py +++ b/src/pycalver/v2version.py @@ -102,20 +102,20 @@ FieldValues = typ.Dict[FieldKey, MatchGroupStr] 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. - >>> 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) (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) (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) (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) (2021, 1, 3) >>> (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. - >>> 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) (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) (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) (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) (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) (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) (1, 23, 45, 'final') """ @@ -210,7 +210,7 @@ def _parse_version_info(field_values: FieldValues) -> version.V2VersionInfo: for key in field_values: assert key in VALID_FIELD_KEYS, key - cinfo = _parse_calendar_info(field_values) + cinfo = parse_field_values_to_cinfo(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]") >>> 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]") >>> 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]") >>> 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") >>> 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) match = pattern.regexp.match(version_str) @@ -293,7 +293,7 @@ def parse_version_info( raise version.PatternError(err_msg) else: 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: diff --git a/test/test_version.py b/test/test_version.py index 18672c3..b6e6bae 100644 --- a/test/test_version.py +++ b/test/test_version.py @@ -164,7 +164,7 @@ def v1vnfo(**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 = [ @@ -214,7 +214,7 @@ def test_v1_parse_versions(pattern_str, line, expected_vinfo): def test_v2_parse_versions(): _vnfo = v2version.parse_version_info("v201712.0033", raw_pattern="vYYYY0M.BUILD[-RELEASE[NUM]]") 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():