non-building checkpoint 1
This commit is contained in:
172
backend/app/core/exceptions.py
Normal file
172
backend/app/core/exceptions.py
Normal file
@@ -0,0 +1,172 @@
|
||||
"""
|
||||
Custom exceptions for the application.
|
||||
"""
|
||||
|
||||
from typing import Any, Dict, Optional
|
||||
from fastapi import HTTPException, status
|
||||
|
||||
|
||||
class DailyJournalPromptException(HTTPException):
|
||||
"""Base exception for Daily Journal Prompt application."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
status_code: int = status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail: Any = None,
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(status_code=status_code, detail=detail, headers=headers)
|
||||
|
||||
|
||||
class ValidationError(DailyJournalPromptException):
|
||||
"""Exception for validation errors."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "Validation error",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class NotFoundError(DailyJournalPromptException):
|
||||
"""Exception for resource not found errors."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "Resource not found",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class UnauthorizedError(DailyJournalPromptException):
|
||||
"""Exception for unauthorized access errors."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "Unauthorized access",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class ForbiddenError(DailyJournalPromptException):
|
||||
"""Exception for forbidden access errors."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "Forbidden access",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class AIServiceError(DailyJournalPromptException):
|
||||
"""Exception for AI service errors."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "AI service error",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class DataServiceError(DailyJournalPromptException):
|
||||
"""Exception for data service errors."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "Data service error",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class ConfigurationError(DailyJournalPromptException):
|
||||
"""Exception for configuration errors."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "Configuration error",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class PromptPoolEmptyError(DailyJournalPromptException):
|
||||
"""Exception for empty prompt pool."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
detail: Any = "Prompt pool is empty",
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class InsufficientPoolSizeError(DailyJournalPromptException):
|
||||
"""Exception for insufficient pool size."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
current_size: int,
|
||||
requested: int,
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
detail = f"Pool only has {current_size} prompts, requested {requested}"
|
||||
super().__init__(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
class TemplateNotFoundError(DailyJournalPromptException):
|
||||
"""Exception for missing template files."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
template_name: str,
|
||||
headers: Optional[Dict[str, str]] = None,
|
||||
) -> None:
|
||||
detail = f"Template not found: {template_name}"
|
||||
super().__init__(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=detail,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user