@@ -271,6 +271,51 @@ def _load_routers(app: FastAPI) -> None:
271
271
logger .info ("No plugin API router to load" )
272
272
273
273
274
+ def _load_middlewares (app : FastAPI ) -> None :
275
+
276
+ pm = _get_pluggin_manager (HookType .MIDDLEWARE )
277
+
278
+ middleware_impls = pm .hook .middleware .get_hookimpls ()
279
+ if middleware_impls :
280
+ grouped_middlewares = _grouped_hookimpls_results (pm .hook .middleware )
281
+ pkg_names = {get_pkg_name (p , strip_fps = False ) for p in grouped_middlewares }
282
+ logger .info (f"Loading middlewares from plugin package(s) { pkg_names } " )
283
+
284
+ registered_middlewares = {}
285
+
286
+ for p , middlewares in grouped_middlewares .items ():
287
+ p_name = Config .plugin_name (p )
288
+ plugin_config = Config .from_name (p_name )
289
+
290
+ disabled = (
291
+ plugin_config
292
+ and not plugin_config .enabled
293
+ or p_name in Config (FPSConfig ).disabled_plugins
294
+ or (
295
+ Config (FPSConfig ).enabled_plugins
296
+ and p_name not in Config (FPSConfig ).enabled_plugins
297
+ )
298
+ )
299
+ if not middlewares or disabled :
300
+ disabled_msg = " (disabled)" if disabled else ""
301
+ logger .info (
302
+ f"No middleware registered for plugin '{ p_name } '{ disabled_msg } "
303
+ )
304
+ continue
305
+
306
+ for plugin_middleware , plugin_kwargs in middlewares :
307
+ app .add_middleware (
308
+ plugin_middleware ,
309
+ ** plugin_kwargs ,
310
+ )
311
+
312
+ logger .info (
313
+ f"{ len (middlewares )} middleware(s) added from plugin '{ p_name } '"
314
+ )
315
+ else :
316
+ logger .info ("No plugin middleware to load" )
317
+
318
+
274
319
def create_app ():
275
320
276
321
logging .getLogger ("fps" )
@@ -283,6 +328,7 @@ def create_app():
283
328
284
329
_load_routers (app )
285
330
_load_exceptions_handlers (app )
331
+ _load_middlewares (app )
286
332
287
333
Config .check_not_used_sections ()
288
334
0 commit comments