SemaVer

SemaVer -- это небольшая Python-библиотека, облегчающая работу с semantic versioning notation.

Объекты Version

Чтобы создать объект версии, просто инстанцируйте класс Version, передав идентификатор версии первым аргументом конструктора:

from semaver import Version

v1_0_0 = Version('1.0.0')

Описание формата идентификатора версии можно найти на semver.org. Обратите внимание, что в настоящее время SemaVer не поддерживает спецификации pre-release и build metadata.

Любая неопределённая часть идентификатора версии считается равной нулю, т. е. '1' == '1.0' == '1.0.0'.

Сравнение версий

Объекты версий можно сравнивать используя обычные Python comparison operators:

from semaver import Version

v1_0 = Version('1.0')
v1_0_0 = Version('1.0.0')
v1_0_1 = Version('1.0.1')

assert v1_0 == v1_0_0  # True
assert v1_0 != v1_0_0  # False

assert v1_0 < v1_0_1  # True
assert v1_0 <= v1_0_1  # True
assert v1_0 > v1_0_1  # False
assert v1_0 >= v1_0_1  # False

# Также можно выполнять сравнение со строками

assert v1_0 == '1'  # True
assert v1_0 == '1.0'  # True
assert v1_0 == '1.0.0'  # True

Версии можно складывать и вычитать:

from semaver import Version

print(Version('1.0.0') + Version('0.1.1'))  # '1.1.1'
from semaver import Version

print(Version('2.0.1') - Version('1.0.1'))  # '1.0.0'

Диапазоны версий

Для работы с диапазонами версий используются объекты VersionRange. Первым аргументом конструктора является идентификатор диапазона версий.

from semaver import VersionRange

VersionRange('1.x')

Поддерживаются следующие форматы идентификаторов диапазона версий:

Например, все идентификаторы каждого элемента списка, представленного ниже, являются эквивалентыми:

  • 1.x1.*^1>=1,<2.
  • ^1.1>=1.1,<2.
  • 1.0.x1.0.*~1~1.0.

Принадлежность версии диапазону

from semaver import Version, VersionRange

v1_2_3 = Version('1.2.3')
v1_x = VersionRange('1.x')
v2_x = VersionRange('2.x')

assert v1_2_3 in v1_x  # True
assert v1_2_3 in v2_x  # False

# Или используя строки

assert '1.2.3' in v1_x  # True
assert '1.2.3' in v2_x  # False

Принадлежность диапазона диапазону

from semaver import VersionRange

v1_to_3 = VersionRange('>=1,<=3')
v2_x = VersionRange('2.x')

assert v2_x in v1_to_3  # True
assert v1_to_3 in v2_x  # False

# Или используя строки

assert '2.x' in v1_to_3  # True
assert '>=1,<=3' in v2_x  # False