5151from falcon ._typing import ErrorHandler
5252from falcon ._typing import ErrorSerializer
5353from falcon ._typing import FindMethod
54+ from falcon ._typing import Middleware
5455from falcon ._typing import ProcessResponseMethod
5556from falcon ._typing import ResponderCallable
5657from falcon ._typing import SinkCallable
@@ -286,7 +287,7 @@ def process_response(
286287 _static_routes : List [
287288 Tuple [routing .StaticRoute , routing .StaticRoute , Literal [False ]]
288289 ]
289- _unprepared_middleware : List [object ]
290+ _unprepared_middleware : List [Middleware ]
290291
291292 # Attributes
292293 req_options : RequestOptions
@@ -305,7 +306,7 @@ def __init__(
305306 media_type : str = constants .DEFAULT_MEDIA_TYPE ,
306307 request_type : Optional [Type [Request ]] = None ,
307308 response_type : Optional [Type [Response ]] = None ,
308- middleware : Union [object , Iterable [object ]] = None ,
309+ middleware : Optional [ Union [Middleware , Iterable [Middleware ] ]] = None ,
309310 router : Optional [routing .CompiledRouter ] = None ,
310311 independent_middleware : bool = True ,
311312 cors_enable : bool = False ,
@@ -327,17 +328,17 @@ def __init__(
327328 # NOTE(kgriffs): Check to see if middleware is an
328329 # iterable, and if so, append the CORSMiddleware
329330 # instance.
330- middleware = list (middleware ) # type: ignore[arg-type]
331- middleware .append (cm ) # type: ignore[arg-type]
331+ middleware = list (cast ( Iterable [ Middleware ], middleware ))
332+ middleware .append (cm )
332333 except TypeError :
333334 # NOTE(kgriffs): Assume the middleware kwarg references
334335 # a single middleware component.
335- middleware = [middleware , cm ]
336+ middleware = [cast ( Middleware , middleware ) , cm ]
336337
337338 # set middleware
338339 self ._unprepared_middleware = []
339340 self ._independent_middleware = independent_middleware
340- self .add_middleware (middleware )
341+ self .add_middleware (middleware or [] )
341342
342343 self ._router = router or routing .DefaultRouter ()
343344 self ._router_search = self ._router .find
@@ -524,7 +525,9 @@ def router_options(self) -> routing.CompiledRouterOptions:
524525 """
525526 return self ._router .options
526527
527- def add_middleware (self , middleware : Union [object , Iterable [object ]]) -> None :
528+ def add_middleware (
529+ self , middleware : Union [Middleware , Iterable [Middleware ]]
530+ ) -> None :
528531 """Add one or more additional middleware components.
529532
530533 Arguments:
@@ -535,20 +538,20 @@ def add_middleware(self, middleware: Union[object, Iterable[object]]) -> None:
535538 """
536539
537540 # NOTE(kgriffs): Since this is called by the initializer, there is
538- # the chance that middleware may be None .
541+ # the chance that middleware may be empty .
539542 if middleware :
540543 try :
541- middleware = list (middleware ) # type: ignore[call-overload]
544+ middleware = list (cast ( Iterable [ Middleware ], middleware ))
542545 except TypeError :
543546 # middleware is not iterable; assume it is just one bare component
544- middleware = [middleware ]
547+ middleware = [cast ( Middleware , middleware ) ]
545548
546549 if (
547550 self ._cors_enable
548551 and len (
549552 [
550553 mc
551- for mc in self ._unprepared_middleware + middleware # type: ignore[operator]
554+ for mc in self ._unprepared_middleware + middleware
552555 if isinstance (mc , CORSMiddleware )
553556 ]
554557 )
@@ -559,7 +562,7 @@ def add_middleware(self, middleware: Union[object, Iterable[object]]) -> None:
559562 'cors_enable (which already constructs one instance)'
560563 )
561564
562- self ._unprepared_middleware += middleware # type: ignore[arg-type]
565+ self ._unprepared_middleware += middleware
563566
564567 # NOTE(kgriffs): Even if middleware is None or an empty list, we still
565568 # need to make sure self._middleware is initialized if this is the
@@ -1012,7 +1015,7 @@ def my_serializer(
10121015 # ------------------------------------------------------------------------
10131016
10141017 def _prepare_middleware (
1015- self , middleware : List [object ], independent_middleware : bool = False
1018+ self , middleware : List [Middleware ], independent_middleware : bool = False
10161019 ) -> helpers .PreparedMiddlewareResult :
10171020 return helpers .prepare_middleware (
10181021 middleware = middleware , independent_middleware = independent_middleware
0 commit comments