fix #190 - Enable multiple patterns on one line

This commit is contained in:
Manuel Barkhau 2022-10-14 07:42:07 +00:00 committed by mbarkhau
parent b2c5652332
commit 7d56d7b582
2 changed files with 14 additions and 4 deletions

View file

@ -296,11 +296,21 @@ def _replace_pattern_parts(pattern: str) -> str:
PostitionedPart = typ.Tuple[int, int, str] PostitionedPart = typ.Tuple[int, int, str]
part_patterns_by_index: typ.Dict[SortKey, PostitionedPart] = {} part_patterns_by_index: typ.Dict[SortKey, PostitionedPart] = {}
used_fields = set()
for part_name, part_pattern in PART_PATTERNS.items(): for part_name, part_pattern in PART_PATTERNS.items():
start_idx = pattern.find(part_name) end_idx = 0
if start_idx >= 0: while True:
start_idx = pattern.find(part_name, end_idx)
if start_idx < 0:
break
field = PATTERN_PART_FIELDS[part_name] field = PATTERN_PART_FIELDS[part_name]
if field in used_fields:
named_part_pattern = f"(?P<{field}_{len(used_fields)}>{part_pattern})"
else:
named_part_pattern = f"(?P<{field}>{part_pattern})" named_part_pattern = f"(?P<{field}>{part_pattern})"
used_fields.add(field)
end_idx = start_idx + len(part_name) end_idx = start_idx + len(part_name)
sort_key = (-end_idx, -len(part_name)) sort_key = (-end_idx, -len(part_name))
part_patterns_by_index[sort_key] = (start_idx, end_idx, named_part_pattern) part_patterns_by_index[sort_key] = (start_idx, end_idx, named_part_pattern)

View file

@ -215,7 +215,7 @@ def parse_field_values_to_vinfo(field_values: FieldValues) -> version.V2VersionI
""" """
# pylint:disable=dangerous-default-value; We don't mutate args, mypy would fail if we did. # pylint:disable=dangerous-default-value; We don't mutate args, mypy would fail if we did.
for key in field_values: for key in field_values:
assert key in VALID_FIELD_KEYS, key assert any(key.startswith(fkey) for fkey in VALID_FIELD_KEYS), key
cinfo = parse_field_values_to_cinfo(field_values) cinfo = parse_field_values_to_cinfo(field_values)