Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

Commit c00cbda

Browse files
Sinklerashwoods
authored andcommitted
fix django sql hook
1 parent b07c0d5 commit c00cbda

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

raven/contrib/django/client.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,23 @@ def format_sql(sql, params):
8383
return sql, rv
8484

8585

86+
def record_sql(vendor, alias, start, duration, sql, params):
87+
def processor(data):
88+
real_sql, real_params = format_sql(sql, params)
89+
if real_params:
90+
try:
91+
real_sql = real_sql % tuple(real_params)
92+
except TypeError:
93+
pass
94+
# maybe category to 'django.%s.%s' % (vendor, alias or
95+
# 'default') ?
96+
data.update({
97+
'message': real_sql,
98+
'category': 'query',
99+
})
100+
breadcrumbs.record(processor=processor)
101+
102+
86103
@once
87104
def install_sql_hook():
88105
"""If installed this causes Django's queries to be captured."""
@@ -99,19 +116,6 @@ def install_sql_hook():
99116
# trickery would have to look different but I can't be bothered.
100117
return
101118

102-
def record_sql(vendor, alias, start, duration, sql, params):
103-
def processor(data):
104-
real_sql, real_params = format_sql(sql, params)
105-
if real_params:
106-
real_sql = real_sql % tuple(real_params)
107-
# maybe category to 'django.%s.%s' % (vendor, alias or
108-
# 'default') ?
109-
data.update({
110-
'message': real_sql,
111-
'category': 'query',
112-
})
113-
breadcrumbs.record(processor=processor)
114-
115119
def record_many_sql(vendor, alias, start, sql, param_list):
116120
duration = time.time() - start
117121
for params in param_list:

tests/contrib/django/tests.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
from raven.base import Client
3131
from raven.utils.compat import StringIO, iteritems, PY2, string_types, text_type
32-
from raven.contrib.django.client import DjangoClient
32+
from raven.contrib.django.client import DjangoClient, record_sql
3333
from raven.contrib.django.celery import CeleryClient
3434
from raven.contrib.django.handlers import SentryHandler
3535
from raven.contrib.django.models import (
@@ -919,3 +919,12 @@ def test_ignore_exceptions_with_module_match(self, exc_info, mock_send):
919919
self.client.ignore_exceptions.clear()
920920

921921
assert not mock_send.called
922+
923+
924+
class SQLHookTestCase(TestCase):
925+
def test_wrong_params(self):
926+
query = 'SELECT COUNT(*) FROM mytestmodel WHERE id = %s'
927+
args = ['foobar', 42]
928+
record_sql(None, None, None, None, query, args)
929+
crumbs = get_client().context.breadcrumbs.get_buffer()
930+
self.assertEqual(crumbs[-1]['message'], query)

0 commit comments

Comments
 (0)