Skip to content

Commit 7a9f914

Browse files
committed
Fix django middleware when multiple execute_wrappers are in use
Fixes #46
1 parent 6286633 commit 7a9f914

2 files changed

Lines changed: 23 additions & 4 deletions

File tree

python/sqlcommenter-python/google/cloud/sqlcommenter/django/middleware.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def __call__(self, execute, sql, params, many, context):
8888
sql += sql_comment
8989

9090
# Add the query to the query log if debugging.
91-
if execute.__self__.__class__ is CursorDebugWrapper:
92-
execute.__self__.db.queries_log.append(sql)
91+
if context['cursor'].__class__ is CursorDebugWrapper:
92+
context['connection'].queries_log.append(sql)
9393

9494
return execute(sql, params, many, context)

python/sqlcommenter-python/tests/django/tests.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,26 @@
1717
import django
1818
from django.db import connection
1919
from django.http import HttpRequest
20-
from django.test import TestCase, override_settings
20+
from django.test import TestCase, override_settings, modify_settings
2121
from django.urls import resolve, reverse
22-
from google.cloud.sqlcommenter.django.middleware import SqlCommenter
22+
from google.cloud.sqlcommenter.django.middleware import SqlCommenter, QueryWrapper
2323

2424
from ..compat import mock
2525
from ..opencensus_mock import mock_opencensus_tracer
2626
from ..opentelemetry_mock import mock_opentelemetry_context
2727
from . import views
2828

29+
# Test middleware to call execute_wrapper again
30+
# Adding the middleware twice in modify_settings
31+
# doesn't work. The middleware is only used once
32+
# if used in modify_settings
33+
class TestMiddleware:
34+
def __init__(self, get_response):
35+
self.get_response = get_response
36+
37+
def __call__(self, request):
38+
with connection.execute_wrapper(QueryWrapper(request)):
39+
return self.get_response(request)
2940

3041
# Query log only active if DEBUG=True.
3142
@override_settings(DEBUG=True)
@@ -98,6 +109,14 @@ def test_db_driver_disabled(self):
98109
query = self.get_query()
99110
self.assertNotIn('db_driver=', query)
100111

112+
@modify_settings(MIDDLEWARE={
113+
'prepend': 'tests.django.tests.TestMiddleware',
114+
'append': 'google.cloud.sqlcommenter.django.middleware.SqlCommenter',
115+
})
116+
def test_multi_execute_wrappers(self):
117+
# Raises error if execute_wrappers fails
118+
self.client.get('/')
119+
101120
def test_opencensus_disabled(self):
102121
"""Opencensus fields are omitted by default."""
103122
with mock_opencensus_tracer():

0 commit comments

Comments
 (0)