39 lines
967 B
Python
39 lines
967 B
Python
|
|
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
|
||
|
|
DEBIAN = auto()
|
||
|
|
SEM_VER = auto()
|
||
|
|
NAMES_ONLY = auto()
|
||
|
|
|
||
|
|
class Component(Flag): # export
|
||
|
|
ID = auto()
|
||
|
|
MAJOR = auto()
|
||
|
|
MINOR = auto()
|
||
|
|
MICRO = auto()
|
||
|
|
REVISION = auto()
|
||
|
|
CORE = MAJOR | MINOR | MICRO
|
||
|
|
|
||
|
|
class Boundary(NamedTuple): # export
|
||
|
|
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
|