Files
Tandur/exceptions.py
Rudi a36749d788 API Users wit Cookies
Sorry for the wrong branch
2026-08-28 15:39:59 +02:00

80 lines
2.6 KiB
Python

from typing import Any
class AppError(Exception):
"""Basisklasse für alle eigenen Fehler dieser App"""
def __init__(self, message: str = "Ein unerwarteter Fehler ist aufgetreten."):
self.message = message
super().__init__(self.message)
# ==========================================
# 1. Datenbank- & Ressourcen-Fehler
# ==========================================
class DatabaseError(AppError):
"""Basisklasse für Datenbank-bezogene Fehler"""
pass
class NotFoundError(DatabaseError):
"""Ein angefragter Datensatz existiert nicht"""
def __init__(self, resource: str = "Ressource", identifier: Any = None):
if identifier:
msg = f"{resource} mit ID/Kennung '{identifier}' wurde nicht gefunden."
else:
msg = f"{resource} wurde nicht gefunden."
super().__init__(msg)
class AlreadyExistsError(DatabaseError):
"""Ein Unique-Constraint wurde verletzt (z. B. doppelte E-Mail)"""
def __init__(self, resource: str = "Ressource", field: str = "Eintrag", value: Any = None):
if value:
msg = f"{resource} mit {field} '{value}' existiert bereits."
else:
msg = f"{resource} existiert bereits."
super().__init__(msg)
# Domänen-spezifische Ressourcen-Fehler
class UserNotFoundError(NotFoundError):
def __init__(self, identifier: Any = None):
super().__init__(resource="User", identifier=identifier)
class UserAlreadyExistsError(AlreadyExistsError):
def __init__(self, field: str = "E-Mail", value: Any = None):
super().__init__(resource="User", field=field, value=value)
# ==========================================
# 2. Authentifizierung & Autorisierung
# ==========================================
class AuthError(AppError):
"""Basisklasse für Authentifizierungs- und Rechte-Fehler"""
pass
class UnauthorizedError(AuthError):
"""Ungültiges Token oder falsche Login-Daten"""
def __init__(self, message: str = "Ungültige Anmeldedaten oder Token abgelaufen."):
super().__init__(message)
class ForbiddenError(AuthError):
"""Fehlende Berechtigungen (z.B. Kein Admin)"""
def __init__(self, message: str = "Unzureichende Berechtigungen für diese Aktion."):
super().__init__(message)
# ==========================================
# 3. Validierungsfehler (Business Logic)
# ==========================================
class ValidationError(AppError):
"""Fehler in der Business-Logik (unabhängig von Pydantic)"""
def __init__(self, message: str = "Ungültige Eingabedaten."):
super().__init__(message)