##// END OF EJS Templates
Handle some tricky Comm lifecycle issues...
Jason Grout -
Show More
@@ -42,7 +42,7 b' class Comm(LoggingConfigurable):'
42 _msg_callback = Any()
42 _msg_callback = Any()
43 _close_callback = Any()
43 _close_callback = Any()
44
44
45 _closed = Bool(False)
45 _closed = Bool(True)
46 comm_id = Unicode()
46 comm_id = Unicode()
47 def _comm_id_default(self):
47 def _comm_id_default(self):
48 return uuid.uuid4().hex
48 return uuid.uuid4().hex
@@ -56,6 +56,8 b' class Comm(LoggingConfigurable):'
56 if self.primary:
56 if self.primary:
57 # I am primary, open my peer.
57 # I am primary, open my peer.
58 self.open(data)
58 self.open(data)
59 else:
60 self._closed = False
59
61
60 def _publish_msg(self, msg_type, data=None, metadata=None, buffers=None, **keys):
62 def _publish_msg(self, msg_type, data=None, metadata=None, buffers=None, **keys):
61 """Helper for sending a comm message on IOPub"""
63 """Helper for sending a comm message on IOPub"""
@@ -86,24 +88,24 b' class Comm(LoggingConfigurable):'
86 "and a comm_manager attached to that kernel.")
88 "and a comm_manager attached to that kernel.")
87
89
88 comm_manager.register_comm(self)
90 comm_manager.register_comm(self)
89 self._closed = False
90 self._publish_msg('comm_open',
91 self._publish_msg('comm_open',
91 data=data, metadata=metadata, buffers=buffers,
92 data=data, metadata=metadata, buffers=buffers,
92 target_name=self.target_name,
93 target_name=self.target_name,
93 )
94 )
95 self._closed = False
94
96
95 def close(self, data=None, metadata=None, buffers=None):
97 def close(self, data=None, metadata=None, buffers=None):
96 """Close the frontend-side version of this comm"""
98 """Close the frontend-side version of this comm"""
97 if self._closed:
99 if self._closed:
98 # only close once
100 # only close once
99 return
101 return
102 self._closed = True
100 if data is None:
103 if data is None:
101 data = self._close_data
104 data = self._close_data
102 self._publish_msg('comm_close',
105 self._publish_msg('comm_close',
103 data=data, metadata=metadata, buffers=buffers,
106 data=data, metadata=metadata, buffers=buffers,
104 )
107 )
105 self.kernel.comm_manager.unregister_comm(self)
108 self.kernel.comm_manager.unregister_comm(self)
106 self._closed = True
107
109
108 def send(self, data=None, metadata=None, buffers=None):
110 def send(self, data=None, metadata=None, buffers=None):
109 """Send a message to the frontend-side version of this comm"""
111 """Send a message to the frontend-side version of this comm"""
General Comments 0
You need to be logged in to leave comments. Login now