72 lines
1.7 KiB
Python
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)
|