@@ -73,20 +73,21 @@ class Handle:
73
73
"""Object returned by callback registration methods."""
74
74
75
75
__slots__ = ('_callback' , '_args' , '_cancelled' , '_loop' ,
76
- '_source_traceback' , '__weakref__' )
76
+ '_source_traceback' , '_repr' , ' __weakref__' )
77
77
78
78
def __init__ (self , callback , args , loop ):
79
79
assert not isinstance (callback , Handle ), 'A Handle is not a callback'
80
80
self ._loop = loop
81
81
self ._callback = callback
82
82
self ._args = args
83
83
self ._cancelled = False
84
+ self ._repr = None
84
85
if self ._loop .get_debug ():
85
86
self ._source_traceback = traceback .extract_stack (sys ._getframe (1 ))
86
87
else :
87
88
self ._source_traceback = None
88
89
89
- def __repr__ (self ):
90
+ def _repr_info (self ):
90
91
info = [self .__class__ .__name__ ]
91
92
if self ._cancelled :
92
93
info .append ('cancelled' )
@@ -95,10 +96,21 @@ def __repr__(self):
95
96
if self ._source_traceback :
96
97
frame = self ._source_traceback [- 1 ]
97
98
info .append ('created at %s:%s' % (frame [0 ], frame [1 ]))
99
+ return info
100
+
101
+ def __repr__ (self ):
102
+ if self ._repr is not None :
103
+ return self ._repr
104
+ info = self ._repr_info ()
98
105
return '<%s>' % ' ' .join (info )
99
106
100
107
def cancel (self ):
101
108
self ._cancelled = True
109
+ if self ._loop .get_debug ():
110
+ # Keep a representation in debug mode to keep callback and
111
+ # parameters. For example, to log the warning "Executing <Handle
112
+ # ...> took 2.5 second"
113
+ self ._repr = repr (self )
102
114
self ._callback = None
103
115
self ._args = None
104
116
@@ -131,17 +143,11 @@ def __init__(self, when, callback, args, loop):
131
143
del self ._source_traceback [- 1 ]
132
144
self ._when = when
133
145
134
- def __repr__ (self ):
135
- info = []
136
- if self ._cancelled :
137
- info .append ('cancelled' )
138
- info .append ('when=%s' % self ._when )
139
- if self ._callback is not None :
140
- info .append (_format_callback (self ._callback , self ._args ))
141
- if self ._source_traceback :
142
- frame = self ._source_traceback [- 1 ]
143
- info .append ('created at %s:%s' % (frame [0 ], frame [1 ]))
144
- return '<%s %s>' % (self .__class__ .__name__ , ' ' .join (info ))
146
+ def _repr_info (self ):
147
+ info = super ()._repr_info ()
148
+ pos = 2 if self ._cancelled else 1
149
+ info .insert (pos , 'when=%s' % self ._when )
150
+ return info
145
151
146
152
def __hash__ (self ):
147
153
return hash (self ._when )
0 commit comments