diff --git a/setup.cfg b/setup.cfg index 8d1258d..d638129 100644 --- a/setup.cfg +++ b/setup.cfg @@ -19,7 +19,8 @@ warn_redundant_casts = True [tool:isort] -known_third_party = click,pathlib2 +known_first_party = pycalver,pycalver2 +known_third_party = click,pathlib2,lexid force_single_line = True length_sort = True @@ -161,3 +162,8 @@ disable = missing-class-docstring, missing-function-docstring, raise-missing-from, + duplicate-code, + +generated-members = + # members of typing.NamedTuple + "(_replace|_asdict|_fields)", diff --git a/src/pycalver/__main__.py b/src/pycalver/__main__.py index 7149fc2..2f10642 100755 --- a/src/pycalver/__main__.py +++ b/src/pycalver/__main__.py @@ -15,10 +15,10 @@ import logging import subprocess as sp import click -import pycalver2.version as v2version import pycalver.cli as v1cli import pycalver.version as v1version +import pycalver2.version as v2version from pycalver import vcs from pycalver import config diff --git a/src/pycalver/rewrite.py b/src/pycalver/rewrite.py index ddc5146..fffdc52 100644 --- a/src/pycalver/rewrite.py +++ b/src/pycalver/rewrite.py @@ -13,12 +13,11 @@ import logging import pathlib2 as pl +import pycalver.version as v1version +import pycalver.patterns as v1patterns from pycalver import parse from pycalver import config -from . import version -from . import patterns - logger = logging.getLogger("pycalver.rewrite") @@ -78,12 +77,12 @@ def iter_file_paths( def rewrite_lines( pattern_strs: typ.List[str], - new_vinfo : version.VersionInfo, + new_vinfo : v1version.VersionInfo, old_lines : typ.List[str], ) -> typ.List[str]: """Replace occurances of pattern_strs in old_lines with new_vinfo. - >>> new_vinfo = version.parse_version_info("v201811.0123-beta") + >>> new_vinfo = v1version.parse_version_info("v201811.0123-beta") >>> pattern_strs = ['__version__ = "{pycalver}"'] >>> rewrite_lines(pattern_strs, new_vinfo, ['__version__ = "v201809.0002-beta"']) ['__version__ = "v201811.0123-beta"'] @@ -97,7 +96,7 @@ def rewrite_lines( for match in parse.iter_matches(old_lines, pattern_strs): found_patterns.add(match.pattern) - replacement = version.format_version(new_vinfo, match.pattern) + replacement = v1version.format_version(new_vinfo, match.pattern) span_l, span_r = match.span new_line = match.line[:span_l] + replacement + match.line[span_r:] new_lines[match.lineno] = new_line @@ -106,7 +105,7 @@ def rewrite_lines( if non_matched_patterns: for non_matched_pattern in non_matched_patterns: logger.error(f"No match for pattern '{non_matched_pattern}'") - compiled_pattern_str = patterns.compile_pattern_str(non_matched_pattern) + compiled_pattern_str = v1patterns.compile_pattern_str(non_matched_pattern) logger.error(f"Pattern compiles to regex '{compiled_pattern_str}'") raise NoPatternMatch("Invalid pattern(s)") else: @@ -115,19 +114,19 @@ def rewrite_lines( def rfd_from_content( pattern_strs: typ.List[str], - new_vinfo : version.VersionInfo, + new_vinfo : v1version.VersionInfo, content : str, ) -> RewrittenFileData: r"""Rewrite pattern occurrences with version string. - >>> new_vinfo = version.parse_version_info("v201809.0123") + >>> new_vinfo = v1version.parse_version_info("v201809.0123") >>> pattern_strs = ['__version__ = "{pycalver}"'] >>> content = '__version__ = "v201809.0001-alpha"' >>> rfd = rfd_from_content(pattern_strs, new_vinfo, content) >>> rfd.new_lines ['__version__ = "v201809.0123"'] >>> - >>> new_vinfo = version.parse_version_info("v1.2.3", "v{semver}") + >>> new_vinfo = v1version.parse_version_info("v1.2.3", "v{semver}") >>> pattern_strs = ['__version__ = "v{semver}"'] >>> content = '__version__ = "v1.2.2"' >>> rfd = rfd_from_content(pattern_strs, new_vinfo, content) @@ -142,12 +141,12 @@ def rfd_from_content( def iter_rewritten( file_patterns: config.PatternsByGlob, - new_vinfo : version.VersionInfo, + new_vinfo : v1version.VersionInfo, ) -> typ.Iterable[RewrittenFileData]: r'''Iterate over files with version string replaced. >>> file_patterns = {"src/pycalver/__init__.py": ['__version__ = "{pycalver}"']} - >>> new_vinfo = version.parse_version_info("v201809.0123") + >>> new_vinfo = v1version.parse_version_info("v201809.0123") >>> rewritten_datas = iter_rewritten(file_patterns, new_vinfo) >>> rfd = list(rewritten_datas)[0] >>> expected = [ @@ -192,10 +191,10 @@ def diff_lines(rfd: RewrittenFileData) -> typ.List[str]: return list(lines) -def diff(new_vinfo: version.VersionInfo, file_patterns: config.PatternsByGlob) -> str: +def diff(new_vinfo: v1version.VersionInfo, file_patterns: config.PatternsByGlob) -> str: r"""Generate diffs of rewritten files. - >>> new_vinfo = version.parse_version_info("v201809.0123") + >>> new_vinfo = v1version.parse_version_info("v201809.0123") >>> file_patterns = {"src/pycalver/__init__.py": ['__version__ = "{pycalver}"']} >>> diff_str = diff(new_vinfo, file_patterns) >>> lines = diff_str.split("\n") @@ -233,7 +232,7 @@ def diff(new_vinfo: version.VersionInfo, file_patterns: config.PatternsByGlob) - return full_diff -def rewrite(file_patterns: config.PatternsByGlob, new_vinfo: version.VersionInfo) -> None: +def rewrite(file_patterns: config.PatternsByGlob, new_vinfo: v1version.VersionInfo) -> None: """Rewrite project files, updating each with the new version.""" fobj: typ.IO[str] diff --git a/src/pycalver/version.py b/src/pycalver/version.py index 25afe53..e6597e0 100644 --- a/src/pycalver/version.py +++ b/src/pycalver/version.py @@ -12,7 +12,7 @@ import datetime as dt import lexid import pkg_resources -from . import patterns +import pycalver.patterns as v1patterns logger = logging.getLogger("pycalver.version") @@ -263,7 +263,7 @@ class PatternError(Exception): def _parse_pattern_groups(pattern_groups: PatternGroups) -> FieldValues: for part_name in pattern_groups.keys(): is_valid_part_name = ( - part_name in patterns.COMPOSITE_PART_PATTERNS or part_name in PATTERN_PART_FIELDS + part_name in v1patterns.COMPOSITE_PART_PATTERNS or part_name in PATTERN_PART_FIELDS ) if not is_valid_part_name: err_msg = f"Invalid part '{part_name}'" @@ -318,7 +318,7 @@ def parse_version_info(version_str: str, pattern: str = "{pycalver}") -> Version >>> vnfo = parse_version_info("1.23.456", pattern="{semver}") >>> assert vnfo == _parse_version_info({'MAJOR': "1", 'MINOR': "23", 'PATCH': "456"}) """ - regex = patterns.compile_pattern(pattern) + regex = v1patterns.compile_pattern(pattern) match = regex.match(version_str) if match is None: err_msg = ( @@ -414,7 +414,7 @@ def format_version(vinfo: VersionInfo, pattern: str) -> str: 'v1.02.034' """ full_pattern = pattern - for part_name, full_part_format in patterns.FULL_PART_FORMATS.items(): + for part_name, full_part_format in v1patterns.FULL_PART_FORMATS.items(): full_pattern = full_pattern.replace("{" + part_name + "}", full_part_format) kwargs: typ.Dict[str, typ.Union[str, int, None]] = vinfo._asdict() diff --git a/src/pycalver2/cli.py b/src/pycalver2/cli.py index 23d4913..107d4b8 100644 --- a/src/pycalver2/cli.py +++ b/src/pycalver2/cli.py @@ -14,7 +14,6 @@ import logging import pycalver2.rewrite as v2rewrite import pycalver2.version as v2version - from pycalver import config logger = logging.getLogger("pycalver2.cli") diff --git a/src/pycalver2/patterns.py b/src/pycalver2/patterns.py index 07bae57..82cc585 100644 --- a/src/pycalver2/patterns.py +++ b/src/pycalver2/patterns.py @@ -176,6 +176,8 @@ FULL_PART_FORMATS = { def _replace_pattern_parts(pattern: str) -> str: + # The pattern is escaped, so that everything besides the format + # string variables is treated literally. for part_name, part_pattern in PART_PATTERNS.items(): named_part_pattern = f"(?P<{part_name}>{part_pattern})" placeholder = "\u005c{" + part_name + "\u005c}" diff --git a/src/pycalver2/rewrite.py b/src/pycalver2/rewrite.py index c5592d7..e2baeb2 100644 --- a/src/pycalver2/rewrite.py +++ b/src/pycalver2/rewrite.py @@ -9,12 +9,11 @@ import io import typing as typ import logging -from pycalver2 import version -from pycalver2 import patterns - from pycalver import parse from pycalver import config from pycalver import rewrite as v1rewrite +from pycalver2 import version +from pycalver2 import patterns logger = logging.getLogger("pycalver2.rewrite") diff --git a/src/pycalver2/version.py b/src/pycalver2/version.py index 4abaacf..ea78d3f 100644 --- a/src/pycalver2/version.py +++ b/src/pycalver2/version.py @@ -12,7 +12,8 @@ import datetime as dt import lexid import pkg_resources -from . import patterns +# import pycalver.patterns as v1patterns +import pycalver2.patterns as v2patterns logger = logging.getLogger("pycalver.version") @@ -300,7 +301,7 @@ class PatternError(Exception): def _parse_pattern_groups(pattern_groups: PatternGroups) -> FieldValues: for part_name in pattern_groups.keys(): is_valid_part_name = ( - part_name in patterns.COMPOSITE_PART_PATTERNS or part_name in PATTERN_PART_FIELDS + part_name in v2patterns.COMPOSITE_PART_PATTERNS or part_name in PATTERN_PART_FIELDS ) if not is_valid_part_name: err_msg = f"Invalid part '{part_name}'" @@ -361,7 +362,7 @@ def parse_version_info(version_str: str, pattern: str = "{pycalver}") -> Version >>> vnfo = parse_version_info("1.23.456", pattern="{semver}") >>> assert vnfo == _parse_version_info({'MAJOR': "1", 'MINOR': "23", 'PATCH': "456"}) """ - regex = patterns.compile_pattern(pattern) + regex = v2patterns.compile_pattern(pattern) match = regex.match(version_str) if match is None: err_msg = ( @@ -447,7 +448,7 @@ def _compile_format_template(pattern: str, kwargs: TemplateKwargs) -> str: # NOTE (mb 2020-09-04): Some parts are optional, we need the kwargs to # determine if part is set to its zero value format_tmpl = pattern - for part_name, full_part_format in patterns.FULL_PART_FORMATS.items(): + for part_name, full_part_format in v2patterns.FULL_PART_FORMATS.items(): format_tmpl = format_tmpl.replace("{" + part_name + "}", full_part_format) return format_tmpl diff --git a/test/test_cli.py b/test/test_cli.py index fcac244..38355a2 100644 --- a/test/test_cli.py +++ b/test/test_cli.py @@ -8,10 +8,10 @@ import subprocess as sp import pytest import pathlib2 as pl -import pycalver2.patterns as patterns from click.testing import CliRunner import pycalver.config as config +import pycalver2.patterns as patterns from pycalver.__main__ import cli SETUP_CFG_FIXTURE = """ diff --git a/test/test_patterns.py b/test/test_patterns.py index 89c44b2..61d8d48 100644 --- a/test/test_patterns.py +++ b/test/test_patterns.py @@ -1,9 +1,9 @@ import re import pytest -import pycalver2.patterns as v2patterns import pycalver.patterns as v1patterns +import pycalver2.patterns as v2patterns # TODO (mb 2020-09-06): test for v2patterns diff --git a/test/test_rewrite.py b/test/test_rewrite.py index 7d2693c..1eb0dd7 100644 --- a/test/test_rewrite.py +++ b/test/test_rewrite.py @@ -3,12 +3,11 @@ import copy from test import util -from pycalver2 import rewrite as v2rewrite -from pycalver2 import version as v2version - from pycalver import config from pycalver import rewrite as v1rewrite from pycalver import version as v1version +from pycalver2 import rewrite as v2rewrite +from pycalver2 import version as v2version REWRITE_FIXTURE = """ # SPDX-License-Identifier: MIT