From 186fcb318a87e6e89add597b8dc2d8443a765bc8 Mon Sep 17 00:00:00 2001
From: Aymeric Augustin
Date: Fri, 18 Oct 2013 17:01:52 +0200
Subject: Ensure the toolbar only outputs valid XML.
This allows using it in websites served with the application/xml+xhtml
mime type. Fix #221.
---
debug_toolbar/templates/debug_toolbar/base.html | 6 +++---
debug_toolbar/templates/debug_toolbar/panels/sql.html | 6 +++---
debug_toolbar/utils/sql.py | 2 +-
tests/tests.py | 7 +++++++
tests/views.py | 4 ++--
5 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/debug_toolbar/templates/debug_toolbar/base.html b/debug_toolbar/templates/debug_toolbar/base.html
index a790bd1..7b42c84 100644
--- a/debug_toolbar/templates/debug_toolbar/base.html
+++ b/debug_toolbar/templates/debug_toolbar/base.html
@@ -2,13 +2,13 @@
-
+
{% for panel in panels %}
{% if panel.has_content %}
diff --git a/debug_toolbar/templates/debug_toolbar/panels/sql.html b/debug_toolbar/templates/debug_toolbar/panels/sql.html
index 36201fc..064413c 100644
--- a/debug_toolbar/templates/debug_toolbar/panels/sql.html
+++ b/debug_toolbar/templates/debug_toolbar/panels/sql.html
@@ -4,7 +4,7 @@
{% for alias, info in databases %}
- {{ alias }}
+ {{ alias }}
{{ info.time_spent|floatformat:"2" }} ms ({% blocktrans count info.num_queries as num %}{{ num }} query{% plural %}{{ num }} queries{% endblocktrans %})
{% endfor %}
@@ -15,7 +15,7 @@
-
+
{% trans 'Query' %}
{% trans 'Timeline' %}
{% trans 'Time (ms)' %}
@@ -25,7 +25,7 @@
{% for query in queries %}
-
+
+
diff --git a/debug_toolbar/utils/sql.py b/debug_toolbar/utils/sql.py
index 4e0d70d..2810699 100644
--- a/debug_toolbar/utils/sql.py
+++ b/debug_toolbar/utils/sql.py
@@ -29,5 +29,5 @@ def reformat_sql(sql):
def swap_fields(sql):
- return re.sub('SELECT (.*?) FROM', 'SELECT ••• ' +
+ return re.sub('SELECT (.*?) FROM', 'SELECT ••• ' +
'\g<1> FROM', sql)
diff --git a/tests/tests.py b/tests/tests.py
index 1188ee0..9194325 100644
--- a/tests/tests.py
+++ b/tests/tests.py
@@ -4,6 +4,7 @@ from __future__ import unicode_literals
import logging
import threading
+from xml.etree import ElementTree as ET
import django
from django.conf import settings
@@ -191,6 +192,12 @@ class DebugToolbarIntegrationTestCase(TestCase):
if not six.PY3:
self.assertContains(response, 'là')
+ def test_xml_validation(self):
+ response = self.client.get('/regular/XML/')
+ with open('/tmp/blah.html', 'wb') as f:
+ f.write(response.content)
+ ET.fromstring(response.content) # shouldn't raise ParseError
+
class DebugToolbarNameFromObjectTest(BaseTestCase):
diff --git a/tests/views.py b/tests/views.py
index a903bee..8b51706 100644
--- a/tests/views.py
+++ b/tests/views.py
@@ -13,7 +13,7 @@ def execute_sql(request):
def regular_view(request, title):
- content = '%s ' % title
+ content = '%s ' % title
return HttpResponse(content)
@@ -26,4 +26,4 @@ def set_session(request):
request.session['où'] = 'où'
if not six.PY3:
request.session['là'.encode('utf-8')] = 'là'.encode('utf-8')
- return HttpResponse(' ')
+ return HttpResponse('')
--
cgit v1.2.3