empleado.py
  1. import re
  2.  
  3. from pydantic import BaseModel, EmailStr, HttpUrl, field_validator
  4.  
  5.  
  6. class Empleado(BaseModel):
  7. dni: str
  8. nombre: str
  9. correo: EmailStr
  10. carnet: str
  11. url_foto: HttpUrl
  12.  
  13. @field_validator("dni")
  14. @classmethod
  15. def validar_dni(cls, valor: str) -> str:
  16. if not re.fullmatch(r"[A-Za-z0-9]+", valor):
  17. raise ValueError("El DNI solo puede contener letras y números")
  18. return valor
  19.  
  20. @field_validator("nombre")
  21. @classmethod
  22. def validar_nombre(cls, valor: str) -> str:
  23. # Permite letras, espacios, tildes, ü/Ü y ñ/Ñ.
  24. if not re.fullmatch(
  25. r"[A-Za-zÁÉÍÓÚáéíóúÜüÑñ]+(?: [A-Za-zÁÉÍÓÚáéíóúÜüÑñ]+)*",
  26. valor,
  27. ):
  28. raise ValueError(
  29. "El nombre solo puede contener letras, espacios, tildes y eñes"
  30. )
  31. return valor
  32.  
  33. @field_validator("carnet")
  34. @classmethod
  35. def validar_carnet(cls, valor: str) -> str:
  36. # Ejemplo válido: AB12345#-
  37. if not re.fullmatch(r"[A-Za-z]{2}\d{5}#-", valor):
  38. raise ValueError(
  39. "El carnet debe contener 2 letras, 5 dígitos y terminar en #-"
  40. )
  41. return valor
  42.  
  43. @field_validator("url_foto")
  44. @classmethod
  45. def validar_url_foto(cls, valor: HttpUrl) -> HttpUrl:
  46. if valor.scheme != "https":
  47. raise ValueError("La URL de la foto debe utilizar HTTPS")
  48. return valor
Pasted 2026-08-27 14:08:15

Short link: