Coverage for src / lexigram / contracts / exceptions / events.py: 0%
26 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
1"""Event bus and messaging exception classes."""
3from __future__ import annotations
5from typing import Any
7from lexigram.contracts.exceptions.base import LexigramError
10class EventError(LexigramError):
11 """Base events/messaging error."""
13 _code = "LEX_ERR_EVT_001"
15 def __init__(self, message: str = "Events error", **kwargs: Any) -> None:
16 super().__init__(message, **kwargs)
19class HandlerNotFoundError(EventError):
20 """Event/command handler not found.
22 Raised when no handler is registered for a specific event or command type.
23 """
25 _code = "LEX_ERR_EVT_002"
27 def __init__(
28 self,
29 message: str = "Handler not found",
30 handler_type: str | None = None,
31 message_type: str | None = None,
32 **kwargs: Any,
33 ) -> None:
34 details = kwargs.get("details", {})
35 if handler_type:
36 details["handler_type"] = handler_type
37 if message_type:
38 details["message_type"] = message_type
39 kwargs["details"] = details
40 super().__init__(message, **kwargs)
43__all__ = [
44 "DuplicateHandlerError",
45 "EventError",
46 "HandlerNotFoundError",
47]
50class DuplicateHandlerError(EventError):
51 """Duplicate handler registration.
53 Raised when attempting to register a handler for a type that already has one.
54 """
56 _code = "LEX_ERR_EVT_003"
58 def __init__(
59 self,
60 message: str = "Duplicate handler",
61 message_type: str | None = None,
62 **kwargs: Any,
63 ) -> None:
64 details = kwargs.get("details", {})
65 if message_type:
66 details["message_type"] = message_type
67 kwargs["details"] = details
68 super().__init__(message, **kwargs)