(Feat): Initial Commit.
This commit is contained in:
71
examples/event_handling.py
Normal file
71
examples/event_handling.py
Normal file
@@ -0,0 +1,71 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user