setup to reduce code duplication

This commit is contained in:
Manuel Barkhau 2020-09-08 20:59:52 +00:00
parent e053af589e
commit 3cbf0e82b1
10 changed files with 271 additions and 267 deletions

View file

@ -9,43 +9,40 @@ import io
import typing as typ
import logging
import pycalver2.version as v2version
import pycalver2.patterns as v2patterns
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")
def rewrite_lines(
pattern_strs: typ.List[str],
new_vinfo : version.VersionInfo,
new_vinfo : v2version.VersionInfo,
old_lines : typ.List[str],
) -> typ.List[str]:
"""TODO reenable doctest"""
pass
# TODO reenable doctest
# """Replace occurances of pattern_strs in old_lines with new_vinfo.
"""Replace occurances of pattern_strs in old_lines with new_vinfo.
# >>> new_vinfo = version.parse_version_info("v201811.0123-beta")
# >>> pattern_strs = ['__version__ = "{pycalver}"']
# >>> rewrite_lines(pattern_strs, new_vinfo, ['__version__ = "v201809.0002-beta"'])
# ['__version__ = "v201811.0123-beta"']
>>> new_vinfo = version.parse_version_info("v201811.0123-beta")
>>> pattern_strs = ['__version__ = "{pycalver}"']
>>> rewrite_lines(pattern_strs, new_vinfo, ['__version__ = "v201809.0002-beta"'])
['__version__ = "v201811.0123-beta"']
>>> pattern_strs = ['__version__ = "{pep440_version}"']
>>> rewrite_lines(pattern_strs, new_vinfo, ['__version__ = "201809.2b0"'])
['__version__ = "201811.123b0"']
"""
# >>> pattern_strs = ['__version__ = "{pep440_version}"']
# >>> rewrite_lines(pattern_strs, new_vinfo, ['__version__ = "201809.2b0"'])
# ['__version__ = "201811.123b0"']
# """
new_lines = old_lines[:]
found_patterns = set()
# re_patterns = [patterns.compile_pattern(p) for p in pattern_strs]
# matches = parse.iter_matches(old_lines, re_patterns)
matches = parse.iter_matches(old_lines, pattern_strs)
patterns = [v2patterns.compile_pattern(p) for p in pattern_strs]
matches = parse.iter_matches(old_lines, patterns)
for match in matches:
found_patterns.add(match.pattern)
replacement = version.format_version(new_vinfo, match.pattern)
found_patterns.add(match.pattern.raw)
replacement = v2version.format_version(new_vinfo, match.pattern.raw)
span_l, span_r = match.span
new_line = match.line[:span_l] + replacement + match.line[span_r:]
new_lines[match.lineno] = new_line
@ -54,7 +51,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 = v2patterns.compile_pattern_str(non_matched_pattern)
logger.error(f"Pattern compiles to regex '{compiled_pattern_str}'")
raise v1rewrite.NoPatternMatch("Invalid pattern(s)")
else:
@ -63,28 +60,26 @@ def rewrite_lines(
def rfd_from_content(
pattern_strs: typ.List[str],
new_vinfo : version.VersionInfo,
new_vinfo : v2version.VersionInfo,
content : str,
) -> v1rewrite.RewrittenFileData:
"""TODO reenable doctest"""
pass
# TODO reenable doctest
# r"""Rewrite pattern occurrences with version string.
r"""Rewrite pattern occurrences with version string.
>>> new_vinfo = version.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}")
>>> pattern_strs = ['__version__ = "v{semver}"']
>>> content = '__version__ = "v1.2.2"'
>>> rfd = rfd_from_content(pattern_strs, new_vinfo, content)
>>> rfd.new_lines
['__version__ = "v1.2.3"']
"""
# >>> new_vinfo = version.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}")
# >>> pattern_strs = ['__version__ = "v{semver}"']
# >>> content = '__version__ = "v1.2.2"'
# >>> rfd = rfd_from_content(pattern_strs, new_vinfo, content)
# >>> rfd.new_lines
# ['__version__ = "v1.2.3"']
# """
line_sep = v1rewrite.detect_line_sep(content)
old_lines = content.split(line_sep)
new_lines = rewrite_lines(pattern_strs, new_vinfo, old_lines)
@ -93,30 +88,28 @@ def rfd_from_content(
def iter_rewritten(
file_patterns: config.PatternsByGlob,
new_vinfo : version.VersionInfo,
new_vinfo : v2version.VersionInfo,
) -> typ.Iterable[v1rewrite.RewrittenFileData]:
"""TODO reenable doctest"""
pass
# TODO reenable doctest
# r'''Iterate over files with version string replaced.
r'''Iterate over files with version string replaced.
>>> file_patterns = {"src/pycalver/__init__.py": ['__version__ = "{pycalver}"']}
>>> new_vinfo = version.parse_version_info("v201809.0123")
>>> rewritten_datas = iter_rewritten(file_patterns, new_vinfo)
>>> rfd = list(rewritten_datas)[0]
>>> assert rfd.new_lines == [
... '# This file is part of the pycalver project',
... '# https://gitlab.com/mbarkhau/pycalver',
... '#',
... '# Copyright (c) 2019 Manuel Barkhau (mbarkhau@gmail.com) - MIT License',
... '# SPDX-License-Identifier: MIT',
... '"""PyCalVer: CalVer for Python Packages."""',
... '',
... '__version__ = "v201809.0123"',
... '',
... ]
>>>
'''
# >>> file_patterns = {"src/pycalver/__init__.py": ['__version__ = "{pycalver}"']}
# >>> new_vinfo = version.parse_version_info("v201809.0123")
# >>> rewritten_datas = iter_rewritten(file_patterns, new_vinfo)
# >>> rfd = list(rewritten_datas)[0]
# >>> assert rfd.new_lines == [
# ... '# This file is part of the pycalver project',
# ... '# https://gitlab.com/mbarkhau/pycalver',
# ... '#',
# ... '# Copyright (c) 2019 Manuel Barkhau (mbarkhau@gmail.com) - MIT License',
# ... '# SPDX-License-Identifier: MIT',
# ... '"""PyCalVer: CalVer for Python Packages."""',
# ... '',
# ... '__version__ = "v201809.0123"',
# ... '',
# ... ]
# >>>
# '''
fobj: typ.IO[str]
@ -128,23 +121,24 @@ def iter_rewritten(
yield rfd._replace(path=str(file_path))
def diff(new_vinfo: version.VersionInfo, file_patterns: config.PatternsByGlob) -> str:
"""TODO reenable doctest"""
pass
def diff(
new_vinfo : v2version.VersionInfo,
file_patterns: config.PatternsByGlob,
) -> str:
# TODO reenable doctest
# r"""Generate diffs of rewritten files.
r"""Generate diffs of rewritten files.
>>> new_vinfo = version.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")
>>> lines[:2]
['--- src/pycalver/__init__.py', '+++ src/pycalver/__init__.py']
>>> assert lines[6].startswith('-__version__ = "v2')
>>> assert not lines[6].startswith('-__version__ = "v201809.0123"')
>>> lines[7]
'+__version__ = "v201809.0123"'
"""
# >>> new_vinfo = version.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")
# >>> lines[:2]
# ['--- src/pycalver/__init__.py', '+++ src/pycalver/__init__.py']
# >>> assert lines[6].startswith('-__version__ = "v2')
# >>> assert not lines[6].startswith('-__version__ = "v201809.0123"')
# >>> lines[7]
# '+__version__ = "v201809.0123"'
# """
full_diff = ""
fobj: typ.IO[str]
@ -172,7 +166,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: v2version.VersionInfo) -> None:
"""Rewrite project files, updating each with the new version."""
fobj: typ.IO[str]