Files
ss-tools/superset_tool/exceptions.py
Volobuev Andrey 04fa28f086 fractal refactor
2025-06-26 17:53:04 +03:00

79 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [MODULE] Иерархия исключений
# @contract: Все ошибки наследуют SupersetToolError
# @semantic: Каждый тип соответствует конкретной проблемной области
# @coherence:
# - Полное покрытие всех сценариев клиента
# - Четкая классификация по уровню серьезности
# [IMPORTS] Exceptions
from typing import Optional, Dict, Any
class SupersetToolError(Exception):
"""[BASE] Базовый класс ошибок инструмента
@semantic: Должен содержать контекст для диагностики
"""
def __init__(self, message: str, context: Optional[dict] = None):
self.context = context or {}
super().__init__(f"{message} | Context: {self.context}")
# [ERROR-GROUP] Проблемы аутентификации и авторизации
class AuthenticationError(SupersetToolError):
"""[AUTH] Ошибки credentials или доступа
@context: url, username, error_detail
"""
def __init__(self, message="Auth failed", **context):
super().__init__(
f"[AUTH_FAILURE] {message}",
{"type": "authentication", **context}
)
class PermissionDeniedError(AuthenticationError):
"""[AUTH] Ошибка отказа в доступе из-за недостаточных прав
@context: required_permission, user_roles
"""
def __init__(self, required_permission: str, **context):
super().__init__(
f"Permission denied: {required_permission}",
{"type": "authorization", "required_permission": required_permission, **context}
)
# [ERROR-GROUP] Проблемы API-вызовов
class SupersetAPIError(SupersetToolError):
"""[API] Ошибки взаимодействия с Superset API
@context: endpoint, method, status_code, response
"""
def __init__(self, message="API error", **context):
super().__init__(
f"[API_FAILURE] {message}",
{"type": "api_call", **context}
)
# [ERROR-SUBCLASS] Детализированные ошибки API
class ExportError(SupersetAPIError):
"""[API:EXPORT] Проблемы экспорта дашбордов"""
...
class DashboardNotFoundError(SupersetAPIError):
"""[API:404] Запрошенный ресурс не существует"""
def __init__(self, dashboard_id, **context):
super().__init__(
f"Dashboard {dashboard_id} not found",
{"dashboard_id": dashboard_id, **context}
)
# [ERROR-SUBCLASS] Детализированные ошибки обработки файлов
class InvalidZipFormatError(SupersetAPIError):
"""[API:ZIP] Некорректный формат ZIP-архива
@context: file_path, expected_format, error_detail
"""
def __init__(self, file_path: str, **context):
super().__init__(
f"Invalid ZIP format for file: {file_path}",
{"type": "zip_validation", "file_path": file_path, **context}
)
# [ERROR-GROUP] Системные и network-ошибки
class NetworkError(SupersetToolError):
"""[NETWORK] Проблемы соединения или таймауты"""
...