fix handling of pep440 with epoch, e.g. '1!2.3'

This commit is contained in:
Manuel Barkhau 2023-05-18 15:36:00 +00:00
parent 0f21c5dac9
commit 28dcbf7f8a
3 changed files with 20 additions and 1 deletions

View file

@ -17,6 +17,7 @@ RE_PATTERN_ESCAPES = [
("\u005c", "\u005c\u005c"),
("-" , "\u005c-"),
("." , "\u005c."),
("!" , "\u005c!"),
("+" , "\u005c+"),
("*" , "\u005c*"),
("?" , "\u005c?"),

View file

@ -239,7 +239,7 @@ def _convert_to_pep440(version_pattern: str) -> str:
pep440_pattern = pep440_pattern.replace(r"\[", "")
pep440_pattern = pep440_pattern.replace(r"\]", "")
pep440_pattern, _ = re.subn(r"[^a-zA-Z0-9\.\[\]]", "", pep440_pattern)
pep440_pattern, _ = re.subn(r"[^a-zA-Z0-9\.\!\[\]]", "", pep440_pattern)
part_names = list(PATTERN_PART_FIELDS.keys())
part_names.sort(key=len, reverse=True)

View file

@ -251,6 +251,24 @@ def test_v2_patterns(pattern_str, line, expected):
assert result_val == expected, (pattern_str, line, pattern.regexp.pattern)
def test_epoch_pattern():
raw_pattern = v2patterns.normalize_pattern("v1!MAJOR.MINOR.PATCH", "{version}")
pattern = v2patterns.compile_pattern(raw_pattern)
result = pattern.regexp.search('current_version = "v1!2.1.5"')
result_val = None if result is None else result.group(0)
assert result_val == "v1!2.1.5"
def test_epoch_pep440_pattern():
raw_pep440_pattern = v2patterns.normalize_pattern("v1!MAJOR.MINOR.PATCH", "{pep440_version}")
pep440_pattern = v2patterns.compile_pattern(raw_pep440_pattern)
result = pep440_pattern.regexp.search('version = "1!2.1.5"')
result_val = None if result is None else result.group(0)
assert result_val == "1!2.1.5"
CLI_MAIN_FIXTURE = """
@click.group()
@click.version_option(version="v201812.0123-beta")