Skip to content

Commit

Permalink
fix readable sql filter did not work with django 1.7
Browse files Browse the repository at this point in the history
  • Loading branch information
crccheck committed Oct 26, 2014
1 parent 097b908 commit 9fe7ec4
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
7 changes: 6 additions & 1 deletion project_runpy/heidi.py
Expand Up @@ -118,7 +118,12 @@ class ReadableSqlFilter(logging.Filter):
"""

def filter(self, record):
if record.sql[:6] != 'SELECT':
# Django 1.7 changed the way SQL got logged for some reason:
# https://code.djangoproject.com/ticket/17158
# https://github.com/django/django/commit/6605ac331a9e0
if 'SELECT' not in record.sql[:28]:
# WISHLIST what's the most performant way to see if 'SELECT' was
# used?
return True

# unfortunately, record.msg has already been rendered so we have to
Expand Down
17 changes: 15 additions & 2 deletions test_project_runpy.py
Expand Up @@ -16,6 +16,9 @@
)


VERY_LONG_STRING = u'*' * 512


class TestTimEnv(TestCase):
def setUp(self):
self.key = '_tim_test'
Expand Down Expand Up @@ -148,21 +151,31 @@ def test_filter_formats_select_from(self):
logging_filter = ReadableSqlFilter()
record = type('mock_record', (object, ), {
'sql': u'SELECT foo',
'msg': u'(yolo) SELECT {0} FROM moo'.format('*' * 512),
'msg': u'(yolo) SELECT {0} FROM moo'.format(VERY_LONG_STRING),
})
self.assertTrue(logging_filter.filter(record))
self.assertIn(u'SELECT ... FROM moo', record.msg)

def test_filter_formats_ignores_select_without_from(self):
logging_filter = ReadableSqlFilter()
original_msg = u'(yolo) SELECT {0} moo'.format('*' * 512)
original_msg = u'(yolo) SELECT {0} moo'.format(VERY_LONG_STRING)
record = type('mock_record', (object, ), {
'sql': u'SELECT foo',
'msg': original_msg,
})
self.assertTrue(logging_filter.filter(record))
self.assertEqual(original_msg, record.msg)

def test_filter_formats_select_from_dj17(self):
sql = u"""QUERY = "\n SELECT name, {0} FROM sqlite_master\n WHERE type in ('table', 'view') AND NOT name='sqlite_sequence'\n ORDER BY name" - PARAMS = ()""".format(VERY_LONG_STRING)
logging_filter = ReadableSqlFilter()
record = type('mock_record', (object, ), {
'sql': sql,
'msg': u'(yolo) {0}'.format(sql),
})
self.assertTrue(logging_filter.filter(record))
self.assertNotIn(VERY_LONG_STRING, record.msg)


if __name__ == '__main__':
unittest.main()

0 comments on commit 9fe7ec4

Please sign in to comment.