16
16
17
17
import debug_toolbar .panels .sql .tracking as sql_tracking
18
18
from debug_toolbar .panels .sql import SQLPanel
19
+ from debug_toolbar .models import HistoryEntry
19
20
20
21
try :
21
22
import psycopg
@@ -33,6 +34,20 @@ def sql_call(*, use_iterator=False):
33
34
return list (qs )
34
35
35
36
37
+ def sql_call_ddt (* , use_iterator = False ):
38
+ qs = HistoryEntry .objects .all ()
39
+ if use_iterator :
40
+ qs = qs .iterator ()
41
+ return list (qs )
42
+
43
+
44
+ async def async_sql_call_ddt (* , use_iterator = False ):
45
+ qs = HistoryEntry .objects .all ()
46
+ if use_iterator :
47
+ qs = qs .iterator ()
48
+ return await sync_to_async (list )(qs )
49
+
50
+
36
51
async def async_sql_call (* , use_iterator = False ):
37
52
qs = User .objects .all ()
38
53
if use_iterator :
@@ -104,6 +119,64 @@ async def test_recording_concurrent_async(self):
104
119
# ensure the stacktrace is populated
105
120
self .assertTrue (len (query ["stacktrace" ]) > 0 )
106
121
122
+ def test_ddt_models_tracking (self ):
123
+ self .assertEqual (len (self .panel ._queries ), 0 )
124
+
125
+ # enable ddt tracking
126
+ sql_tracking .allow_ddt_models_tracking .set (True )
127
+
128
+ sql_call_ddt ()
129
+
130
+ # ensure query was logged
131
+ self .assertEqual (len (self .panel ._queries ), 1 )
132
+ query = self .panel ._queries [0 ]
133
+ self .assertEqual (query ["alias" ], "default" )
134
+ self .assertTrue ("sql" in query )
135
+ self .assertTrue ("duration" in query )
136
+ self .assertTrue ("stacktrace" in query )
137
+
138
+ # ensure the stacktrace is populated
139
+ self .assertTrue (len (self .panel ._queries ), 0 )
140
+
141
+ async def test_ddt_models_tracking_async (self ):
142
+ self .assertEqual (len (self .panel ._queries ), 0 )
143
+
144
+ # enable ddt tracking
145
+ sql_tracking .allow_ddt_models_tracking .set (True )
146
+
147
+ await async_sql_call_ddt ()
148
+
149
+ # ensure query was logged
150
+ self .assertEqual (len (self .panel ._queries ), 1 )
151
+ query = self .panel ._queries [0 ]
152
+ self .assertEqual (query ["alias" ], "default" )
153
+ self .assertTrue ("sql" in query )
154
+ self .assertTrue ("duration" in query )
155
+ self .assertTrue ("stacktrace" in query )
156
+
157
+ # ensure the stacktrace is populated
158
+ self .assertTrue (len (self .panel ._queries ), 0 )
159
+
160
+ def test_ddt_models_untracking (self ):
161
+ self .assertEqual (len (self .panel ._queries ), 0 )
162
+
163
+ # disable ddt tracking
164
+ sql_tracking .allow_ddt_models_tracking .set (False )
165
+
166
+ sql_call_ddt ()
167
+
168
+ self .assertEqual (len (self .panel ._queries ), 0 )
169
+
170
+ async def test_ddt_models_untracking_async (self ):
171
+ self .assertEqual (len (self .panel ._queries ), 0 )
172
+
173
+ # enable ddt tracking
174
+ sql_tracking .allow_ddt_models_tracking .set (False )
175
+
176
+ await async_sql_call_ddt ()
177
+
178
+ self .assertEqual (len (self .panel ._queries ), 0 )
179
+
107
180
@unittest .skipUnless (
108
181
connection .vendor == "postgresql" , "Test valid only on PostgreSQL"
109
182
)
0 commit comments