Añadida funcionalidad de intervalos en cartas blancas

This commit is contained in:
Mireya Cueto Garrido
2026-04-06 10:42:42 +02:00
parent 111acc632e
commit 5d3de4e27f
8 changed files with 207 additions and 10 deletions
+69
View File
@@ -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]
+1
View File
@@ -45,3 +45,4 @@ class DoCMFRequest(BaseModel):
class DoCMFMultiRequest(BaseModel):
levels: List[DoCMFRequest]
+21 -4
View File
@@ -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] = []