Require a separator when multiple specifiers are in a requirement.

This commit is contained in:
Tom Prince 2021-10-12 15:40:05 -06:00
parent cf421d4716
commit 23a910dbc2
2 changed files with 3 additions and 2 deletions

View file

@ -97,7 +97,7 @@ def extras_from_marker(marker):
return tuple(group[0] for group in matches)
return tuple()
re_spec_part = r"( *(==|!=|>=|<=|>|<|~=|=)? *(\* |dev|-?\w?\d(\w|\.|\*|-|\||!|\+)*))"
re_reqs = re.compile(
r"^(?P<name>([a-z]|[A-Z]|-|_|\d|\.)+)"
rf"(?P<extras>\[({extra_name},?)+\])?"
@ -110,7 +110,7 @@ re_reqs = re.compile(
# multiple specs
r" *\(?(?P<specs_0>"
r"\*"
r"|([,\|]? *(==|!=|>=|<=|>|<|~=|=)? *(\* |dev|-?\w?\d(\w|\.|\*|-|\||!|\+)*))+(?![_\d]))\)?"
rf"|{re_spec_part}([,\|]{re_spec_part})*(?![_\d]))\)?"
r"(?P<build_0> *([a-z]|\d|_|\*|\.)+)?"
r"|"
# single spec only

View file

@ -54,6 +54,7 @@ from mach_nix.requirements import parse_reqs_line
('zest.releaser', ('recommended', 'maintainer'), None, None, "extra == 'maintainer'"))
, ('pytz (>dev)', ('pytz', (), ((('>', 'dev'),),), None, None))
, ('libcurl 7.71.1 h20c2e04_1', ('libcurl', (), ((('==', '7.71.1'),),), 'h20c2e04_1', None))
, ('ixmp ==0.1.3 1', ('ixmp', (), ((('==', '0.1.3'),),), '1', None))
])
def test_parse_requirements(input, exp_output):
assert parse_reqs_line(input) == exp_output