Artifex/control_plane/events/bus.py
2026-08-15 13:50:24 +07:00

31 lines
920 B
Python

from __future__ import annotations
import logging
from typing import Any
from control_plane.events.models import Event, EventType
from control_plane.projects.models import Project, Task
logger = logging.getLogger(__name__)
class EventBus:
"""Persisted event bus for control-plane state changes."""
def publish(
self,
event_type: EventType | str,
*,
project: Project | None = None,
task: Task | None = None,
actor: str = "system",
payload: dict[str, Any] | None = None,
) -> Event:
event = Event.objects.create(
event_type=str(event_type), project=project, task=task, actor=actor, payload=payload or {}
)
logger.info(
"event_published",
extra={"event_id": str(event.id), "event_type": event.event_type, "project_id": str(project.id) if project else None},
)
return event