Source code for okonomiyaki.versions.enpkg
from ..errors import InvalidEnpkgVersion
from .pep386_workaround import IrrationalVersionError, PEP386WorkaroundVersion
[docs]class EnpkgVersion(object):
[docs] @classmethod
def from_upstream_and_build(cls, upstream, build):
""" Creates a new EnpkgVersion from the upstream string and the
build number.
Parameters
----------
upstream : str
The upstream version (e.g. '1.3.0')
build : int
The build number
"""
try:
upstream = PEP386WorkaroundVersion.from_string(upstream)
except IrrationalVersionError:
raise InvalidEnpkgVersion(
"{}-{}".format(upstream, build),
"Invalid PEP386 version string: {0!r}".format(upstream)
)
return cls(upstream, build)
[docs] @classmethod
def from_string(cls, version_string):
""" Creates a new EnpkgVersion from its string representation.
Parameters
----------
version_string : str
the version string.
"""
parts = version_string.rsplit("-")
if len(parts) == 1:
build = 0
elif len(parts) == 2:
try:
build = int(parts[1])
except ValueError:
raise InvalidEnpkgVersion(
version_string,
"Invalid build number: {0!r}".format(parts[1])
)
else:
raise InvalidEnpkgVersion(version_string)
return cls.from_upstream_and_build(parts[0], build)
def __init__(self, upstream, build):
""" Creates a new EnpkgVersion instance
Parameters
----------
upstream : PEP386WorkaroundVersion
The upstream version
build : int
The build number
"""
self.upstream = upstream
self.build = build
self._parts = upstream, build
def __str__(self):
return str(self.upstream) + "-" + str(self.build)
def __hash__(self):
return hash(self._parts)
def _cannot_compare(self, other):
msg = "Cannot compare {0!r} and {1!r}"
raise TypeError(msg.format(type(self), type(other)))
def __eq__(self, other):
if not isinstance(other, EnpkgVersion):
self._cannot_compare(other)
return self._parts == other._parts
def __ne__(self, other):
return not self.__eq__(other)
def __lt__(self, other):
if not isinstance(other, EnpkgVersion):
self._cannot_compare(other)
return self._parts < other._parts
def __le__(self, other):
return not self.__gt__(other)
def __gt__(self, other):
if not isinstance(other, EnpkgVersion):
self._cannot_compare(other)
return self._parts > other._parts
def __ge__(self, other):
return not self.__lt__(other)