import re
from pydantic import BaseModel, EmailStr, HttpUrl, field_validator
class Empleado(BaseModel):
dni: str
nombre: str
correo: EmailStr
carnet: str
url_foto: HttpUrl
@field_validator("dni")
@classmethod
def validar_dni(cls, valor: str) -> str:
if not re.fullmatch(r"[A-Za-z0-9]+", valor):
raise ValueError("El DNI solo puede contener letras y números")
return valor
@field_validator("nombre")
@classmethod
def validar_nombre(cls, valor: str) -> str:
# Permite letras, espacios, tildes, ü/Ü y ñ/Ñ.
if not re.fullmatch(
r"[A-Za-zÁÉÍÓÚáéíóúÜüÑñ]+(?: [A-Za-zÁÉÍÓÚáéíóúÜüÑñ]+)*",
valor,
):
raise ValueError(
"El nombre solo puede contener letras, espacios, tildes y eñes"
)
return valor
@field_validator("carnet")
@classmethod
def validar_carnet(cls, valor: str) -> str:
# Ejemplo válido: AB12345#-
if not re.fullmatch(r"[A-Za-z]{2}\d{5}#-", valor):
raise ValueError(
"El carnet debe contener 2 letras, 5 dígitos y terminar en #-"
)
return valor
@field_validator("url_foto")
@classmethod
def validar_url_foto(cls, valor: HttpUrl) -> HttpUrl:
if valor.scheme != "https":
raise ValueError("La URL de la foto debe utilizar HTTPS")
return valor
Comments