@@ -38,6 +38,17 @@ class SignalDebugPanel(DebugPanel):
38
38
def nav_title (self ):
39
39
return _ ("Signals" )
40
40
41
+ def nav_subtitle (self ):
42
+ signals = self .get_stats ()['signals' ]
43
+ num_receivers = sum (len (s [2 ]) for s in signals )
44
+ num_signals = len (signals )
45
+ return '%d %s from %d %s' % (
46
+ num_receivers ,
47
+ (num_receivers == 1 ) and 'receiver' or 'receivers' ,
48
+ num_signals ,
49
+ (num_signals == 1 ) and 'signal' or 'signals' ,
50
+ )
51
+
41
52
def title (self ):
42
53
return _ ("Signals" )
43
54
@@ -60,10 +71,7 @@ def signals(self):
60
71
61
72
def process_response (self , request , response ):
62
73
signals = []
63
- keys = self .signals .keys ()
64
- keys .sort ()
65
- for name in keys :
66
- signal = self .signals [name ]
74
+ for name , signal in sorted (self .signals .items (), key = lambda x : x [0 ]):
67
75
if signal is None :
68
76
continue
69
77
receivers = []
@@ -72,12 +80,15 @@ def process_response(self, request, response):
72
80
receiver = receiver ()
73
81
if receiver is None :
74
82
continue
83
+
84
+ receiver = getattr (receiver , '__wraps__' , receiver )
85
+ receiver_name = getattr (receiver , '__name__' , str (receiver ))
75
86
if getattr (receiver , 'im_self' , None ) is not None :
76
- text = "method %s on %s object " % (receiver . __name__ , getattr (receiver .im_self , '__class__' , type ).__name__ )
87
+ text = "%s.%s " % (getattr (receiver .im_self , '__class__' , type ).__name__ , receiver_name )
77
88
elif getattr (receiver , 'im_class' , None ) is not None :
78
- text = "method %s on %s" % (receiver .__name__ , receiver . im_class .__name__ )
89
+ text = "%s. %s" % (receiver .im_class .__name__ , receiver_name )
79
90
else :
80
- text = "function %s" % getattr ( receiver , '__name__' , str ( receiver ))
91
+ text = "%s" % receiver_name
81
92
receivers .append (text )
82
93
signals .append ((name , signal , receivers ))
83
94
0 commit comments