blob: 91f3c6420328a98fc981d50a480749cccc836fa4 [file]
"""Semver"""
def semver(version):
"""Constructs a struct containing separated sections of a semantic version value.
Args:
version (str): The semver value.
Returns:
struct:
- major (int): The semver's major component. E.g. `1` from `1.2.3`
- minor (int): The semver's minor component. E.g. `2` from `1.2.3`
- patch (int): The semver's patch component. E.g. `3` from `1.2.3`
- pre (optional str): The semver's pre component. E.g. `rc4` from `1.2.3-rc4` or None if absent.
- str (str): The full string value of the semver.
"""
parts = version.split(".", 2)
if len(parts) < 3:
fail("Unexpected number of parts for semver value: {}".format(version))
major = parts[0]
minor = parts[1]
patch, split, pre = parts[2].partition("-")
if not split:
pre = None
return struct(
major = int(major),
minor = int(minor),
patch = int(patch),
pre = pre,
str = version,
)