@@ -72,6 +72,11 @@ def get_user_context(
7272 }
7373
7474
75+ # Define reusable dependency types (recommended FastAPI pattern)
76+ Replane = Annotated [AsyncReplane , Depends (get_replane )]
77+ UserContext = Annotated [dict , Depends (get_user_context )]
78+
79+
7580# Response models
7681class WelcomeResponse (BaseModel ):
7782 message : str
@@ -108,10 +113,7 @@ async def check_maintenance_mode(request: Request, call_next):
108113
109114
110115@app .get ("/" , response_model = WelcomeResponse )
111- async def index (
112- replane : Annotated [AsyncReplane , Depends (get_replane )],
113- ctx : Annotated [dict , Depends (get_user_context )],
114- ):
116+ async def index (replane : Replane , ctx : UserContext ):
115117 """Homepage with feature flag check."""
116118 user_client = replane .with_context (ctx )
117119 new_dashboard = user_client .configs ["new-dashboard-enabled" ]
@@ -123,10 +125,7 @@ async def index(
123125
124126
125127@app .get ("/api/items" , response_model = ItemsResponse )
126- async def get_items (
127- replane : Annotated [AsyncReplane , Depends (get_replane )],
128- ctx : Annotated [dict , Depends (get_user_context )],
129- ):
128+ async def get_items (replane : Replane , ctx : UserContext ):
130129 """List items with configurable rate limiting."""
131130 user_client = replane .with_context (ctx )
132131 rate_limit = user_client .configs ["rate-limit" ]
@@ -145,11 +144,7 @@ async def get_items(
145144
146145
147146@app .post ("/api/upload" , response_model = UploadResponse )
148- async def upload (
149- request : Request ,
150- replane : Annotated [AsyncReplane , Depends (get_replane )],
151- ctx : Annotated [dict , Depends (get_user_context )],
152- ):
147+ async def upload (request : Request , replane : Replane , ctx : UserContext ):
153148 """Upload endpoint with configurable size limit."""
154149 user_client = replane .with_context (ctx )
155150 max_size_mb = user_client .configs ["max-upload-size-mb" ]
@@ -170,10 +165,7 @@ async def upload(
170165
171166
172167@app .get ("/api/config" , response_model = ConfigResponse )
173- async def get_config (
174- replane : Annotated [AsyncReplane , Depends (get_replane )],
175- ctx : Annotated [dict , Depends (get_user_context )],
176- ):
168+ async def get_config (replane : Replane , ctx : UserContext ):
177169 """Debug endpoint to view current config values."""
178170 user_client = replane .with_context (ctx )
179171 return ConfigResponse (
0 commit comments