Fhernd

empleado.py

Aug 27th, 2026
37,110
1
Never
3
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.48 KB | Source Code | 1 0
  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
Advertisement