@@ -165,11 +165,17 @@ def destroy(self):
165
165
166
166
def clearup_closed (self ):
167
167
"""Clear up any closed Comms."""
168
+ for sock in self .web_sockets :
169
+ cb_print ('\t ' + repr (sock ) + repr (sock .is_open ()))
168
170
self .web_sockets = set ([socket for socket in self .web_sockets
169
171
if socket .is_open ()])
170
172
171
173
if len (self .web_sockets ) == 0 :
172
- self .manager .canvas .close_event ()
174
+ self .canvas .close_event ()
175
+
176
+ def remove_comm (self , comm_id ):
177
+ self .web_sockets = set ([socket for socket in self .web_sockets
178
+ if not socket .comm .comm_id == comm_id ])
173
179
174
180
175
181
class TimerTornado (TimerBase ):
@@ -219,13 +225,21 @@ def new_figure_manager(num, *args, **kwargs):
219
225
return new_figure_manager_given_figure (num , thisFig )
220
226
221
227
228
+ def cb_print (inval ):
229
+ with open ('/home/tcaswell/nbagg_dbg.txt' , 'a' ) as fout :
230
+ fout .write (repr (inval ))
231
+ fout .write ('\n ' )
232
+
233
+
222
234
def new_figure_manager_given_figure (num , figure ):
223
235
"""
224
236
Create a new figure manager instance for the given figure.
225
237
"""
226
238
from .._pylab_helpers import Gcf
239
+ cb_print ('created' )
227
240
228
241
def closer (event ):
242
+ cb_print ('hit closer' + str (num ))
229
243
Gcf .destroy (num )
230
244
231
245
canvas = FigureCanvasNbAgg (figure )
@@ -267,15 +281,29 @@ def __init__(self, manager):
267
281
self .comm .on_msg (self .on_message )
268
282
269
283
manager = self .manager
270
- self .comm .on_close (lambda close_message : manager .clearup_closed ())
284
+ self ._ext_close = False
285
+
286
+ def _on_close (close_message ):
287
+ cb_print ('comm close cb' + repr (close_message ))
288
+ self ._ext_close = True
289
+ manager .remove_comm (close_message ['content' ]['comm_id' ])
290
+ manager .clearup_closed ()
291
+ cb_print ('comm close cb done' )
292
+
293
+ self .comm .on_close (_on_close )
271
294
272
295
def is_open (self ):
273
- return not self .comm ._closed
296
+ return not ( self ._ext_close and self . comm ._closed )
274
297
275
298
def on_close (self ):
276
299
# When the socket is closed, deregister the websocket with
277
300
# the FigureManager.
278
- self .comm .close ()
301
+ cb_print ('TAC: in comm on close comm state: ' + repr (self .is_open ()))
302
+ try :
303
+ self .comm .close ()
304
+ except Exception as e :
305
+ cb_print ('EXCPT: ' + str (e ))
306
+ cb_print ('TAC: comm is closed: ' + repr (not self .is_open ()))
279
307
280
308
def send_json (self , content ):
281
309
self .comm .send ({'data' : json .dumps (content )})
@@ -296,8 +324,11 @@ def on_message(self, message):
296
324
297
325
# Every message has a "type" and a "figure_id".
298
326
message = json .loads (message ['content' ]['data' ])
327
+ cb_print (message ['type' ])
299
328
if message ['type' ] == 'closing' :
300
- self .on_close ()
329
+ cb_print (message )
330
+
331
+ # self.on_close()
301
332
elif message ['type' ] == 'supports_binary' :
302
333
self .supports_binary = message ['value' ]
303
334
else :
0 commit comments