Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f19d51d

Browse files
committed
First semi-working draft of ipython based kernel.
1 parent bc99f5a commit f19d51d

3 files changed

Lines changed: 30 additions & 25 deletions

File tree

IPython/zmq/ipkernel.py

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,31 @@
2626
import zmq
2727

2828
# Local imports.
29+
from IPython.config.configurable import Configurable
30+
from IPython.core.iplib import InteractiveShell, InteractiveShellABC
2931
from IPython.external.argparse import ArgumentParser
30-
from session import Session, Message
32+
from IPython.utils.traitlets import Instance
33+
from IPython.zmq.session import Session, Message
3134
from completer import KernelCompleter
32-
from .iostream import OutStream
33-
from .displayhook import DisplayHook
34-
from .exitpoller import ExitPollerUnix, ExitPollerWindows
35+
from iostream import OutStream
36+
from displayhook import DisplayHook
37+
from exitpoller import ExitPollerUnix, ExitPollerWindows
3538

3639
#-----------------------------------------------------------------------------
3740
# Main kernel class
3841
#-----------------------------------------------------------------------------
3942

40-
class Kernel(object):
41-
42-
def __init__(self, session, reply_socket, pub_socket, req_socket):
43-
self.session = session
44-
self.reply_socket = reply_socket
45-
self.pub_socket = pub_socket
46-
self.req_socket = req_socket
47-
self.user_ns = {}
48-
self.history = []
49-
self.compiler = CommandCompiler()
50-
self.completer = KernelCompleter(self.user_ns)
43+
class Kernel(Configurable):
44+
45+
shell = Instance('IPython.core.iplib.InteractiveShellABC')
46+
session = Instance('IPython.zmq.session.Session')
47+
reply_socket = Instance('zmq.Socket')
48+
pub_socket = Instance('zmq.Socket')
49+
req_socket = Instance('zmq.Socket')
50+
51+
def __init__(self, **kwargs):
52+
super(Kernel, self).__init__(**kwargs)
53+
self.shell = InteractiveShell.instance()
5154

5255
# Build dict of handlers for message types
5356
msg_types = [ 'execute_request', 'complete_request',
@@ -89,8 +92,6 @@ def execute_request(self, ident, parent):
8992
self.pub_socket.send_json(pyin_msg)
9093

9194
try:
92-
comp_code = self.compiler(code, '<zmq-kernel>')
93-
9495
# Replace raw_input. Note that is not sufficient to replace
9596
# raw_input in the user namespace.
9697
raw_input = lambda prompt='': self.raw_input(prompt, ident, parent)
@@ -99,7 +100,8 @@ def execute_request(self, ident, parent):
99100
# Configure the display hook.
100101
sys.displayhook.set_parent(parent)
101102

102-
exec comp_code in self.user_ns, self.user_ns
103+
self.shell.runlines(code)
104+
# exec comp_code in self.user_ns, self.user_ns
103105
except:
104106
etype, evalue, tb = sys.exc_info()
105107
tb = traceback.format_exception(etype, evalue, tb)
@@ -155,7 +157,7 @@ def complete_request(self, ident, parent):
155157
print >> sys.__stdout__, completion_msg
156158

157159
def complete(self, msg):
158-
return self.completer.complete(msg.content.line, msg.content.text)
160+
return self.shell.complete(msg.content.line)
159161

160162
def object_info_request(self, ident, parent):
161163
context = parent['content']['oname'].split('.')
@@ -178,7 +180,7 @@ def symbol_from_context(self, context):
178180
return None, context
179181

180182
base_symbol_string = context[0]
181-
symbol = self.user_ns.get(base_symbol_string, None)
183+
symbol = self.shell.user_ns.get(base_symbol_string, None)
182184
if symbol is None:
183185
symbol = __builtin__.__dict__.get(base_symbol_string, None)
184186
if symbol is None:
@@ -270,7 +272,10 @@ def main():
270272
sys.displayhook = DisplayHook(session, pub_socket)
271273

272274
# Create the kernel.
273-
kernel = Kernel(session, reply_socket, pub_socket, req_socket)
275+
kernel = Kernel(
276+
session=session, reply_socket=reply_socket,
277+
pub_socket=pub_socket, req_socket=req_socket
278+
)
274279

275280
# Configure this kernel/process to die on parent termination, if necessary.
276281
if namespace.parent:

IPython/zmq/kernelmanager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
# Local imports.
3232
from IPython.utils.traitlets import HasTraits, Any, Instance, Type, TCPAddress
33-
from .ipkernel import launch_kernel
33+
from ipkernel import launch_kernel
3434
from session import Session
3535

3636
#-----------------------------------------------------------------------------

IPython/zmq/pykernel.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
from IPython.external.argparse import ArgumentParser
3030
from session import Session, Message
3131
from completer import KernelCompleter
32-
from .iostream import OutStream
33-
from .displayhook import DisplayHook
34-
from .exitpoller import ExitPollerUnix, ExitPollerWindows
32+
from iostream import OutStream
33+
from displayhook import DisplayHook
34+
from exitpoller import ExitPollerUnix, ExitPollerWindows
3535

3636
#-----------------------------------------------------------------------------
3737
# Main kernel class

0 commit comments

Comments
 (0)