@@ -25,13 +25,16 @@ def check_django_compatability():
25
25
)
26
26
27
27
28
- class CollectionDebugWrapper :
29
- def __init__ (self , collection , db ):
28
+ class OperationDebugWrapper :
29
+ def __init__ (self , db , collection = None ):
30
30
self .collection = collection
31
31
self .db = db
32
+ use_collection = collection is not None
33
+ self .collection_name = f"{ collection .name } ." if use_collection else ""
34
+ self .wrapped = self .collection if use_collection else self .db .database
32
35
33
36
def __getattr__ (self , attr ):
34
- return getattr (self .collection , attr )
37
+ return getattr (self .wrapped , attr )
35
38
36
39
def profile_call (self , func , args = (), kwargs = None ):
37
40
start = time .monotonic ()
@@ -44,7 +47,7 @@ def log(self, op, duration, args, kwargs=None):
44
47
# added to this logging.
45
48
msg = "(%.3f) %s"
46
49
args = ", " .join (str (arg ) for arg in args )
47
- operation = f"{ self .collection . name } . { op } ({ args } )"
50
+ operation = f"db. { self .collection_name } { op } ({ args } )"
48
51
if len (settings .DATABASES ) > 1 :
49
52
msg += f"; alias={ self .db .alias } "
50
53
self .db .queries_log .append (
@@ -66,7 +69,7 @@ def log(self, op, duration, args, kwargs=None):
66
69
67
70
def logging_wrapper (method ):
68
71
def wrapper (self , * args , ** kwargs ):
69
- func = getattr (self .collection , method )
72
+ func = getattr (self .wrapped , method )
70
73
# Collection.insert_many() mutates args (the documents) by adding
71
74
# _id. deepcopy() to avoid logging that version.
72
75
original_args = copy .deepcopy (args )
@@ -78,6 +81,7 @@ def wrapper(self, *args, **kwargs):
78
81
79
82
# These are the operations that this backend uses.
80
83
aggregate = logging_wrapper ("aggregate" )
84
+ create_collection = logging_wrapper ("create_collection" )
81
85
drop = logging_wrapper ("drop" )
82
86
insert_many = logging_wrapper ("insert_many" )
83
87
delete_many = logging_wrapper ("delete_many" )
0 commit comments