@@ -65,6 +65,19 @@ def connection_lost(self, exc):
65
65
66
66
self ._server ['response' ] = None
67
67
68
+ async def run_middlewares (self , name , reverse = False , start = 0 , step = 1 ):
69
+ if reverse :
70
+ start = len (self ._middlewares [name ]) - 1
71
+ step = - 1
72
+
73
+ while 0 <= start < len (self ._middlewares [name ]):
74
+ if await self ._handle_middleware (
75
+ self ._middlewares [name ][start ][1 ],
76
+ self ._middlewares [name ][start ][2 ]):
77
+ return True
78
+
79
+ start += step
80
+
68
81
async def _handle_middleware (self , func , kwargs ):
69
82
options = self .request .context .options
70
83
options .update (kwargs )
@@ -175,15 +188,8 @@ async def _handle_response(self, func, kwargs):
175
188
else :
176
189
self .response .set_header (b'Connection' , b'close' )
177
190
178
- i = len (self ._middlewares ['response' ])
179
-
180
- while i > 0 :
181
- i -= 1
182
-
183
- if await self ._handle_middleware (
184
- self ._middlewares ['response' ][i ][1 ],
185
- self ._middlewares ['response' ][i ][2 ]):
186
- return
191
+ if await self .run_middlewares ('response' , reverse = True ):
192
+ return
187
193
188
194
if self .request .method == b'HEAD' or no_content :
189
195
await self .response .write (None )
@@ -237,15 +243,8 @@ async def _handle_response(self, func, kwargs):
237
243
b'Connection' , KEEPALIVE_OR_CLOSE [self .request .http_keepalive ]
238
244
)
239
245
240
- i = len (self ._middlewares ['response' ])
241
-
242
- while i > 0 :
243
- i -= 1
244
-
245
- if await self ._handle_middleware (
246
- self ._middlewares ['response' ][i ][1 ],
247
- self ._middlewares ['response' ][i ][2 ]):
248
- return
246
+ if await self .run_middlewares ('response' , reverse = True ):
247
+ return
249
248
250
249
if self .request .method == b'HEAD' or no_content :
251
250
await self .response .write (None )
@@ -269,9 +268,8 @@ async def headers_received(self, response):
269
268
if self ._middlewares ['connect' ]:
270
269
await self .context .ON_CONNECT
271
270
272
- for middleware in self ._middlewares ['request' ]:
273
- if await self ._handle_middleware (middleware [1 ], middleware [2 ]):
274
- return
271
+ if await self .run_middlewares ('request' ):
272
+ return
275
273
276
274
if not self .request .is_valid :
277
275
# bad request
0 commit comments