from __future__ import annotations from collections.abc import Callable from enum import Enum, Flag, auto from typing import TYPE_CHECKING, NamedTuple, TypeAlias if TYPE_CHECKING: from .Version import Version class Syntax(Enum): # export """Syntaxes for rendered version constraints""" DEBIAN = auto() SEM_VER = auto() NAMES_ONLY = auto() class Component(Flag): # export """Version components that parts_str() can extract""" ID = auto() MAJOR = auto() MINOR = auto() MICRO = auto() REVISION = auto() CORE = MAJOR | MINOR | MICRO class Boundary(NamedTuple): # export """A comparison operator and the Version it bounds""" op: str version: Version """Syntax-aware formatted version comparion operator""" def format_op(self, syntax: Syntax) -> str: if syntax is Syntax.DEBIAN: match self.op: case '<': return '<<' case '>': return '>>' case _: return self.op return self.op Lookup: TypeAlias = Callable[[str], str] # export