Update docs and screenshots
CI / backend (pull_request) Canceled after 0s
CI / shell (pull_request) Canceled after 0s
CI / frontend (pull_request) Canceled after 0s
CI / arm64-smoke (pull_request) Canceled after 0s
CI / backend (push) Canceled after 0s
CI / shell (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / arm64-smoke (push) Canceled after 0s
CI / backend (pull_request) Canceled after 0s
CI / shell (pull_request) Canceled after 0s
CI / frontend (pull_request) Canceled after 0s
CI / arm64-smoke (pull_request) Canceled after 0s
CI / backend (push) Canceled after 0s
CI / shell (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / arm64-smoke (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
"""MixItUp integration services."""
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import deque
|
||||
from time import monotonic
|
||||
|
||||
from app.dmx.engine import DmxEngine
|
||||
from app.effects.service import EffectService
|
||||
from app.models.schemas import TriggerRequest
|
||||
from app.scenes.service import SceneService
|
||||
|
||||
|
||||
class TriggerService:
|
||||
def __init__(
|
||||
self,
|
||||
engine: DmxEngine,
|
||||
effects: EffectService,
|
||||
scenes: SceneService,
|
||||
) -> None:
|
||||
self.engine = engine
|
||||
self.effects = effects
|
||||
self.scenes = scenes
|
||||
self.queue: deque[dict[str, object]] = deque(maxlen=100)
|
||||
self._recent_ids: dict[str, float] = {}
|
||||
|
||||
def enqueue(self, slug: str, payload: TriggerRequest) -> dict[str, object]:
|
||||
if payload.event_id:
|
||||
previous = self._recent_ids.get(payload.event_id)
|
||||
if previous and monotonic() - previous < 30:
|
||||
return {"accepted": False, "reason": "duplicate-event"}
|
||||
self._recent_ids[payload.event_id] = monotonic()
|
||||
item: dict[str, object] = {
|
||||
"slug": slug,
|
||||
"payload": payload.model_dump(by_alias=True),
|
||||
}
|
||||
self.queue.append(item)
|
||||
return {"accepted": True, "queue_depth": len(self.queue)}
|
||||
|
||||
def snapshot(self) -> list[dict[str, object]]:
|
||||
return list(self.queue)
|
||||
Reference in New Issue
Block a user