@@ -21,6 +21,13 @@ def show_toolbar(request):
2121 return settings .DEBUG and request .META .get ("REMOTE_ADDR" ) in settings .INTERNAL_IPS
2222
2323
24+ def observe_request (request ):
25+ """
26+ Default function to determine whether to update the toolbar from a client side request
27+ """
28+ return not DebugToolbar .is_toolbar_request (request )
29+
30+
2431@lru_cache ()
2532def get_show_toolbar ():
2633 # If SHOW_TOOLBAR_CALLBACK is a string, which is the recommended
@@ -32,6 +39,17 @@ def get_show_toolbar():
3239 return func_or_path
3340
3441
42+ @lru_cache ()
43+ def get_observe_request ():
44+ # If OBSERVE_REQUEST_CALLBACK is a string, which is the recommended
45+ # setup, resolve it to the corresponding callable.
46+ func_or_path = dt_settings .get_config ()["OBSERVE_REQUEST_CALLBACK" ]
47+ if isinstance (func_or_path , str ):
48+ return import_string (func_or_path )
49+ else :
50+ return func_or_path
51+
52+
3553class DebugToolbarMiddleware :
3654 """
3755 Middleware to set up Debug Toolbar on incoming request and render toolbar
@@ -67,12 +85,12 @@ def __call__(self, request):
6785 panel .generate_stats (request , response )
6886 panel .generate_server_timing (request , response )
6987
70- response = self .generate_server_timing_header (response , toolbar .enabled_panels )
71-
7288 # Always render the toolbar for the history panel, even if it is not
7389 # included in the response.
7490 rendered = toolbar .render_toolbar ()
7591
92+ response = self .generate_headers (request , response , toolbar .enabled_panels )
93+
7694 # Check for responses where the toolbar can't be inserted.
7795 content_encoding = response .get ("Content-Encoding" , "" )
7896 content_type = response .get ("Content-Type" , "" ).split (";" )[0 ]
@@ -96,22 +114,24 @@ def __call__(self, request):
96114 return response
97115
98116 @staticmethod
99- def generate_server_timing_header ( response , panels ):
100- data = []
117+ def generate_headers ( request , response , panels ):
118+ stats_data = []
101119
102120 for panel in panels :
121+ response = panel .generate_headers (request , response )
103122 stats = panel .get_server_timing_stats ()
104123 if not stats :
105124 continue
106125
107126 for key , record in stats .items ():
108127 # example: `SQLPanel_sql_time;dur=0;desc="SQL 0 queries"`
109- data .append (
128+ stats_data .append (
110129 '{}_{};dur={};desc="{}"' .format (
111130 panel .panel_id , key , record .get ("value" ), record .get ("title" )
112131 )
113132 )
114133
115- if data :
116- response ["Server-Timing" ] = ", " .join (data )
134+ if stats_data :
135+ response ["Server-Timing" ] = ", " .join (stats_data )
136+
117137 return response
0 commit comments