Skip to content

Commit 2a449c3

Browse files
committed
add from_versions in VersionRange
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent bc8e33f commit 2a449c3

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

src/univers/version_range.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,22 @@ def from_string(cls, vers, simplify=False, validate=False):
147147

148148
return range_class(parsed_constraints)
149149

150+
@classmethod
151+
def from_versions(cls, sequence):
152+
"""
153+
Return a VersionRange built from a list of version strings,
154+
such as ["3.0.0", "1.0.1b", "3.0.2", "0.9.7a", "1.1.1ka"]
155+
"""
156+
if not cls.scheme or not cls.version_class:
157+
return NotImplementedError
158+
159+
constraints = []
160+
for version in sequence:
161+
version_obj = cls.version_class(version)
162+
constraint = VersionConstraint(comparator="=", version=version_obj)
163+
constraints.append(constraint)
164+
return cls(constraints=constraints)
165+
150166
def __str__(self):
151167
constraints = "|".join(str(c) for c in sorted(self.constraints))
152168
return f"vers:{self.scheme}/{constraints}"

tests/test_version_range.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,20 @@ def test_OpensslVersionRange_from_native_mixed(self):
264264
version_range = OpensslVersionRange.from_native(openssl_range)
265265
assert version_range == expected
266266

267+
def test_OpensslVersionRange_from_versions(self):
268+
sequence = ["3.0.0", "1.0.1b", "3.0.2", "0.9.7a ", "1.1.1ka"]
269+
expected = OpensslVersionRange(
270+
constraints=(
271+
VersionConstraint(comparator="=", version=OpensslVersion(string="0.9.7a")),
272+
VersionConstraint(comparator="=", version=OpensslVersion(string="1.0.1b")),
273+
VersionConstraint(comparator="=", version=OpensslVersion(string="1.1.1ka")),
274+
VersionConstraint(comparator="=", version=OpensslVersion(string="3.0.0")),
275+
VersionConstraint(comparator="=", version=OpensslVersion(string="3.0.2")),
276+
)
277+
)
278+
version_range = OpensslVersionRange.from_versions(sequence)
279+
assert version_range == expected
280+
267281

268282
VERSION_RANGE_TESTS_BY_SCHEME = {
269283
"nginx": ["0.8.40+", "0.7.52-0.8.39", "0.9.10", "1.5.0+, 1.4.1+"],

0 commit comments

Comments
 (0)