From 6f4f72988bddf1ff73b89dd6abc55602671d1d55 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Mon, 25 Nov 2013 09:48:47 +0100 Subject: Support non-str keys in request.META. Fix #482. --- debug_toolbar/panels/headers.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/debug_toolbar/panels/headers.py b/debug_toolbar/panels/headers.py index 0138299..265ec6b 100644 --- a/debug_toolbar/panels/headers.py +++ b/debug_toolbar/panels/headers.py @@ -39,7 +39,7 @@ class HeadersPanel(Panel): def process_request(self, request): wsgi_env = list(sorted(request.META.items())) self.request_headers = OrderedDict( - (unmangle(k), v) for (k, v) in wsgi_env if k.startswith('HTTP_')) + (unmangle(k), v) for (k, v) in wsgi_env if is_http_header(k)) if 'Cookie' in self.request_headers: self.request_headers['Cookie'] = '=> see Request panel' self.environ = OrderedDict( @@ -56,5 +56,11 @@ class HeadersPanel(Panel): }) +def is_http_header(wsgi_key): + # The WSGI spec says that keys should be str objects in the environ dict, + # but this isn't true in practice. See issues #449 and #482. + return isinstance(wsgi_key, str) and wsgi_key.startswith('HTTP_') + + def unmangle(wsgi_key): return wsgi_key[5:].replace('_', '-').title() -- cgit v1.2.3