1
1
import logging
2
2
import types
3
3
4
- from bolt .exceptions import ImproperlyConfigured , MiddlewareNotUsed
4
+ from bolt .exceptions import ImproperlyConfigured
5
5
from bolt .logs import log_response
6
6
from bolt .runtime import settings
7
7
from bolt .signals import request_finished
15
15
16
16
class BaseHandler :
17
17
_view_middleware = None
18
- _exception_middleware = None
19
18
_middleware_chain = None
20
19
21
20
def load_middleware (self ):
@@ -25,29 +24,12 @@ def load_middleware(self):
25
24
Must be called after the environment is fixed (see __call__ in subclasses).
26
25
"""
27
26
self ._view_middleware = []
28
- self ._exception_middleware = []
29
27
30
28
get_response = self ._get_response
31
29
handler = convert_exception_to_response (get_response )
32
30
for middleware_path in reversed (settings .MIDDLEWARE ):
33
31
middleware = import_string (middleware_path )
34
- try :
35
- # Adapt handler, if needed.
36
- adapted_handler = self .adapt_method_mode (
37
- handler ,
38
- debug = settings .DEBUG ,
39
- name = "middleware %s" % middleware_path ,
40
- )
41
- mw_instance = middleware (adapted_handler )
42
- except MiddlewareNotUsed as exc :
43
- if settings .DEBUG :
44
- if str (exc ):
45
- logger .debug ("MiddlewareNotUsed(%r): %s" , middleware_path , exc )
46
- else :
47
- logger .debug ("MiddlewareNotUsed: %r" , middleware_path )
48
- continue
49
- else :
50
- handler = adapted_handler
32
+ mw_instance = middleware (handler )
51
33
52
34
if mw_instance is None :
53
35
raise ImproperlyConfigured (
@@ -57,42 +39,15 @@ def load_middleware(self):
57
39
if hasattr (mw_instance , "process_view" ):
58
40
self ._view_middleware .insert (
59
41
0 ,
60
- self .adapt_method_mode (mw_instance .process_view ),
61
- )
62
- if hasattr (mw_instance , "process_exception" ):
63
- # The exception-handling stack is still always synchronous for
64
- # now, so adapt that way.
65
- self ._exception_middleware .append (
66
- self .adapt_method_mode (False , mw_instance .process_exception ),
42
+ mw_instance .process_view ,
67
43
)
68
44
69
45
handler = convert_exception_to_response (mw_instance )
70
46
71
- # Adapt the top of the stack, if needed.
72
- handler = self .adapt_method_mode (handler )
73
47
# We only assign to this when initialization is complete as it is used
74
48
# as a flag for initialization being complete.
75
49
self ._middleware_chain = handler
76
50
77
- def adapt_method_mode (
78
- self ,
79
- method ,
80
- debug = False ,
81
- name = None ,
82
- ):
83
- """
84
- Adapt a method to be in the correct "mode":
85
- - If is_async is False:
86
- - Synchronous methods are left alone
87
- - Asynchronous methods are wrapped with async_to_sync
88
- - If is_async is True:
89
- - Synchronous methods are wrapped with sync_to_async()
90
- - Asynchronous methods are left alone
91
- """
92
- if debug and not name :
93
- name = name or "method %s()" % method .__qualname__
94
- return method
95
-
96
51
def get_response (self , request ):
97
52
"""Return an HttpResponse object for the given HttpRequest."""
98
53
# Setup default url resolver for this thread
@@ -128,13 +83,7 @@ def _get_response(self, request):
128
83
129
84
if response is None :
130
85
wrapped_callback = self .make_view_atomic (callback )
131
-
132
- try :
133
- response = wrapped_callback (request , * callback_args , ** callback_kwargs )
134
- except Exception as e :
135
- response = self .process_exception_by_middleware (e , request )
136
- if response is None :
137
- raise
86
+ response = wrapped_callback (request , * callback_args , ** callback_kwargs )
138
87
139
88
# Complain if the view returned None (a common error).
140
89
self .check_response (response , callback )
@@ -189,17 +138,6 @@ def make_view_atomic(self, view):
189
138
view = transaction .atomic (using = alias )(view )
190
139
return view
191
140
192
- def process_exception_by_middleware (self , exception , request ):
193
- """
194
- Pass the exception to the exception middleware. If no middleware
195
- return a response for this exception, return None.
196
- """
197
- for middleware_method in self ._exception_middleware :
198
- response = middleware_method (request , exception )
199
- if response :
200
- return response
201
- return None
202
-
203
141
204
142
def reset_urlconf (sender , ** kwargs ):
205
143
"""Reset the URLconf after each request is finished."""
0 commit comments