49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from pydantic import BaseModel, field_validator
|
|
from typing import List, Tuple
|
|
|
|
class DoCMFRequest(BaseModel):
|
|
term: str
|
|
core: Tuple[float, float]
|
|
support: Tuple[float, float]
|
|
left_nodes_x: List[float]
|
|
left_blank_cards: List[int]
|
|
right_nodes_x: List[float]
|
|
right_blank_cards: List[int]
|
|
|
|
@field_validator("term")
|
|
def term_not_empty(cls, v):
|
|
if not v.strip():
|
|
raise ValueError("El término no puede estar vacío.")
|
|
return v
|
|
|
|
@field_validator("core")
|
|
def core_valid(cls, v):
|
|
a, b = v
|
|
if a > b:
|
|
raise ValueError("El núcleo debe cumplir a <= b.")
|
|
return v
|
|
|
|
@field_validator("support")
|
|
def support_valid(cls, v, info):
|
|
c, d = v
|
|
if c >= d:
|
|
raise ValueError("El soporte debe cumplir c < d.")
|
|
|
|
core = info.data.get("core")
|
|
if core:
|
|
a, b = core
|
|
if not (c <= a <= b <= d):
|
|
raise ValueError("El núcleo debe estar dentro del soporte.")
|
|
return v
|
|
|
|
@field_validator("left_blank_cards", "right_blank_cards")
|
|
def cards_valid(cls, v):
|
|
if any(c < 0 for c in v):
|
|
raise ValueError("Las cartas no pueden ser negativas.")
|
|
return v
|
|
|
|
|
|
class DoCMFMultiRequest(BaseModel):
|
|
levels: List[DoCMFRequest]
|
|
|