Skip to content

Commit 5dc4c7d

Browse files
committed
Add comm_info_[request/reply] messages
1 parent c5162fb commit 5dc4c7d

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

ipykernel/inprocess/client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ def kernel_info(self):
128128
self._dispatch_to_kernel(msg)
129129
return msg['header']['msg_id']
130130

131+
def comm_info(self):
132+
"""Request a dictionary of valid comms and their targets."""
133+
msg = self.session.msg('comm_info_request')
134+
self._dispatch_to_kernel(msg)
135+
return msg['header']['msg_id']
136+
131137
def input(self, string):
132138
if self.kernel is None:
133139
raise RuntimeError('Cannot send input reply. No kernel exists.')

ipykernel/kernelbase.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def __init__(self, **kwargs):
119119
# Build dict of handlers for message types
120120
msg_types = [ 'execute_request', 'complete_request',
121121
'inspect_request', 'history_request',
122-
'kernel_info_request',
122+
'comm_info_request', 'kernel_info_request',
123123
'connect_request', 'shutdown_request',
124124
'apply_request', 'is_complete_request',
125125
]
@@ -427,7 +427,7 @@ def inspect_request(self, stream, ident, parent):
427427
def do_inspect(self, code, cursor_pos, detail_level=0):
428428
"""Override in subclasses to allow introspection.
429429
"""
430-
return {'status': 'ok', 'data':{}, 'metadata':{}, 'found':False}
430+
return {'status': 'ok', 'data': {}, 'metadata': {}, 'found': False}
431431

432432
def history_request(self, stream, ident, parent):
433433
content = parent['content']
@@ -470,6 +470,19 @@ def kernel_info_request(self, stream, ident, parent):
470470
self.kernel_info, parent, ident)
471471
self.log.debug("%s", msg)
472472

473+
def comm_info_request(self, stream, ident, parent):
474+
content = parent['content']
475+
476+
# Should this be moved to ipkernel?
477+
if hasattr(self, 'comm_manager'):
478+
comms = {k: v.target_name for (k, v) in self.comm_manager.comms.items()}
479+
else:
480+
comms = {}
481+
reply_content = dict(comms=comms)
482+
msg = self.session.send(stream, 'comm_info_reply',
483+
reply_content, parent, ident)
484+
self.log.debug("%s", msg)
485+
473486
def shutdown_request(self, stream, ident, parent):
474487
content = self.do_shutdown(parent['content']['restart'])
475488
self.session.send(stream, u'shutdown_reply', content, parent, ident=ident)

ipykernel/tests/test_message_spec.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ def check(self, d):
163163
Reference.check(self, d)
164164
LanguageInfo().check(d['language_info'])
165165

166+
class CommInfoReply(Reference):
167+
comms = Dict()
166168

167169
class IsCompleteReply(Reference):
168170
status = Enum((u'complete', u'incomplete', u'invalid', u'unknown'), default_value=u'complete')
@@ -198,6 +200,7 @@ class DisplayData(MimeBundle):
198200
class ExecuteResult(MimeBundle):
199201
execution_count = Integer()
200202

203+
201204
class HistoryReply(Reference):
202205
history = List(List())
203206

@@ -208,6 +211,7 @@ class HistoryReply(Reference):
208211
'status' : Status(),
209212
'complete_reply' : CompleteReply(),
210213
'kernel_info_reply': KernelInfoReply(),
214+
'comm_info_reply': CommInfoReply(),
211215
'is_complete_reply': IsCompleteReply(),
212216
'execute_input' : ExecuteInput(),
213217
'execute_result' : ExecuteResult(),
@@ -419,6 +423,14 @@ def test_kernel_info_request():
419423
validate_message(reply, 'kernel_info_reply', msg_id)
420424

421425

426+
def test_comm_info_request():
427+
flush_channels()
428+
429+
msg_id = KC.comm_info()
430+
reply = KC.get_shell_msg(timeout=TIMEOUT)
431+
validate_message(reply, 'comm_info_reply', msg_id)
432+
433+
422434
def test_single_payload():
423435
flush_channels()
424436
msg_id, reply = execute(code="for i in range(3):\n"+

0 commit comments

Comments
 (0)