@@ -25,13 +25,15 @@ def check_django_compatability():
2525 )
2626
2727
28- class CollectionDebugWrapper :
29- def __init__ (self , collection , db ):
28+ class OperationDebugWrapper :
29+ def __init__ (self , db , collection = None ):
3030 self .collection = collection
3131 self .db = db
3232
3333 def __getattr__ (self , attr ):
34- return getattr (self .collection , attr )
34+ if self .collection is not None :
35+ return getattr (self .collection , attr )
36+ return getattr (self .db , attr )
3537
3638 def profile_call (self , func , args = (), kwargs = None ):
3739 start = time .monotonic ()
@@ -44,7 +46,8 @@ def log(self, op, duration, args, kwargs=None):
4446 # added to this logging.
4547 msg = "(%.3f) %s"
4648 args = ", " .join (str (arg ) for arg in args )
47- operation = f"{ self .collection .name } .{ op } ({ args } )"
49+ collection_name = f"{ self .collection .name } ." if self .collection is not None else ""
50+ operation = f"db.{ collection_name } { op } ({ args } )"
4851 if len (settings .DATABASES ) > 1 :
4952 msg += f"; alias={ self .db .alias } "
5053 self .db .queries_log .append (
@@ -66,7 +69,10 @@ def log(self, op, duration, args, kwargs=None):
6669
6770 def logging_wrapper (method ):
6871 def wrapper (self , * args , ** kwargs ):
69- func = getattr (self .collection , method )
72+ if self .collection is not None :
73+ func = getattr (self .collection , method )
74+ else :
75+ func = getattr (self .db .database , method )
7076 # Collection.insert_many() mutates args (the documents) by adding
7177 # _id. deepcopy() to avoid logging that version.
7278 original_args = copy .deepcopy (args )
@@ -78,6 +84,7 @@ def wrapper(self, *args, **kwargs):
7884
7985 # These are the operations that this backend uses.
8086 aggregate = logging_wrapper ("aggregate" )
87+ create_collection = logging_wrapper ("create_collection" )
8188 drop = logging_wrapper ("drop" )
8289 insert_many = logging_wrapper ("insert_many" )
8390 delete_many = logging_wrapper ("delete_many" )
0 commit comments