topic-generator / scripts /error_handler.py
Namgyu-Youn's picture
Upload 7 files
545ce24 verified
raw
history blame
4.22 kB
from typing import Optional, List, Dict, Any
from pydantic import BaseModel, Field, ConfigDict
from enum import Enum
class ErrorLevel(str, Enum):
INFO = "info"
WARNING = "warning"
ERROR = "error"
CRITICAL = "critical"
class ErrorDetail(BaseModel):
"""Base model for error details"""
code: str = Field(..., description="Error code for the specific error")
message: str = Field(..., description="Human readable error message")
level: ErrorLevel = Field(default=ErrorLevel.ERROR, description="Severity level of the error")
context: Optional[Dict[str, Any]] = Field(default=None, description="Additional context about the error")
class GitHubURLError(ErrorDetail):
"""Model for GitHub URL related errors"""
model_config = ConfigDict(json_schema_extra={
"example": {
"code": "INVALID_GITHUB_URL",
"message": "The provided URL is not a valid GitHub repository URL",
"level": ErrorLevel.ERROR,
"context": {"url": "https://invalid-url.com"}
}
})
class TopicAnalysisError(ErrorDetail):
"""Model for topic analysis related errors"""
model_config = ConfigDict(json_schema_extra={
"example": {
"code": "TOPIC_GENERATION_FAILED",
"message": "Failed to generate topics from the content",
"level": ErrorLevel.ERROR,
"context": {"model": "deberta-v3-base", "error": "Model loading failed"}
}
})
class APIResponse(BaseModel):
"""Model for API responses"""
success: bool = Field(default=True, description="Indicates if the operation was successful")
data: Optional[Dict[str, Any]] = Field(default=None, description="Response data when operation is successful")
errors: Optional[List[ErrorDetail]] = Field(default=None, description="List of errors if any occurred")
def model_post_init(self, __context):
"""Post initialization hook to update success status based on errors"""
if self.errors:
self.success = False
class ErrorHandler:
"""Handler for managing and creating error responses"""
@staticmethod
def handle_github_url_error(url: str, error_message: str) -> APIResponse:
"""
Handle GitHub URL related errors
Args:
url: The problematic URL
error_message: Description of the error
Returns:
APIResponse with error details
"""
error = GitHubURLError(
code="INVALID_GITHUB_URL",
message=f"Invalid GitHub URL: {error_message}",
context={"url": url}
)
return APIResponse(success=False, errors=[error])
@staticmethod
def handle_topic_analysis_error(error_message: str, context: Dict[str, Any] = None) -> APIResponse:
"""
Handle topic analysis related errors
Args:
error_message: Description of the error
context: Additional context information
Returns:
APIResponse with error details
"""
error = TopicAnalysisError(
code="TOPIC_GENERATION_FAILED",
message=f"Topic generation failed: {error_message}",
context=context or {}
)
return APIResponse(success=False, errors=[error])
@staticmethod
def handle_file_fetch_error(file_path: str, error_message: str) -> APIResponse:
"""
Handle file fetching related errors
Args:
file_path: Path of the file that failed to fetch
error_message: Description of the error
Returns:
APIResponse with error details
"""
error = ErrorDetail(
code="FILE_FETCH_FAILED",
message=f"Failed to fetch file: {error_message}",
context={"file_path": file_path}
)
return APIResponse(success=False, errors=[error])
@staticmethod
def success_response(data: Dict[str, Any]) -> APIResponse:
"""
Create a success response
Args:
data: The response data to be returned
Returns:
APIResponse with success status and data
"""
return APIResponse(success=True, data=data)