client.py
87 lines
| 3.0 KiB
| text/x-python
|
PythonLexer
MinRK
|
r10298 | """A client for in-process kernels.""" | ||
MinRK
|
r10297 | |||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2012 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r10298 | # IPython imports | ||
from IPython.utils.traitlets import Type, Instance | ||||
from IPython.kernel.clientabc import KernelClientABC | ||||
from IPython.kernel.client import KernelClient | ||||
MinRK
|
r10297 | |||
MinRK
|
r10298 | # Local imports | ||
from .channels import ( | ||||
InProcessShellChannel, | ||||
InProcessIOPubChannel, | ||||
InProcessHBChannel, | ||||
InProcessStdInChannel, | ||||
MinRK
|
r10297 | |||
MinRK
|
r10298 | ) | ||
MinRK
|
r10297 | |||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r10298 | # Main kernel Client class | ||
MinRK
|
r10297 | #----------------------------------------------------------------------------- | ||
MinRK
|
r10298 | class InProcessKernelClient(KernelClient): | ||
"""A client for an in-process kernel. | ||||
MinRK
|
r10297 | |||
This class implements the interface of | ||||
MinRK
|
r10298 | `IPython.kernel.clientabc.KernelClientABC` and allows | ||
MinRK
|
r10297 | (asynchronous) frontends to be used seamlessly with an in-process kernel. | ||
MinRK
|
r10298 | See `IPython.kernel.client.KernelClient` for docstrings. | ||
MinRK
|
r10297 | """ | ||
# The classes to use for the various channels. | ||||
shell_channel_class = Type(InProcessShellChannel) | ||||
iopub_channel_class = Type(InProcessIOPubChannel) | ||||
stdin_channel_class = Type(InProcessStdInChannel) | ||||
hb_channel_class = Type(InProcessHBChannel) | ||||
Thomas Kluyver
|
r17095 | kernel = Instance('IPython.kernel.inprocess.ipkernel.InProcessKernel') | ||
MinRK
|
r10297 | |||
#-------------------------------------------------------------------------- | ||||
MinRK
|
r10298 | # Channel management methods | ||
MinRK
|
r10297 | #-------------------------------------------------------------------------- | ||
MinRK
|
r10298 | def start_channels(self, *args, **kwargs): | ||
super(InProcessKernelClient, self).start_channels(self) | ||||
self.kernel.frontends.append(self) | ||||
MinRK
|
r10297 | |||
@property | ||||
def shell_channel(self): | ||||
if self._shell_channel is None: | ||||
self._shell_channel = self.shell_channel_class(self) | ||||
return self._shell_channel | ||||
@property | ||||
def iopub_channel(self): | ||||
if self._iopub_channel is None: | ||||
self._iopub_channel = self.iopub_channel_class(self) | ||||
return self._iopub_channel | ||||
@property | ||||
def stdin_channel(self): | ||||
if self._stdin_channel is None: | ||||
self._stdin_channel = self.stdin_channel_class(self) | ||||
return self._stdin_channel | ||||
@property | ||||
def hb_channel(self): | ||||
if self._hb_channel is None: | ||||
self._hb_channel = self.hb_channel_class(self) | ||||
return self._hb_channel | ||||
#----------------------------------------------------------------------------- | ||||
# ABC Registration | ||||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r10298 | KernelClientABC.register(InProcessKernelClient) | ||