ForcePilot/backend/package/yuxi/channel/domain/service/message_context.py

45 lines
1.2 KiB
Python
Raw Normal View History

from __future__ import annotations
import uuid
from dataclasses import dataclass, field
from yuxi.channel.domain.model.message.unified_message import UnifiedMessage
@dataclass
class Span:
middleware_name: str
started_at: float = 0.0
finished_at: float = 0.0
duration_ms: float = 0.0
aborted: bool = False
skipped: bool = False
@dataclass
class MessageContext:
message: UnifiedMessage
channel_type: str = ""
trace_id: str = field(default_factory=lambda: str(uuid.uuid4()))
spans: list[Span] = field(default_factory=list)
aborted: bool = field(default=False, init=False, repr=False)
skipped: bool = field(default=False, init=False, repr=False)
abort_reason: str = field(default="", init=False, repr=False)
abort_code: str = field(default="", init=False, repr=False)
@property
def is_aborted(self) -> bool:
return self.aborted
@property
def is_skipped(self) -> bool:
return self.skipped
def abort(self, reason: str, code: str = "") -> None:
self.aborted = True
self.abort_reason = reason
self.abort_code = code
def skip(self) -> None:
self.skipped = True