Skip to content

Instantly share code, notes, and snippets.

@ulgens
Created February 29, 2020 08:39
Show Gist options
  • Save ulgens/e166ad31ec71e6b1f0777a8d81ce48ae to your computer and use it in GitHub Desktop.
Save ulgens/e166ad31ec71e6b1f0777a8d81ce48ae to your computer and use it in GitHub Desktop.
GQL Debug Toolbar Fix
import json
from debug_toolbar.middleware import DebugToolbarMiddleware as BaseMiddleware
from debug_toolbar.middleware import get_show_toolbar
from debug_toolbar.toolbar import DebugToolbar
from django.template.loader import render_to_string
from graphiql_debug_toolbar.middleware import get_payload, set_content_length
from graphiql_debug_toolbar.serializers import CallableJSONEncoder
__all__ = ['DebugToolbarMiddleware']
_HTML_TYPES = ("text/html", "application/xhtml+xml", "text/plain")
class DebugToolbarMiddleware(BaseMiddleware):
def __call__(self, request):
if not get_show_toolbar()(request) or request.is_ajax():
return self.get_response(request)
content_type = request.content_type
html_type = content_type in _HTML_TYPES
if html_type:
response = super().__call__(request)
template = render_to_string('graphiql_debug_toolbar/base.html')
response.write(template)
set_content_length(response)
return response
toolbar = DebugToolbar(request, self.get_response)
for panel in toolbar.enabled_panels:
panel.enable_instrumentation()
try:
response = toolbar.process_request(request)
finally:
for panel in reversed(toolbar.enabled_panels):
panel.disable_instrumentation()
response = self.generate_server_timing_header(
response,
toolbar.enabled_panels,
)
payload = get_payload(request, response, toolbar)
response.content = json.dumps(payload, cls=CallableJSONEncoder)
set_content_length(response)
return response
@mmdaz
Copy link

mmdaz commented Aug 15, 2020

Thanks!
It was useful for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment