ocebuild.versioning.semver#

Methods for sorting and handling versioning.

Module Contents#

Functions#

get_version_str(→ Union[str, None])

Gets the version string from a version specifier.

get_version(→ Union[packaging.version.Version, None])

Gets the version class from a version specifier.

compare_version(→ bool)

Compares a version to the version specifier.

resolve_version_specifier(→ Union[str, None])

Resolves a version specifier.

get_minimum_version(→ Tuple[str, Union[str, None]])

Gets the minimum required version of a library.

sort_dependencies(→ Generator[Tuple[str, str], any, None])

Sorts a dependency tree by topology and version.

Attributes#

SEMVER_SYMBOLS

Semantic versioning range symbols.

COMPARISON_SYMBOLS

Version comparison symbols.

ocebuild.versioning.semver.SEMVER_SYMBOLS = ('~', '^')[source]#

Semantic versioning range symbols.

ocebuild.versioning.semver.COMPARISON_SYMBOLS = ('>', '<', '>=', '<=', '==', '!=')[source]#

Version comparison symbols.

ocebuild.versioning.semver.get_version_str(string: str) str | None[source]#

Gets the version string from a version specifier.

Parameters:

string – The version specifier.

Returns:

The version string.

Example

>>> get_version_string('^1.0.0')
# -> '1.0.0'
>>> get_version_string('1.0.0')
# ->'1.0.0'
>>> get_version_string('latest')
# -> None
ocebuild.versioning.semver.get_version(string: str) packaging.version.Version | None[source]#

Gets the version class from a version specifier.

Parameters:

string – The version class.

Returns:

The version string.

Example

>>> get_version('^1.0.0')
# -> <Version('1.0.0')>
>>> get_version('1.0.0')
# -> <Version('1.0.0')>
>>> get_version('latest')
# -> None
ocebuild.versioning.semver.compare_version(v1: str | packaging.version.Version, v2: str | packaging.version.Version, operator: str) bool[source]#

Compares a version to the version specifier.

Parameters:
  • v1 – The version.

  • v2 – The version specifier.

  • operator – The operator.

Returns:

True if the version satisfies the specifier.

ocebuild.versioning.semver.resolve_version_specifier(versions: List[str], specifier: str) str | None[source]#

Resolves a version specifier.

Parameters:
  • versions – The versions.

  • specifier – The version specifier.

Returns:

The resolved version (if available).

Examples

>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '~1.2.3')
# -> '1.2.4'
>>> resolve_version_specifier(['1.2.3', '1.3.0', '2.0.0'], '^1.2.3')
# -> '1.3.0'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '1.2.3')
# -> '1.2.3'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '>1.2.3')
# -> '1.3.0'
>>> resolve_version_specifier(['1.2.2', '1.2.3', '1.3.0'], '<1.2.3')
# -> '1.2.2'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '>=1.2.3')
# -> '1.3.0'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '<=1.2.3')
# -> '1.2.3'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '!=1.2.3')
# -> '1.3.0'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '==1.2.3')
# -> '1.2.3'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], 'latest')
# -> '1.3.0'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], 'oldest')
# -> '1.2.3'
>>> resolve_version_specifier(['1.2.3', '1.2.4', '1.3.0'], '1.2.2')
# -> None
ocebuild.versioning.semver.get_minimum_version(dependencies: Dict[str, Tuple[str, str]], library: str) Tuple[str, str | None][source]#

Gets the minimum required version of a library.

Parameters:
  • dependencies – The dependency tree.

  • library – The library to get the minimum version of.

Returns:

A tuple of the library name and the minimum version.

Example

>>> dependencies = {
...   'lib1': [('lib2', '2.0.0')],
...   'lib2': [('lib3', '3.0.0')],
...   'lib3': [],
... }
>>> get_minimum_version(dependencies, 'lib1')
# -> ('lib1', None)
>>> get_minimum_version(dependencies, 'lib2')
# -> ('lib2', '^2.0.0')
>>> get_minimum_version(dependencies, 'lib3')
# -> ('lib3', '^3.0.0')
ocebuild.versioning.semver.sort_dependencies(dependencies: Dict[str, Tuple[str, str]]) Generator[Tuple[str, str], any, None][source]#

Sorts a dependency tree by topology and version.

Parameters:

dependencies – The dependency tree.

Yields:

A tuple of the library name and the minimum version.

Raises:

ValueError – If a cycle is detected in the dependency tree.

Example

>>> dependencies = {
...   'lib1': [('lib2', '2.0.0')],
...   'lib2': [('lib3', '3.0.0')],
...   'lib3': [],
... }
>>> list(sort_dependencies(dependencies))
# -> [('lib3', '^3.0.0'), ('lib2', '^2.0.0'), ('lib1', None)]