blocking.py
58 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
MinRK
|
r10298 | """ Implements a fully blocking kernel client. | ||
epatters
|
r8408 | |||
Useful for test suites and blocking terminal interfaces. | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2012 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING.txt, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r10298 | # IPython imports | ||
epatters
|
r8482 | from IPython.utils.io import raw_print | ||
epatters
|
r8408 | from IPython.utils.traitlets import Type | ||
MinRK
|
r10298 | from IPython.kernel.blocking.channels import BlockingChannelMixin | ||
epatters
|
r8408 | |||
MinRK
|
r10298 | # Local imports | ||
from .channels import ( | ||||
InProcessShellChannel, | ||||
InProcessIOPubChannel, | ||||
InProcessStdInChannel, | ||||
) | ||||
from .client import InProcessKernelClient | ||||
epatters
|
r8408 | |||
#----------------------------------------------------------------------------- | ||||
# Blocking kernel manager | ||||
#----------------------------------------------------------------------------- | ||||
Brian Granger
|
r9120 | class BlockingInProcessShellChannel(BlockingChannelMixin, InProcessShellChannel): | ||
epatters
|
r8408 | pass | ||
Brian Granger
|
r9120 | class BlockingInProcessIOPubChannel(BlockingChannelMixin, InProcessIOPubChannel): | ||
epatters
|
r8408 | pass | ||
Brian Granger
|
r9120 | class BlockingInProcessStdInChannel(BlockingChannelMixin, InProcessStdInChannel): | ||
MinRK
|
r10298 | |||
epatters
|
r8482 | def call_handlers(self, msg): | ||
""" Overridden for the in-process channel. | ||||
This methods simply calls raw_input directly. | ||||
""" | ||||
msg_type = msg['header']['msg_type'] | ||||
if msg_type == 'input_request': | ||||
MinRK
|
r10298 | _raw_input = self.client.kernel._sys_raw_input | ||
epatters
|
r8482 | prompt = msg['content']['prompt'] | ||
raw_print(prompt, end='') | ||||
Pietro Berkes
|
r8940 | self.input(_raw_input()) | ||
epatters
|
r8408 | |||
MinRK
|
r10298 | class BlockingInProcessKernelClient(InProcessKernelClient): | ||
epatters
|
r8408 | |||
# The classes to use for the various channels. | ||||
Brian Granger
|
r9120 | shell_channel_class = Type(BlockingInProcessShellChannel) | ||
iopub_channel_class = Type(BlockingInProcessIOPubChannel) | ||||
stdin_channel_class = Type(BlockingInProcessStdInChannel) | ||||