client.py
95 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
Brian E Granger
|
r1234 | # encoding: utf-8 | |
"""This module contains blocking clients for the controller interfaces. | |||
Unlike the clients in `asyncclient.py`, the clients in this module are fully | |||
blocking. This means that methods on the clients return the actual results | |||
rather than a deferred to the result. Also, we manage the Twisted reactor | |||
for you. This is done by running the reactor in a thread. | |||
The main classes in this module are: | |||
* MultiEngineClient | |||
* TaskClient | |||
* Task | |||
* CompositeError | |||
""" | |||
__docformat__ = "restructuredtext en" | |||
#------------------------------------------------------------------------------- | |||
# Copyright (C) 2008 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 | |||
#------------------------------------------------------------------------------- | |||
import sys | |||
# from IPython.tools import growl | |||
# growl.start("IPython1 Client") | |||
from twisted.internet import reactor | |||
from IPython.kernel.clientconnector import ClientConnector | |||
from IPython.kernel.twistedutil import ReactorInThread | |||
from IPython.kernel.twistedutil import blockingCallFromThread | |||
# These enable various things | |||
from IPython.kernel import codeutil | |||
import IPython.kernel.magic | |||
# Other things that the user will need | |||
Brian E Granger
|
r1395 | from IPython.kernel.task import MapTask, StringTask | |
Brian E Granger
|
r1234 | from IPython.kernel.error import CompositeError | |
#------------------------------------------------------------------------------- | |||
# Code | |||
#------------------------------------------------------------------------------- | |||
_client_tub = ClientConnector() | |||
def get_multiengine_client(furl_or_file=''): | |||
"""Get the blocking MultiEngine client. | |||
:Parameters: | |||
furl_or_file : str | |||
A furl or a filename containing a furl. If empty, the | |||
default furl_file will be used | |||
:Returns: | |||
The connected MultiEngineClient instance | |||
""" | |||
client = blockingCallFromThread(_client_tub.get_multiengine_client, | |||
furl_or_file) | |||
return client.adapt_to_blocking_client() | |||
def get_task_client(furl_or_file=''): | |||
"""Get the blocking Task client. | |||
:Parameters: | |||
furl_or_file : str | |||
A furl or a filename containing a furl. If empty, the | |||
default furl_file will be used | |||
:Returns: | |||
The connected TaskClient instance | |||
""" | |||
client = blockingCallFromThread(_client_tub.get_task_client, | |||
furl_or_file) | |||
return client.adapt_to_blocking_client() | |||
MultiEngineClient = get_multiengine_client | |||
TaskClient = get_task_client | |||
# Now we start the reactor in a thread | |||
rit = ReactorInThread() | |||
rit.setDaemon(True) | |||
rit.start() |