conans/client/tools/version.py
# coding=utf-8
from functools import total_ordering
from semver import SemVer
from conans.errors import ConanException
@total_ordering
class Version(object):
_semver = None
loose = True # Allow incomplete version strings like '1.2' or '1-dev0'
def __init__(self, value):
v = str(value).strip()
try:
self._semver = SemVer(v, loose=self.loose)
except ValueError:
raise ConanException("Invalid version '{}'".format(value))
def __str__(self):
return str(self._semver)
@property
def major(self):
return str(self._semver.major)
@property
def minor(self):
return str(self._semver.minor)
@property
def patch(self):
return str(self._semver.patch)
@property
def prerelease(self):
return str(".".join(map(str, self._semver.prerelease)))
@property
def build(self):
return str(".".join(map(str, self._semver.build)))
def __eq__(self, other):
if not isinstance(other, Version):
other = Version(other)
return self._semver.compare(other._semver) == 0
def __lt__(self, other):
if not isinstance(other, Version):
other = Version(other)
return self._semver.compare(other._semver) < 0