Source code for yardmaster.core.version

from __future__ import annotations

from dataclasses import dataclass
from enum import Enum


[docs] class Channel(str, Enum): alpha = "alpha" beta = "beta" stable = "stable" lts = "lts"
STREAM_TO_CHANNEL: dict[int, Channel] = { 0: Channel.alpha, 1: Channel.beta, 2: Channel.stable, 3: Channel.lts, } CHANNEL_TO_STREAM: dict[Channel, int] = {ch: stream for stream, ch in STREAM_TO_CHANNEL.items()}
[docs] @dataclass(frozen=True, slots=True) class Version: epoch: int stream: int revision: int = 0 @classmethod def parse(cls, s: str) -> Version: parts = s.strip().split(".") if len(parts) != 3: raise ValueError(f"Invalid version '{s}'. Expected 3 dot-separated integers.") epoch, stream, revision = (int(p) for p in parts) return cls(epoch, stream, revision) def is_major_release(self) -> bool: return self.revision == 0 def to_tuple(self) -> tuple[int, int, int]: return (self.epoch, self.stream, self.revision) def __str__(self) -> str: return f"{self.epoch}.{self.stream}.{self.revision}"