40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
|
|
|
|
from enum import Enum
|
|
from dataclasses import dataclass
|
|
from typing import Optional, Any
|
|
|
|
class ResultError(Enum):
|
|
"""Classified error categories."""
|
|
SUCCESS = "success"
|
|
NOT_SUPPORTED = "NOT_SUPPORTED"
|
|
INVALID_INPUT = "invalid_input"
|
|
MISSING_FILE = "missing_file"
|
|
MISSING_DEPENDENCY = "missing_dependency"
|
|
CONNECTION = "connection"
|
|
DATABASE = "database"
|
|
PERMISSION = "permission"
|
|
SUBSCRIPTION = "subscription"
|
|
NMCLI = "nmcli_issues"
|
|
FIREWALL = "firewall"
|
|
CLIENT_DNS = "client_dns"
|
|
EXTERNAL_DNS = "external_dns"
|
|
INTERFACE = "interface"
|
|
TIMEOUT = "timeout"
|
|
UNKNOWN = "unknown"
|
|
|
|
@dataclass
|
|
class Result():
|
|
valid: bool
|
|
error_type: ResultError = ResultError.SUCCESS
|
|
data: Optional[Any] = None
|
|
message: Optional[str] = None
|
|
goal: Optional[str] = None
|
|
|
|
def user_message(self) -> str:
|
|
"""Human-readable error for the UI."""
|
|
messages = {
|
|
DBErrorType.SUCCESS: "Operation completed successfully.",
|
|
DBErrorType.UNKNOWN: f"Error: {self.message}",
|
|
}
|
|
return messages.get(self.error_type, "Unknown error")
|