forked from ipython/ipython
-
Notifications
You must be signed in to change notification settings - Fork 1
/
client.py
96 lines (69 loc) · 2.81 KB
/
client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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
from IPython.kernel.task import MapTask, StringTask
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()