dodil/erp-brick-purchasing
DODIL ERP brick: purchasing
src/brick_purchasing/domain/readiness.py
"""Readiness (shared.yaml conventions.readiness): {gate, met, reason, fix}, computed at read time."""
from dataclasses import asdict, dataclass
from brick_purchasing.domain.errors import GateUnmet
@dataclass(frozen=True)
class Gate:
gate: str
met: bool
reason: str = ""
fix: str = ""
def view(self) -> dict:
return asdict(self)
def ok(gate: str) -> Gate:
return Gate(gate, True)
def no(gate: str, reason: str, fix: str) -> Gate:
return Gate(gate, False, reason, fix)
def require(gates) -> None:
"""Raise GateUnmet naming every gate that is not met; do nothing when all are."""
bad = [g for g in gates if not g.met]
if bad:
raise GateUnmet(bad)
def views(gates) -> list:
return [g.view() for g in gates]