Skip to content

Commit d803293

Browse files
committed
removing stdout proxy implementation
1 parent dd9cedf commit d803293

1 file changed

Lines changed: 6 additions & 54 deletions

File tree

wolframclient/utils/externalevaluate.py

Lines changed: 6 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -94,60 +94,18 @@ def execute_from_string(code, globals={}, **opts):
9494
return env[last_expr.name]
9595

9696

97-
class SideEffectSender(logging.Handler):
98-
def emit(self, record):
99-
if isinstance(sys.stdout, StdoutProxy):
100-
sys.stdout.send_side_effect(record.msg)
97+
class SocketWriter:
10198

99+
keep_listening = wl.ExternalEvaluate.Private.ExternalEvaluateKeepListening
102100

103-
class SocketWriter:
104101
def __init__(self, socket):
105102
self.socket = socket
106103

107104
def write(self, bytes):
108105
self.socket.send(zmq.Frame(bytes))
109106

110-
111-
class StdoutProxy:
112-
113-
keep_listening = wl.ExternalEvaluate.Private.ExternalEvaluateKeepListening
114-
115-
def __init__(self, stream):
116-
self.stream = stream
117-
self.clear()
118-
119-
def clear(self):
120-
self.current_line = []
121-
self.lines = []
122-
123-
def write(self, message):
124-
messages = force_text(message).split("\n")
125-
126-
if len(messages) == 1:
127-
self.current_line.extend(messages)
128-
else:
129-
self.current_line.append(messages.pop(0))
130-
rest = messages.pop(-1)
131-
132-
self.lines.extend(messages)
133-
self.flush()
134-
if rest:
135-
self.current_line.append(rest)
136-
137-
def flush(self):
138-
if self.current_line or self.lines:
139-
self.send_lines("".join(self.current_line), *self.lines)
140-
self.clear()
141-
142-
def send_lines(self, *lines):
143-
if len(lines) == 1:
144-
return self.send_side_effect(wl.Print(*lines))
145-
elif lines:
146-
return self.send_side_effect(wl.CompoundExpression(*map(wl.Print, lines)))
147-
148107
def send_side_effect(self, expr):
149-
self.stream.write(export(self.keep_listening(expr), **EXPORT_KWARGS))
150-
108+
self.write(export(self.keep_listening(expr), **EXPORT_KWARGS))
151109

152110
def evaluate_message(input=None, return_type=None, args=None, **opts):
153111

@@ -201,7 +159,6 @@ def start_zmq_instance(port=None, write_to_stdout=True, **opts):
201159

202160
def start_zmq_loop(
203161
message_limit=float("inf"),
204-
redirect_stdout=True,
205162
export_kwargs=EXPORT_KWARGS,
206163
evaluate_message=evaluate_message,
207164
exception_class=None,
@@ -210,22 +167,17 @@ def start_zmq_loop(
210167
):
211168

212169
handler = to_wl(exception_class=exception_class, **export_kwargs)(handle_message)
213-
214170
socket = start_zmq_instance(**opts)
215-
216171
stream = SocketWriter(socket)
217-
218172
messages = 0
219173

220-
if redirect_stdout:
221-
sys.stdout = StdoutProxy(stream)
174+
class SideEffectSender(logging.Handler):
175+
def emit(self, record):
176+
stream.send_side_effect(record.msg)
222177

223178
side_effect_logger.addHandler(SideEffectSender())
224179

225180
# now sit in a while loop, evaluating input
226181
while messages < message_limit:
227182
stream.write(handler(socket, evaluate_message=evaluate_message, consumer=consumer))
228183
messages += 1
229-
230-
if redirect_stdout:
231-
sys.stdout = sys.__stdout__

0 commit comments

Comments
 (0)