def guess_range(versions, digits=2):
"""
????????????????
?? group_digits ?????????
Examples?
(digits=1) "1.1|1.2|1.3|1.4" --> ">=1.1,<=1.4"
(digits=1) "1.1|1.2|1.3|1.4|2.1|2.2|2.3" --> ">=1.1,<=1.4|>=2.1,<=2.3"
'1.1.1|1.1.2|1.1.3|1.2|1.2.4|2.0|2.0.2|3.0'
--> '>=1.1.1,<=1.1.3|>=1.2,<=1.2.4|>=2.0,<=2.0.2|3.0'
Args:
versions (list[str]|str): ?????????
digits (int): ?????????
Returns:
VersionRange
"""
if isinstance(versions, six.string_types):
versions = [Version(x) for x in versions.split('|')]
else:
versions = [Version(x) for x in versions]
versions.sort()
if not versions:
raise ValueError('must given at least one version')
sections = []
group_buff = [versions[0]]
for version in versions[1:]:
if version.version[:digits] == group_buff[0].version[:digits]:
group_buff.append(version)
else:
sections.append(_internal_guess_range(group_buff))
group_buff = [version]
# ????
sections.append(_internal_guess_range(group_buff))
version_ranges = []
for low, high in sections:
if low == high:
cg = low.vstring
else:
cg = ">={},<={}".format(low, high)
version_ranges.append(cg)
vr = VersionRange(version_ranges)
return vr
# -----------------------------------------------------
# ------------------- BEGIN TESTS -------------------
# -----------------------------------------------------
评论列表
文章目录