Fhernd icon

empleado.py

Fhernd | PRO | 08/27/26 06:58:28 PM UTC | 1 ⭐ | 34786 👁️ | Never ⏰ | []
Python |

1.48 KB

|

Source Code

|

1 👍

/

0 👎

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