在semver range和maven version range之间转换
unified-range的Python项目详细描述
统一范围
该库将输入semver范围转换为统一模型,并提供更易于编程使用的对象。
支持范围的示例
- npm风格的semver-
<1.2.3 >=2.0.0
- 红宝石风格的semver-
<1.2.3, >=2.0.0
- Maven样式的版本范围-
[1.2.3,2.1.1), [3.0.0,4.1.1)
此外,使用此库可以在任何输入版本范围上运行算法,并计算此范围中是否包含特定版本。
先决条件
确保已安装PIP或PIPENV
安装:
pipenv install unified-range
或pip install unified-range
导入
api
模块:from unified_range import api
如何使用
以下是可以使用此库执行的不同功能。
要将范围转换为统一字符串范围,请使用semver格式:
ver_rng = api.from_semver(semver_str)
结果:均匀范围结构
从统一范围结构转换为semver字符串(返回str):
semver = api.to_semver(unified_spec_str)
要将versionrange对象转换为字符串:
version_range_str = str(ver_rng)
从统一字符串转换为统一模型对象(versionrange对象):
ver_rng = api.unified_range(unified_spec_str)
>>> api.unified_range('[1.2.3,4.5.6)')
<unified_range.models.UnifiedVersionRange at 0x7f7e4dc17320>
在范围列表中,检索未包含的版本:
filtered_lst = api.filter_versions(ascending_version_list, ranges)
>>> api.filter_versions(['0.1', '0.2', '1.0', '1.1', '2.0'], ['[,0.2]', '[1.1]'])
['1.0', '2.0']
ascending_version_list
中的版本应按升序排序,
从最旧到最新,包含包的所有版本。
从版本范围列表中,检索列表中最接近当前版本的版本(下一个):
从版本和范围列表中筛选下一版本和最大版本。next_version = api.next_filtered_version(current_version, ascending_version_list, ranges)
当前版本必须包含在升序版本列表中。
>>> api.next_filtered_version(current_version='0.2', ascending_version_list=['0.1', '0.2', '1.0', '1.1', '2.0'], ranges=['[,0.2]', '[1.1]'])
'1.0'
>>> api.next_filtered_version(current_version='1.1', ascending_version_list=['0.1', '0.2', '1.0', '1.1', '2.0'], ranges=['[,0.2]', '[1.1]'])
'2.0'
检索未包含的最新版本:
max_version = api.maximum_filtered_version(ascending_version_list, ranges)
>>> api.maximum_filtered_version(ascending_version_list=['0.1', '0.2', '1.0', '1.1', '2.0'], ranges=['[,0.2]', '[1.1]'])
'2.0'
均匀结构示例
以下是此库中使用的统一结构:
统一字符串结构示例:(,1.2.3)
统一模型示例:
UnifiedVersionRange.constraints -> List[Restrictions]
Restriction.bounds -> Tuple[Bound, Bound]
Bound.version -> str
Bound.inclusive -> boolean
参考文献和以前的工作
这个库是用以下方法构建的:
- Maven的版本范围: ^马文的{a1}和spec。
- https://semver.org/
- npm’s semver library