From 2a449c34d7a56458dd0353d6a3dd1fe8c8b3b3f6 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Sun, 27 Mar 2022 12:11:09 +0530 Subject: [PATCH 1/2] add `from_versions` in VersionRange Signed-off-by: Keshav Priyadarshi --- src/univers/version_range.py | 16 ++++++++++++++++ tests/test_version_range.py | 14 ++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/univers/version_range.py b/src/univers/version_range.py index 143eafca..d016028c 100644 --- a/src/univers/version_range.py +++ b/src/univers/version_range.py @@ -147,6 +147,22 @@ def from_string(cls, vers, simplify=False, validate=False): return range_class(parsed_constraints) + @classmethod + def from_versions(cls, sequence): + """ + Return a VersionRange built from a list of version strings, + such as ["3.0.0", "1.0.1b", "3.0.2", "0.9.7a", "1.1.1ka"] + """ + if not cls.scheme or not cls.version_class: + return NotImplementedError + + constraints = [] + for version in sequence: + version_obj = cls.version_class(version) + constraint = VersionConstraint(comparator="=", version=version_obj) + constraints.append(constraint) + return cls(constraints=constraints) + def __str__(self): constraints = "|".join(str(c) for c in sorted(self.constraints)) return f"vers:{self.scheme}/{constraints}" diff --git a/tests/test_version_range.py b/tests/test_version_range.py index 52b97427..537c9628 100644 --- a/tests/test_version_range.py +++ b/tests/test_version_range.py @@ -264,6 +264,20 @@ def test_OpensslVersionRange_from_native_mixed(self): version_range = OpensslVersionRange.from_native(openssl_range) assert version_range == expected + def test_OpensslVersionRange_from_versions(self): + sequence = ["3.0.0", "1.0.1b", "3.0.2", "0.9.7a ", "1.1.1ka"] + expected = OpensslVersionRange( + constraints=( + VersionConstraint(comparator="=", version=OpensslVersion(string="0.9.7a")), + VersionConstraint(comparator="=", version=OpensslVersion(string="1.0.1b")), + VersionConstraint(comparator="=", version=OpensslVersion(string="1.1.1ka")), + VersionConstraint(comparator="=", version=OpensslVersion(string="3.0.0")), + VersionConstraint(comparator="=", version=OpensslVersion(string="3.0.2")), + ) + ) + version_range = OpensslVersionRange.from_versions(sequence) + assert version_range == expected + VERSION_RANGE_TESTS_BY_SCHEME = { "nginx": ["0.8.40+", "0.7.52-0.8.39", "0.9.10", "1.5.0+, 1.4.1+"], From 03421e3b6deeb26b7a7c543a571b7127f407353c Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Tue, 29 Mar 2022 14:59:09 +0530 Subject: [PATCH 2/2] fix black test in python@3.7 see: https://github.com/psf/black/issues/2964 Signed-off-by: Keshav Priyadarshi --- requirements-dev.txt | 2 +- src/univers/rpm.py | 6 +- tests/test_debian_version.py | 6 +- tests/test_maven_version.py | 232 +++++++++++++++++------------------ 4 files changed, 123 insertions(+), 123 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 75a17ba8..2f4c61da 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,6 +9,6 @@ pytest-xdist==2.4.0 toml==0.10.2 typing-extensions==3.10.0.2 zipp==3.6.0 -black==21.9b0 +black==22.3.0 typed-ast==1.4.3 pathspec==0.9.0 \ No newline at end of file diff --git a/src/univers/rpm.py b/src/univers/rpm.py index 88b1b558..1c35dc52 100644 --- a/src/univers/rpm.py +++ b/src/univers/rpm.py @@ -131,9 +131,9 @@ def compare_rpm_versions(a: Union[RpmVersion, str], b: Union[RpmVersion, str]) - class Vercmp: - R_NONALNUMTILDE_CARET = re.compile(br"^([^a-zA-Z0-9~\^]*)(.*)$") - R_NUM = re.compile(br"^([\d]+)(.*)$") - R_ALPHA = re.compile(br"^([a-zA-Z]+)(.*)$") + R_NONALNUMTILDE_CARET = re.compile(rb"^([^a-zA-Z0-9~\^]*)(.*)$") + R_NUM = re.compile(rb"^([\d]+)(.*)$") + R_ALPHA = re.compile(rb"^([a-zA-Z]+)(.*)$") @classmethod def compare(cls, first, second): diff --git a/tests/test_debian_version.py b/tests/test_debian_version.py index 42b26966..da7f8c16 100644 --- a/tests/test_debian_version.py +++ b/tests/test_debian_version.py @@ -167,9 +167,9 @@ def test_compare_versions(self): assert compare_versions("2.7.4+reloaded2-13+deb9u1", "2.7.4+reloaded2-13") == 1 # unicode - assert compare_versions(u"2:0.0.44-1", u"2:0.0.44-nobin") == -1 - assert compare_versions(u"2:0.0.44-nobin", u"2:0.0.44-1") == 1 - assert compare_versions(u"2:0.0.44-1", u"2:0.0.44-1") == 0 + assert compare_versions("2:0.0.44-1", "2:0.0.44-nobin") == -1 + assert compare_versions("2:0.0.44-nobin", "2:0.0.44-1") == 1 + assert compare_versions("2:0.0.44-1", "2:0.0.44-1") == 0 @pytest.mark.xfail(reason="Not yet supported") def test_can_parse_complex_version_is_not_invalid(self): diff --git a/tests/test_maven_version.py b/tests/test_maven_version.py index 0aa121b8..4b4d71a4 100644 --- a/tests/test_maven_version.py +++ b/tests/test_maven_version.py @@ -305,31 +305,31 @@ def test_version_numbers(self): unicode_version_numbers = ( # again, but with unicode input - u"2.0", - u"2-1", - u"2.0.a", - u"2.0.0.a", - u"2.0.2", - u"2.0.123", - u"2.1.0", - u"2.1-a", - u"2.1b", - u"2.1-x", - u"2.1-1", - u"2.1.0.1", - u"2.2", - u"2.123", - u"11.a2", - u"11.a11", - u"11.b2", - u"11.b11", - u"11.m2", - u"11.m11", - u"11", - u"11.a", - u"11b", - u"11c", - u"11m", + "2.0", + "2-1", + "2.0.a", + "2.0.0.a", + "2.0.2", + "2.0.123", + "2.1.0", + "2.1-a", + "2.1b", + "2.1-x", + "2.1-1", + "2.1.0.1", + "2.2", + "2.123", + "11.a2", + "11.a11", + "11.b2", + "11.b11", + "11.m2", + "11.m11", + "11", + "11.a", + "11b", + "11c", + "11m", ) for idx, low in enumerate(unicode_version_numbers[:-1]): for high in unicode_version_numbers[idx + 1 :]: @@ -382,29 +382,29 @@ def test_version_equality(self): self._assert_version_equal("1m3", "1MILESTONE3") # unicode - self._assert_version_equal(u"1", "1") - self._assert_version_equal(u"1", "1.0") - self._assert_version_equal(u"1", "1.0.0") - self._assert_version_equal(u"1.0", "1.0.0") - self._assert_version_equal(u"1", "1-0") - self._assert_version_equal(u"1", "1.0-0") - self._assert_version_equal(u"1.0", "1.0-0") - - self._assert_version_equal("1", u"1") - self._assert_version_equal("1", u"1.0") - self._assert_version_equal("1", u"1.0.0") - self._assert_version_equal("1.0", u"1.0.0") - self._assert_version_equal("1", u"1-0") - self._assert_version_equal("1", u"1.0-0") - self._assert_version_equal("1.0", u"1.0-0") - - self._assert_version_equal(u"1", u"1") - self._assert_version_equal(u"1", u"1.0") - self._assert_version_equal(u"1", u"1.0.0") - self._assert_version_equal(u"1.0", u"1.0.0") - self._assert_version_equal(u"1", u"1-0") - self._assert_version_equal(u"1", u"1.0-0") - self._assert_version_equal(u"1.0", u"1.0-0") + self._assert_version_equal("1", "1") + self._assert_version_equal("1", "1.0") + self._assert_version_equal("1", "1.0.0") + self._assert_version_equal("1.0", "1.0.0") + self._assert_version_equal("1", "1-0") + self._assert_version_equal("1", "1.0-0") + self._assert_version_equal("1.0", "1.0-0") + + self._assert_version_equal("1", "1") + self._assert_version_equal("1", "1.0") + self._assert_version_equal("1", "1.0.0") + self._assert_version_equal("1.0", "1.0.0") + self._assert_version_equal("1", "1-0") + self._assert_version_equal("1", "1.0-0") + self._assert_version_equal("1.0", "1.0-0") + + self._assert_version_equal("1", "1") + self._assert_version_equal("1", "1.0") + self._assert_version_equal("1", "1.0.0") + self._assert_version_equal("1.0", "1.0.0") + self._assert_version_equal("1", "1-0") + self._assert_version_equal("1", "1.0-0") + self._assert_version_equal("1.0", "1.0-0") def test_version_compare(self): self._assert_version_order("1", "2") @@ -430,74 +430,74 @@ def test_version_compare(self): self._assert_version_order("2.0.1", "2.0.1-123") self._assert_version_order("2.0.1-xyz", "2.0.1-123") # unicode input - self._assert_version_order(u"1", "2") - self._assert_version_order(u"1.5", "2") - self._assert_version_order(u"1", "2.5") - self._assert_version_order(u"1.0", "1.1") - self._assert_version_order(u"1.1", "1.2") - self._assert_version_order(u"1.0.0", "1.1") - self._assert_version_order(u"1.0.1", "1.1") - self._assert_version_order(u"1.1", "1.2.0") - self._assert_version_order(u"1.0-alpha-1", "1.0") - self._assert_version_order(u"1.0-alpha-1", "1.0-alpha-2") - self._assert_version_order(u"1.0-alpha-1", "1.0-beta-1") - self._assert_version_order(u"1.0-beta-1", "1.0-SNAPSHOT") - self._assert_version_order(u"1.0-SNAPSHOT", "1.0") - self._assert_version_order(u"1.0-alpha-1-SNAPSHOT", "1.0-alpha-1") - self._assert_version_order(u"1.0", "1.0-1") - self._assert_version_order(u"1.0-1", "1.0-2") - self._assert_version_order(u"1.0.0", "1.0-1") - self._assert_version_order(u"2.0-1", "2.0.1") - self._assert_version_order(u"2.0.1-klm", "2.0.1-lmn") - self._assert_version_order(u"2.0.1", "2.0.1-xyz") - self._assert_version_order(u"2.0.1", "2.0.1-123") - self._assert_version_order(u"2.0.1-xyz", "2.0.1-123") - - self._assert_version_order("1", u"2") - self._assert_version_order("1.5", u"2") - self._assert_version_order("1", u"2.5") - self._assert_version_order("1.0", u"1.1") - self._assert_version_order("1.1", u"1.2") - self._assert_version_order("1.0.0", u"1.1") - self._assert_version_order("1.0.1", u"1.1") - self._assert_version_order("1.1", u"1.2.0") - self._assert_version_order("1.0-alpha-1", u"1.0") - self._assert_version_order("1.0-alpha-1", u"1.0-alpha-2") - self._assert_version_order("1.0-alpha-1", u"1.0-beta-1") - self._assert_version_order("1.0-beta-1", u"1.0-SNAPSHOT") - self._assert_version_order("1.0-SNAPSHOT", u"1.0") - self._assert_version_order("1.0-alpha-1-SNAPSHOT", u"1.0-alpha-1") - self._assert_version_order("1.0", u"1.0-1") - self._assert_version_order("1.0-1", u"1.0-2") - self._assert_version_order("1.0.0", u"1.0-1") - self._assert_version_order("2.0-1", u"2.0.1") - self._assert_version_order("2.0.1-klm", u"2.0.1-lmn") - self._assert_version_order("2.0.1", u"2.0.1-xyz") - self._assert_version_order("2.0.1", u"2.0.1-123") - self._assert_version_order("2.0.1-xyz", u"2.0.1-123") - - self._assert_version_order(u"1", u"2") - self._assert_version_order(u"1.5", u"2") - self._assert_version_order(u"1", u"2.5") - self._assert_version_order(u"1.0", u"1.1") - self._assert_version_order(u"1.1", u"1.2") - self._assert_version_order(u"1.0.0", u"1.1") - self._assert_version_order(u"1.0.1", u"1.1") - self._assert_version_order(u"1.1", u"1.2.0") - self._assert_version_order(u"1.0-alpha-1", u"1.0") - self._assert_version_order(u"1.0-alpha-1", u"1.0-alpha-2") - self._assert_version_order(u"1.0-alpha-1", u"1.0-beta-1") - self._assert_version_order(u"1.0-beta-1", u"1.0-SNAPSHOT") - self._assert_version_order(u"1.0-SNAPSHOT", u"1.0") - self._assert_version_order(u"1.0-alpha-1-SNAPSHOT", u"1.0-alpha-1") - self._assert_version_order(u"1.0", u"1.0-1") - self._assert_version_order(u"1.0-1", u"1.0-2") - self._assert_version_order(u"1.0.0", u"1.0-1") - self._assert_version_order(u"2.0-1", u"2.0.1") - self._assert_version_order(u"2.0.1-klm", u"2.0.1-lmn") - self._assert_version_order(u"2.0.1", u"2.0.1-xyz") - self._assert_version_order(u"2.0.1", u"2.0.1-123") - self._assert_version_order(u"2.0.1-xyz", u"2.0.1-123") + self._assert_version_order("1", "2") + self._assert_version_order("1.5", "2") + self._assert_version_order("1", "2.5") + self._assert_version_order("1.0", "1.1") + self._assert_version_order("1.1", "1.2") + self._assert_version_order("1.0.0", "1.1") + self._assert_version_order("1.0.1", "1.1") + self._assert_version_order("1.1", "1.2.0") + self._assert_version_order("1.0-alpha-1", "1.0") + self._assert_version_order("1.0-alpha-1", "1.0-alpha-2") + self._assert_version_order("1.0-alpha-1", "1.0-beta-1") + self._assert_version_order("1.0-beta-1", "1.0-SNAPSHOT") + self._assert_version_order("1.0-SNAPSHOT", "1.0") + self._assert_version_order("1.0-alpha-1-SNAPSHOT", "1.0-alpha-1") + self._assert_version_order("1.0", "1.0-1") + self._assert_version_order("1.0-1", "1.0-2") + self._assert_version_order("1.0.0", "1.0-1") + self._assert_version_order("2.0-1", "2.0.1") + self._assert_version_order("2.0.1-klm", "2.0.1-lmn") + self._assert_version_order("2.0.1", "2.0.1-xyz") + self._assert_version_order("2.0.1", "2.0.1-123") + self._assert_version_order("2.0.1-xyz", "2.0.1-123") + + self._assert_version_order("1", "2") + self._assert_version_order("1.5", "2") + self._assert_version_order("1", "2.5") + self._assert_version_order("1.0", "1.1") + self._assert_version_order("1.1", "1.2") + self._assert_version_order("1.0.0", "1.1") + self._assert_version_order("1.0.1", "1.1") + self._assert_version_order("1.1", "1.2.0") + self._assert_version_order("1.0-alpha-1", "1.0") + self._assert_version_order("1.0-alpha-1", "1.0-alpha-2") + self._assert_version_order("1.0-alpha-1", "1.0-beta-1") + self._assert_version_order("1.0-beta-1", "1.0-SNAPSHOT") + self._assert_version_order("1.0-SNAPSHOT", "1.0") + self._assert_version_order("1.0-alpha-1-SNAPSHOT", "1.0-alpha-1") + self._assert_version_order("1.0", "1.0-1") + self._assert_version_order("1.0-1", "1.0-2") + self._assert_version_order("1.0.0", "1.0-1") + self._assert_version_order("2.0-1", "2.0.1") + self._assert_version_order("2.0.1-klm", "2.0.1-lmn") + self._assert_version_order("2.0.1", "2.0.1-xyz") + self._assert_version_order("2.0.1", "2.0.1-123") + self._assert_version_order("2.0.1-xyz", "2.0.1-123") + + self._assert_version_order("1", "2") + self._assert_version_order("1.5", "2") + self._assert_version_order("1", "2.5") + self._assert_version_order("1.0", "1.1") + self._assert_version_order("1.1", "1.2") + self._assert_version_order("1.0.0", "1.1") + self._assert_version_order("1.0.1", "1.1") + self._assert_version_order("1.1", "1.2.0") + self._assert_version_order("1.0-alpha-1", "1.0") + self._assert_version_order("1.0-alpha-1", "1.0-alpha-2") + self._assert_version_order("1.0-alpha-1", "1.0-beta-1") + self._assert_version_order("1.0-beta-1", "1.0-SNAPSHOT") + self._assert_version_order("1.0-SNAPSHOT", "1.0") + self._assert_version_order("1.0-alpha-1-SNAPSHOT", "1.0-alpha-1") + self._assert_version_order("1.0", "1.0-1") + self._assert_version_order("1.0-1", "1.0-2") + self._assert_version_order("1.0.0", "1.0-1") + self._assert_version_order("2.0-1", "2.0.1") + self._assert_version_order("2.0.1-klm", "2.0.1-lmn") + self._assert_version_order("2.0.1", "2.0.1-xyz") + self._assert_version_order("2.0.1", "2.0.1-123") + self._assert_version_order("2.0.1-xyz", "2.0.1-123") def test_compare(self): assert 1 < Version("1.0")