Lift the format-agnostic pieces from decnet/orchestrator/emailgen/
into the new decnet/realism/ library so file-class content generation
(stage 3 of the realism migration) can reuse them. Email-specific
delivery (RFC 2822 EML, IMAP/POP3 spool, thread chains) stays in
orchestrator/.
Renames (history-preserving git mv):
emailgen/personas.py -> realism/personas.py
emailgen/prompt.py -> realism/prompts/email.py
emailgen/global_pool.py -> realism/personas_pool.py
emailgen/llm/ -> realism/llm/
Env-var clean break (pre-v1, no aliases):
DECNET_EMAILGEN_LLM -> DECNET_REALISM_LLM
DECNET_EMAILGEN_MODEL -> DECNET_REALISM_MODEL
DECNET_EMAILGEN_TIMEOUT -> DECNET_REALISM_TIMEOUT
DECNET_EMAILGEN_PERSONAS -> DECNET_REALISM_PERSONAS
DECNET_EMAILGEN_FAKE_OUTPUT -> DECNET_REALISM_FAKE_OUTPUT
Importers rewritten in: orchestrator/emailgen/scheduler.py,
orchestrator/drivers/email.py, web/router/{emailgen,topology}/
api_personas.py, cli/emailgen.py. Tests for moved modules relocated
to tests/realism/; tests for stay-put modules updated in place.
API URL `/api/v1/emailgen/personas` and CLI `decnet emailgen
import-personas` keep their public names until the service-collapse
commit (stage 5).
56 lines
2.4 KiB
Python
56 lines
2.4 KiB
Python
"""MazeNET topology REST endpoints (phase 3).
|
|
|
|
Thin FastAPI layer over the phase-2 topology machinery:
|
|
generate/validate/deploy/teardown, pending-only child CRUD, and the
|
|
live-mutation queue for active|degraded topologies.
|
|
|
|
Mounted at ``/api/v1/topologies`` by the main api router. Sub-routers
|
|
live one-per-file and are aggregated here.
|
|
"""
|
|
from fastapi import APIRouter
|
|
|
|
from .api_catalog import router as _catalog_router
|
|
from .api_create_topology import router as _create_router
|
|
from .api_create_blank_topology import router as _create_blank_router
|
|
from .api_decky_crud import router as _decky_router
|
|
from .api_delete_topology import router as _delete_router
|
|
from .api_deploy_topology import router as _deploy_router
|
|
from .api_edge_crud import router as _edge_router
|
|
from .api_events import router as _events_router
|
|
from .api_get_topology import router as _get_router
|
|
from .api_lan_crud import router as _lan_router
|
|
from .api_list_topologies import router as _list_router
|
|
from .api_mutations import router as _mutations_router
|
|
from .api_personas import router as _personas_router
|
|
from .api_reap_orphans import router as _reap_router
|
|
from .api_teardown_topology import router as _teardown_router
|
|
|
|
topology_router = APIRouter(prefix="/topologies", tags=["topologies"])
|
|
|
|
# Order matters: catalog routes use literal path segments (e.g.
|
|
# /services, /next-subnet) that would otherwise be shadowed by the
|
|
# `/{topology_id}` path in api_get_topology. Keep the catalog router
|
|
# included first so FastAPI's trie resolves literals before the
|
|
# parameterized fallback.
|
|
topology_router.include_router(_catalog_router)
|
|
topology_router.include_router(_list_router)
|
|
topology_router.include_router(_create_blank_router)
|
|
topology_router.include_router(_create_router)
|
|
topology_router.include_router(_reap_router)
|
|
topology_router.include_router(_deploy_router)
|
|
topology_router.include_router(_teardown_router)
|
|
topology_router.include_router(_delete_router)
|
|
topology_router.include_router(_lan_router)
|
|
topology_router.include_router(_decky_router)
|
|
topology_router.include_router(_edge_router)
|
|
topology_router.include_router(_mutations_router)
|
|
topology_router.include_router(_events_router)
|
|
# Personas use a literal-suffix path (`/{id}/personas`) — register
|
|
# before the bare `/{id}` getter so FastAPI's trie sees the literal
|
|
# segment first.
|
|
topology_router.include_router(_personas_router)
|
|
topology_router.include_router(_get_router)
|
|
|
|
|
|
__all__ = ["topology_router"]
|