85 lines
2.0 KiB
Python
85 lines
2.0 KiB
Python
from dataclasses import dataclass
|
|
from typing import Any, Optional
|
|
from core.events import bus, Event
|
|
|
|
|
|
# -------------------------
|
|
# BASE ERROR
|
|
# -------------------------
|
|
|
|
@dataclass
|
|
class CXError(Exception):
|
|
code: str
|
|
message: str
|
|
module: str = "CORE"
|
|
status: int = 500
|
|
context: Optional[Any] = None
|
|
|
|
# -------------------------
|
|
# SERIALIZATION
|
|
# -------------------------
|
|
|
|
def to_dict(self):
|
|
return {
|
|
"error": True,
|
|
"code": self.code,
|
|
"message": self.message,
|
|
"module": self.module,
|
|
"status": self.status,
|
|
"context": self.context,
|
|
}
|
|
|
|
# -------------------------
|
|
# EVENT EMISSION
|
|
# -------------------------
|
|
|
|
def emit(self):
|
|
bus.emit(Event(
|
|
name="exception",
|
|
source=self.module,
|
|
level="ERROR",
|
|
data={
|
|
"code": self.code,
|
|
"message": self.message,
|
|
"status": self.status,
|
|
"context": self.context,
|
|
}
|
|
))
|
|
|
|
|
|
# -------------------------
|
|
# 4xx CLIENT / AI ERRORS
|
|
# -------------------------
|
|
|
|
class CXBadRequest(CXError):
|
|
def __init__(self, msg, module="CORE"):
|
|
super().__init__("CX400", msg, module, 400)
|
|
|
|
|
|
class CXNotFound(CXError):
|
|
def __init__(self, msg, module="FILESYSTEM"):
|
|
super().__init__("CX404", msg, module, 404)
|
|
|
|
|
|
class CXForbidden(CXError):
|
|
def __init__(self, msg, module="SECURITY"):
|
|
super().__init__("CX403", msg, module, 403)
|
|
|
|
|
|
class CXInvalidOperation(CXError):
|
|
def __init__(self, msg, module="CORE"):
|
|
super().__init__("CX422", msg, module, 422)
|
|
|
|
|
|
# -------------------------
|
|
# 5xx SYSTEM ERRORS
|
|
# -------------------------
|
|
|
|
class CXInternalError(CXError):
|
|
def __init__(self, msg, module="CORE"):
|
|
super().__init__("CX500", msg, module, 500)
|
|
|
|
|
|
class CXToolFailure(CXError):
|
|
def __init__(self, msg, module="TOOLS"):
|
|
super().__init__("CX502", msg, module, 502) |
