From 23a910dbc28ad3f91b4ca2ba59d529ab6eba59cf Mon Sep 17 00:00:00 2001 From: Tom Prince Date: Tue, 12 Oct 2021 15:40:05 -0600 Subject: [PATCH] Require a separator when multiple specifiers are in a requirement. --- mach_nix/requirements.py | 4 ++-- mach_nix/tests/test_requirements.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mach_nix/requirements.py b/mach_nix/requirements.py index 36aa50e..ca1aabc 100644 --- a/mach_nix/requirements.py +++ b/mach_nix/requirements.py @@ -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([a-z]|[A-Z]|-|_|\d|\.)+)" rf"(?P\[({extra_name},?)+\])?" @@ -110,7 +110,7 @@ re_reqs = re.compile( # multiple specs r" *\(?(?P" r"\*" - r"|([,\|]? *(==|!=|>=|<=|>|<|~=|=)? *(\* |dev|-?\w?\d(\w|\.|\*|-|\||!|\+)*))+(?![_\d]))\)?" + rf"|{re_spec_part}([,\|]{re_spec_part})*(?![_\d]))\)?" r"(?P *([a-z]|\d|_|\*|\.)+)?" r"|" # single spec only diff --git a/mach_nix/tests/test_requirements.py b/mach_nix/tests/test_requirements.py index ba784b9..2a8fc4d 100644 --- a/mach_nix/tests/test_requirements.py +++ b/mach_nix/tests/test_requirements.py @@ -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