Spaces:
Sleeping
Sleeping
File size: 1,616 Bytes
67aa1ca | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | """Jerarquía de excepciones de la aplicación.
Cada excepción declara el código HTTP con el que debe responderse.
Los manejadores registrados en :mod:`app.core.exception_handlers` se
encargan de traducirlas a respuestas JSON consistentes.
"""
from __future__ import annotations
class AppException(Exception):
"""Excepción base para todos los errores controlados de la app."""
status_code: int = 500
detail: str = "Error interno del servidor."
def __init__(self, detail: str | None = None) -> None:
if detail is not None:
self.detail = detail
super().__init__(self.detail)
class NotFoundError(AppException):
"""El recurso solicitado no existe."""
status_code = 404
detail = "Recurso no encontrado."
class ConflictError(AppException):
"""Conflicto con el estado actual (p. ej. valor duplicado)."""
status_code = 409
detail = "El recurso ya existe o genera un conflicto."
class InvalidIdError(AppException):
"""El identificador proporcionado no es un ObjectId válido."""
status_code = 400
detail = "Identificador inválido."
class ValidationError(AppException):
"""Error de validación de reglas de negocio."""
status_code = 422
detail = "Los datos proporcionados no son válidos."
class AuthenticationError(AppException):
"""Credenciales ausentes o inválidas."""
status_code = 401
detail = "No autenticado."
class AuthorizationError(AppException):
"""El usuario no tiene permisos suficientes."""
status_code = 403
detail = "No tienes permisos para realizar esta acción."
|