"""Event handling example for fastapi-route-loader.""" from fastapi import APIRouter, FastAPI from fastapi_route_loader import ( RouterContainer, RouterEvent, RouterEventType, ) app = FastAPI(title="Event Handling Example") container = RouterContainer() event_log: list[str] = [] @container.on(None) def log_router_event(event: RouterEvent) -> None: """Log all router events.""" message = f"[{event.event_type.value.upper()}] Router: {event.router_name}" event_log.append(message) print(message) @container.on(RouterEventType.LOADED) def on_router_loaded(event: RouterEvent) -> None: """Handle router loaded events.""" print(f"✅ Router '{event.router_name}' has been loaded") if event.metadata: print(f" Metadata: {event.metadata}") @container.on(RouterEventType.UNLOADED) def on_router_unloaded(event: RouterEvent) -> None: """Handle router unloaded events.""" print(f"❌ Router '{event.router_name}' has been unloaded") users_router = APIRouter(prefix="/users", tags=["users"]) @users_router.get("/") def list_users() -> dict[str, list[str]]: """List all users.""" return {"users": ["alice", "bob"]} container.add_router("users", users_router, metadata={"version": "1.0"}) posts_router = APIRouter(prefix="/posts", tags=["posts"]) @posts_router.get("/") def list_posts() -> dict[str, list[str]]: """List all posts.""" return {"posts": ["post1", "post2"]} container.add_router("posts", posts_router, metadata={"version": "1.0"}) container.remove_router("posts") container.register_to_app(app) if __name__ == "__main__": print("\n=== Event Log ===") for log_entry in event_log: print(log_entry) import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)