Module pyboiler.version

Generic semantic versioning class/implementation

Classes

class Version (release: int, major: int, minor: int)
Expand source code
class Version:
    __slots__ = ("release", "major", "minor")

    def __init__(self, release: int, major: int, minor: int):
        self.release = release
        self.major = major
        self.minor = minor

    def __str__(self) -> str:
        return f"{self.release}.{self.major}.{self.minor}"

    def __repr__(self) -> str:
        return f"<{type(self).__name__} {str(self)}>"

    def __eq__(self, other):
        if not isinstance(other, type(self)):
            raise NotImplementedError(f"Cannot check if {type(self)} == {type(other)}")
        if self.release == other.release:
            if self.major == other.major:
                if self.minor == other.minor:
                    return True
        return False

    def __lt__(self, other) -> bool:
        if not isinstance(other, type(self)):
            raise NotImplementedError(f"Cannot check if {type(self)} < {type(other)}")
        checks = list(self.__slots__)
        for idx, check in enumerate(checks):
            s_check = getattr(self, check)
            o_check = getattr(other, check)
            if s_check < o_check:
                return True
        return False

    def __gt__(self, other) -> bool:
        if not isinstance(other, type(self)):
            raise NotImplementedError(f"Cannot check if {type(self)} < {type(other)}")
        checks = list(self.__slots__)
        for idx, check in enumerate(checks):
            s_check = getattr(self, check)
            o_check = getattr(other, check)
            if s_check > o_check:
                return True
        return False

    def __le__(self, other) -> bool:
        if self == other:
            return True
        return self < other

    def __ge__(self, other) -> bool:
        if self == other:
            return True
        return self > other

Instance variables

var major
var minor
var release