Files
fastapi-route-loader/examples/event_handling.py
2026-01-05 22:11:58 +00:00

72 lines
1.7 KiB
Python

"""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)