# [DEF:superset_tool.exceptions:Module] # @PURPOSE: Определяет иерархию пользовательских исключений для всего инструмента, обеспечивая единую точку обработки ошибок. # @SEMANTICS: exception, error, hierarchy # @LAYER: Infra # [SECTION: IMPORTS] from pathlib import Path from typing import Optional, Dict, Any, Union # [/SECTION] # [DEF:SupersetToolError:Class] # @PURPOSE: Базовый класс для всех ошибок, генерируемых инструментом. # @RELATION: INHERITS_FROM -> Exception # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: context (Optional[Dict[str, Any]]) - Дополнительный контекст ошибки. class SupersetToolError(Exception): # [DEF:__init__:Function] # @PURPOSE: Initializes the base tool error. # @PRE: message is a string, context is optional dict. # @POST: Error is initialized with combined message and context. def __init__(self, message: str, context: Optional[Dict[str, Any]] = None): self.context = context or {} super().__init__(f"{message} | Context: {self.context}") # [/DEF:__init__:Function] # [/DEF:SupersetToolError:Class] # [DEF:AuthenticationError:Class] # @PURPOSE: Ошибки, связанные с аутентификацией или авторизацией. # @RELATION: INHERITS_FROM -> SupersetToolError # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: context (Any) - Дополнительный контекст ошибки. class AuthenticationError(SupersetToolError): # [DEF:__init__:Function] # @PURPOSE: Initializes an authentication error. # @PRE: Optional message and context. # @POST: Error is initialized with authentication context. def __init__(self, message: str = "Authentication failed", **context: Any): super().__init__(f"[AUTH_FAILURE] {message}", context={"type": "authentication", **context}) # [/DEF:__init__:Function] # [/DEF:AuthenticationError:Class] # [DEF:PermissionDeniedError:Class] # @PURPOSE: Ошибка, возникающая при отказе в доступе к ресурсу. # @RELATION: INHERITS_FROM -> AuthenticationError # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: required_permission (Optional[str]) - Требуемое разрешение. # @PARAM: context (Any) - Дополнительный контекст ошибки. class PermissionDeniedError(AuthenticationError): # [DEF:__init__:Function] # @PURPOSE: Initializes a permission denied error. # @PRE: Optional message, permission string, and context. # @POST: Error is initialized with permission details. def __init__(self, message: str = "Permission denied", required_permission: Optional[str] = None, **context: Any): full_message = f"Permission denied: {required_permission}" if required_permission else message super().__init__(full_message, context={"required_permission": required_permission, **context}) # [/DEF:__init__:Function] # [/DEF:PermissionDeniedError:Class] # [DEF:SupersetAPIError:Class] # @PURPOSE: Общие ошибки при взаимодействии с Superset API. # @RELATION: INHERITS_FROM -> SupersetToolError # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: context (Any) - Дополнительный контекст ошибки. class SupersetAPIError(SupersetToolError): # [DEF:__init__:Function] # @PURPOSE: Initializes a Superset API error. # @PRE: Optional message and context. # @POST: Error is initialized with API failure context. def __init__(self, message: str = "Superset API error", **context: Any): super().__init__(f"[API_FAILURE] {message}", context={"type": "api_call", **context}) # [/DEF:__init__:Function] # [/DEF:SupersetAPIError:Class] # [DEF:ExportError:Class] # @PURPOSE: Ошибки, специфичные для операций экспорта. # @RELATION: INHERITS_FROM -> SupersetAPIError # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: context (Any) - Дополнительный контекст ошибки. class ExportError(SupersetAPIError): # [DEF:__init__:Function] # @PURPOSE: Initializes an export error. # @PRE: Optional message and context. # @POST: Error is initialized with export failure subtype. def __init__(self, message: str = "Dashboard export failed", **context: Any): super().__init__(f"[EXPORT_FAILURE] {message}", context={"subtype": "export", **context}) # [/DEF:__init__:Function] # [/DEF:ExportError:Class] # [DEF:DashboardNotFoundError:Class] # @PURPOSE: Ошибка, когда запрошенный дашборд или ресурс не найден (404). # @RELATION: INHERITS_FROM -> SupersetAPIError # @PARAM: dashboard_id_or_slug (Union[int, str]) - ID или slug дашборда. # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: context (Any) - Дополнительный контекст ошибки. class DashboardNotFoundError(SupersetAPIError): # [DEF:__init__:Function] # @PURPOSE: Initializes a dashboard not found error. # @PRE: dashboard_id_or_slug is provided. # @POST: Error is initialized with resource identification. def __init__(self, dashboard_id_or_slug: Union[int, str], message: str = "Dashboard not found", **context: Any): super().__init__(f"[NOT_FOUND] Dashboard '{dashboard_id_or_slug}' {message}", context={"subtype": "not_found", "resource_id": dashboard_id_or_slug, **context}) # [/DEF:__init__:Function] # [/DEF:DashboardNotFoundError:Class] # [DEF:DatasetNotFoundError:Class] # @PURPOSE: Ошибка, когда запрашиваемый набор данных не существует (404). # @RELATION: INHERITS_FROM -> SupersetAPIError # @PARAM: dataset_id_or_slug (Union[int, str]) - ID или slug набора данных. # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: context (Any) - Дополнительный контекст ошибки. class DatasetNotFoundError(SupersetAPIError): # [DEF:__init__:Function] # @PURPOSE: Initializes a dataset not found error. # @PRE: dataset_id_or_slug is provided. # @POST: Error is initialized with resource identification. def __init__(self, dataset_id_or_slug: Union[int, str], message: str = "Dataset not found", **context: Any): super().__init__(f"[NOT_FOUND] Dataset '{dataset_id_or_slug}' {message}", context={"subtype": "not_found", "resource_id": dataset_id_or_slug, **context}) # [/DEF:__init__:Function] # [/DEF:DatasetNotFoundError:Class] # [DEF:InvalidZipFormatError:Class] # @PURPOSE: Ошибка, указывающая на некорректный формат или содержимое ZIP-архива. # @RELATION: INHERITS_FROM -> SupersetToolError # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: file_path (Optional[Union[str, Path]]) - Путь к файлу. # @PARAM: context (Any) - Дополнительный контекст ошибки. class InvalidZipFormatError(SupersetToolError): # [DEF:__init__:Function] # @PURPOSE: Initializes an invalid ZIP format error. # @PRE: Optional message, file path, and context. # @POST: Error is initialized with file validation context. def __init__(self, message: str = "Invalid ZIP format or content", file_path: Optional[Union[str, Path]] = None, **context: Any): super().__init__(f"[FILE_ERROR] {message}", context={"type": "file_validation", "file_path": str(file_path) if file_path else "N/A", **context}) # [/DEF:__init__:Function] # [/DEF:InvalidZipFormatError:Class] # [DEF:NetworkError:Class] # @PURPOSE: Ошибки, связанные с сетевым соединением. # @RELATION: INHERITS_FROM -> SupersetToolError # @PARAM: message (str) - Сообщение об ошибке. # @PARAM: context (Any) - Дополнительный контекст ошибки. class NetworkError(SupersetToolError): # [DEF:__init__:Function] # @PURPOSE: Initializes a network error. # @PRE: Optional message and context. # @POST: Error is initialized with network failure context. def __init__(self, message: str = "Network connection failed", **context: Any): super().__init__(f"[NETWORK_FAILURE] {message}", context={"type": "network", **context}) # [/DEF:__init__:Function] # [/DEF:NetworkError:Class] # [DEF:FileOperationError:Class] # @PURPOSE: Общие ошибки файловых операций (I/O). # @RELATION: INHERITS_FROM -> SupersetToolError class FileOperationError(SupersetToolError): pass # [/DEF:FileOperationError:Class] # [DEF:InvalidFileStructureError:Class] # @PURPOSE: Ошибка, указывающая на некорректную структуру файлов или директорий. # @RELATION: INHERITS_FROM -> FileOperationError class InvalidFileStructureError(FileOperationError): pass # [/DEF:InvalidFileStructureError:Class] # [DEF:ConfigurationError:Class] # @PURPOSE: Ошибки, связанные с неверной конфигурацией инструмента. # @RELATION: INHERITS_FROM -> SupersetToolError class ConfigurationError(SupersetToolError): pass # [/DEF:ConfigurationError:Class] # [/DEF:superset_tool.exceptions:Module]