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