def __call__(self, request): # Decide whether the toolbar is active for this request. show_toolbar = get_show_toolbar() if not show_toolbar(request) or request.path.startswith("/__debug__/"): return self.get_response(request) toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: panel.enable_instrumentation() try: # Run panels like Django middleware. response = toolbar.process_request(request) finally: # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() # Generate the stats for all requests when the toolbar is being shown, # but not necessarily inserted. for panel in reversed(toolbar.enabled_panels): panel.generate_stats(request, response) panel.generate_server_timing(request, response) response = self.generate_server_timing_header(response, toolbar.enabled_panels) # Check for responses where the toolbar can't be inserted. content_encoding = response.get("Content-Encoding", "") content_type = response.get("Content-Type", "").split(";")[0] if any(( getattr(response, "streaming", False), "gzip" in content_encoding, content_type not in _HTML_TYPES, request.is_ajax(), )): # If a AJAX or JSON request, render the toolbar for the history. if request.is_ajax() or content_type == "application/json": toolbar.render_toolbar() return response # Insert the toolbar in the response. content = response.content.decode(response.charset) insert_before = dt_settings.get_config()["INSERT_BEFORE"] pattern = re.escape(insert_before) bits = re.split(pattern, content, flags=re.IGNORECASE) if len(bits) > 1: bits[-2] += toolbar.render_toolbar() response.content = insert_before.join(bits) if "Content-Length" in response: response["Content-Length"] = len(response.content) return response
def __call__(self, request): if settings.DEBUG_TOOLBAR and django_settings.DEBUG: toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: panel.enable_instrumentation() try: # Run panels like Django middleware. response = toolbar.process_request(request) finally: # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() for panel in reversed(toolbar.enabled_panels): panel.generate_stats(request, response) panel.generate_server_timing(request, response) if getattr(request, 'input_logged_request', False): DebugToolbarData.objects.create( logged_request=request.input_logged_request, toolbar=toolbar.render_toolbar() ) return response else: return self.get_response(request)
def __call__(self, request): if settings.DEBUG_TOOLBAR and django_settings.DEBUG: toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: panel.enable_instrumentation() try: # Run panels like Django middleware. response = toolbar.process_request(request) finally: # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() for panel in reversed(toolbar.enabled_panels): panel.generate_stats(request, response) panel.generate_server_timing(request, response) input_request_logger = getattr(request, 'input_request_logger', None) if input_request_logger: for ignored_path in settings.DEBUG_TOOLBAR_IGNORE_URL_REGEX_PATHS: if re.match(r'^{}$'.format(ignored_path), request.path): return response input_request_logger.update_extra_data( {'debug_toolbar': toolbar.render_toolbar()}) return response else: return self.get_response(request)
def __call__(self, request): # Decide whether the toolbar is active for this request. Don't render # the toolbar during AJAX requests. show_toolbar = get_show_toolbar() if not show_toolbar(request) or request.is_ajax(): return self.get_response(request) toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: panel.enable_instrumentation() try: # Run panels like Django middleware. response = toolbar.process_request(request) finally: # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() # Check for responses where the toolbar can't be inserted. content_encoding = response.get("Content-Encoding", "") content_type = response.get("Content-Type", "").split(";")[0] if any( ( getattr(response, "streaming", False), "gzip" in content_encoding, content_type not in _HTML_TYPES, ) ): return response # Collapse the toolbar by default if SHOW_COLLAPSED is set. if toolbar.config["SHOW_COLLAPSED"] and "djdt" not in request.COOKIES: response.set_cookie("djdt", "hide", 864000) # Insert the toolbar in the response. content = response.content.decode(response.charset) insert_before = dt_settings.get_config()["INSERT_BEFORE"] pattern = re.escape(insert_before) bits = re.split(pattern, content, flags=re.IGNORECASE) if len(bits) > 1: # When the toolbar will be inserted for sure, generate the stats. for panel in reversed(toolbar.enabled_panels): panel.generate_stats(request, response) panel.generate_server_timing(request, response) response = self.generate_server_timing_header( response, toolbar.enabled_panels ) bits[-2] += toolbar.render_toolbar() response.content = insert_before.join(bits) if response.get("Content-Length", None): response["Content-Length"] = len(response.content) return response
def __call__(self, request): # Decide whether the toolbar is active for this request. show_toolbar = get_show_toolbar() if not show_toolbar(request) or DebugToolbar.is_toolbar_request( request): return self.get_response(request) toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: panel.enable_instrumentation() try: # Run panels like Django middleware. response = toolbar.process_request(request) finally: clear_stack_trace_caches() # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() # Generate the stats for all requests when the toolbar is being shown, # but not necessarily inserted. for panel in reversed(toolbar.enabled_panels): panel.generate_stats(request, response) panel.generate_server_timing(request, response) # Always render the toolbar for the history panel, even if it is not # included in the response. rendered = toolbar.render_toolbar() for header, value in self.get_headers(request, toolbar.enabled_panels).items(): response.headers[header] = value # Check for responses where the toolbar can't be inserted. content_encoding = response.get("Content-Encoding", "") content_type = response.get("Content-Type", "").split(";")[0] if (getattr(response, "streaming", False) or content_encoding != "" or content_type not in _HTML_TYPES): return response # Insert the toolbar in the response. content = response.content.decode(response.charset) insert_before = dt_settings.get_config()["INSERT_BEFORE"] pattern = re.escape(insert_before) bits = re.split(pattern, content, flags=re.IGNORECASE) if len(bits) > 1: bits[-2] += rendered response.content = insert_before.join(bits) if "Content-Length" in response: response["Content-Length"] = len(response.content) return response
def __call__(self, request): # Decide whether the toolbar is active for this request. Don't render # the toolbar during AJAX requests. show_toolbar = get_show_toolbar() if not show_toolbar(request): return self.get_response(request) toolbar = DebugToolbar(request, self.get_response) # Activate instrumentation ie. monkey-patch. for panel in toolbar.enabled_panels: panel.enable_instrumentation() try: # Run panels like Django middleware. response = toolbar.process_request(request) finally: # Deactivate instrumentation ie. monkey-unpatch. This must run # regardless of the response. Keep 'return' clauses below. for panel in reversed(toolbar.enabled_panels): panel.disable_instrumentation() # Check for responses where the toolbar can't be inserted. content_encoding = response.get("Content-Encoding", "") content_type = response.get("Content-Type", "").split(";")[0] if any( ( getattr(response, "streaming", False), "gzip" in content_encoding, content_type not in _HTML_TYPES, ) ): return response # Collapse the toolbar by default if SHOW_COLLAPSED is set. if toolbar.config["SHOW_COLLAPSED"] and "djdt" not in request.COOKIES: response.set_cookie("djdt", "hide", 864000) if toolbar: # for django-debug-toolbar >= 1.4 for panel in reversed(toolbar.enabled_panels): if hasattr(panel, 'generate_stats'): panel.generate_stats(request, response) cache_key = "%f" % time.time() cache.set(cache_key, toolbar.render_toolbar()) response['X-debug-data-url'] = request.build_absolute_uri( reverse('debug_data', urlconf=debug_toolbar.urls, kwargs={'cache_key': cache_key})) return response