# retoor import asyncio from fastapi import FastAPI def build() -> FastAPI: from devplacepy.database import init_db, refresh_snapshot, set_setting from devplacepy.routers.nodes import router from devplacepy.services.manager import service_manager from devplacepy.services.nodes.service import NodesService app = FastAPI() app.include_router(router, prefix="/nodes") service = NodesService() @app.on_event("startup") async def start() -> None: init_db() set_setting("nodes_enabled", "1") set_setting("nodes_allow_unknown_class", "1") service_manager.register(service) service_manager.set_lock_owner(True) service_manager.supervise() service.scheduler.destination_ready = lambda target: True await asyncio.sleep(0) @app.middleware("http") async def fresh_snapshot(request, call_next): refresh_snapshot() return await call_next(request) @app.get("/stats") async def stats() -> dict: return {"connected": service.registry.count(), "counters": service.counters.snapshot()} return app