Añadida funcionalidad de intervalos en cartas blancas
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# models/docit2mf_models.py
|
||||
|
||||
from pydantic import BaseModel, field_validator
|
||||
from typing import List, Tuple, Union
|
||||
|
||||
|
||||
BlankCardInput = Union[int, Tuple[int, int], List[int]]
|
||||
|
||||
|
||||
class DoCIT2MFRequest(BaseModel):
|
||||
term: str
|
||||
core: Tuple[float, float]
|
||||
support: Tuple[float, float]
|
||||
|
||||
left_nodes_x: List[float]
|
||||
left_blank_cards: List[BlankCardInput]
|
||||
|
||||
right_nodes_x: List[float]
|
||||
right_blank_cards: List[BlankCardInput]
|
||||
|
||||
@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 validate_cards(cls, v):
|
||||
for item in v:
|
||||
# Caso 1: entero
|
||||
if isinstance(item, int):
|
||||
if item < 0:
|
||||
raise ValueError("Las cartas no pueden ser negativas.")
|
||||
# Caso 2: lista o tupla [min,max]
|
||||
elif isinstance(item, (list, tuple)):
|
||||
if len(item) != 2:
|
||||
raise ValueError("Los intervalos deben ser [min, max].")
|
||||
lo, hi = item
|
||||
if lo < 0 or hi < 0:
|
||||
raise ValueError("Las cartas no pueden ser negativas.")
|
||||
if lo > hi:
|
||||
raise ValueError("Debe cumplirse min <= max.")
|
||||
else:
|
||||
raise ValueError("Formato inválido para cartas blancas.")
|
||||
return v
|
||||
|
||||
|
||||
class DoCIT2MFMultiRequest(BaseModel):
|
||||
levels: List[DoCIT2MFRequest]
|
||||
@@ -45,3 +45,4 @@ class DoCMFRequest(BaseModel):
|
||||
|
||||
class DoCMFMultiRequest(BaseModel):
|
||||
levels: List[DoCMFRequest]
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
from typing import List, Optional
|
||||
from typing import List, Optional, Union
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
# -----------------------------
|
||||
# MODELOS DE FUNCIONES DIFUSAS
|
||||
# -----------------------------
|
||||
|
||||
class FuzzyTerm(BaseModel):
|
||||
term: str
|
||||
core: List[float]
|
||||
@@ -11,18 +15,32 @@ class FuzzyTerm(BaseModel):
|
||||
right_nodes: List[List[float]]
|
||||
|
||||
|
||||
class IT2FuzzyTerm(BaseModel):
|
||||
term: str
|
||||
lower: FuzzyTerm
|
||||
upper: FuzzyTerm
|
||||
|
||||
|
||||
# -----------------------------
|
||||
# HISTORIAL
|
||||
# -----------------------------
|
||||
|
||||
class HistoryItem(BaseModel):
|
||||
id: Optional[str] = Field(default=None, alias="_id")
|
||||
name: str
|
||||
created_at: datetime
|
||||
results: List[FuzzyTerm]
|
||||
results: List[Union[FuzzyTerm, IT2FuzzyTerm]]
|
||||
|
||||
|
||||
class HistoryCreateRequest(BaseModel):
|
||||
name: str
|
||||
results: List[FuzzyTerm]
|
||||
results: List[Union[FuzzyTerm, IT2FuzzyTerm]]
|
||||
|
||||
|
||||
# -----------------------------
|
||||
# USUARIOS
|
||||
# -----------------------------
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
username: str
|
||||
email: EmailStr
|
||||
@@ -41,4 +59,3 @@ class UserInDB(BaseModel):
|
||||
password_hash: str
|
||||
token: Optional[str] = None
|
||||
history: List[HistoryItem] = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user