Files
DECNET/decnet/lifecycle/events.py
anti f2b3393669 chore: relicense to AGPL-3.0-or-later and add SPDX headers
Replaces LICENSE (GPLv3 -> AGPLv3) and prepends
`SPDX-License-Identifier: AGPL-3.0-or-later` to every source file
across decnet/, decnet_web/, tests/, scripts/, and tools/.

Rationale: closes the GPLv3 ASP loophole so any party operating a
modified DECNET as a network service must offer their modified
source. Personal copyright (Samuel Paschuan) + inbound=outbound
contributions make a future unilateral relicense infeasible.

- LICENSE: full AGPL-3.0 text (gnu.org/licenses/agpl-3.0.txt)
- COPYRIGHT: project copyright notice
- tools/add_spdx_headers.py: idempotent header injector
  (shebang- and PEP 263-aware)

Touches 1565 source files (.py, .ts, .tsx, .js, .jsx, .css, .sh).
No behavior change; comments only.
2026-05-22 21:04:16 -04:00

45 lines
1.2 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""Bus emit helper for DeckyLifecycle transitions.
DB is the source of truth (wizard polls ``GET /deckies/lifecycle?ids=``).
The bus is best-effort live notification — publish failures are logged
and swallowed via ``publish_safely``, never propagated.
"""
from __future__ import annotations
from typing import Optional
from decnet.bus import topics as _topics
from decnet.bus.base import BaseBus
from decnet.bus.publish import publish_safely
async def emit_lifecycle(
bus: BaseBus | None,
*,
lifecycle_id: str,
decky_name: str,
operation: str,
status: str,
error: Optional[str] = None,
) -> None:
"""Publish ``decky.<name>.lifecycle`` with the current transition.
Payload keys: ``lifecycle_id``, ``operation``, ``status`` and
optionally ``error``. Documented in
``wiki-checkout/Service-Bus.md``.
"""
payload: dict = {
"lifecycle_id": lifecycle_id,
"operation": operation,
"status": status,
}
if error is not None:
payload["error"] = error
await publish_safely(
bus,
_topics.decky_lifecycle(decky_name),
payload,
event_type=_topics.DECKY_LIFECYCLE,
)