Skip to content

Commit 25dc365

Browse files
committed
Add display-output handling in the streaming output callback
1 parent c9ddc59 commit 25dc365

File tree

3 files changed

+44
-37
lines changed

3 files changed

+44
-37
lines changed

ipyparallel/client/asyncresult.py

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ def iopub_streaming_output_callback(self, eid, msg):
147147
msg_content['text'], '[stderr:%i] ' % eid, file=sys.stderr
148148
)
149149

150+
if get_ipython() is None:
151+
return
152+
153+
if msg_type == 'display_data':
154+
msg_content = msg['content']
155+
_raw_text('[output:%i]' % eid)
156+
self._republish_displaypub(msg_content, eid)
157+
150158
@contextmanager
151159
def stream_output(self):
152160
"""
@@ -593,22 +601,23 @@ def _display_stream(self, text, prefix='', file=None):
593601
prefix = prefix + '\n'
594602
print("%s%s" % (prefix, text), file=file, end=end)
595603

596-
def _display_single_result(self, skip_stdout_stderr=False):
597-
if not skip_stdout_stderr:
604+
def _display_single_result(self, result_only=False):
605+
if not result_only:
598606
self._display_stream(self.stdout)
599607
self._display_stream(self.stderr, file=sys.stderr)
600608
if get_ipython() is None:
601609
# displaypub is meaningless outside IPython
602610
return
603611

604-
for output in self.outputs:
605-
self._republish_displaypub(output, self.engine_id)
612+
if not result_only:
613+
for output in self.outputs:
614+
self._republish_displaypub(output, self.engine_id)
606615

607616
if self.execute_result is not None:
608617
display(self.get())
609618

610619
@check_ready
611-
def display_outputs(self, groupby="type", skip_stdout_stderr=False):
620+
def display_outputs(self, groupby="type", result_only=False):
612621
"""republish the outputs of the computation
613622
614623
Parameters
@@ -635,14 +644,14 @@ def display_outputs(self, groupby="type", skip_stdout_stderr=False):
635644
several plots, and you would like to see all of the first
636645
plots together, then all of the second plots, and so on.
637646
638-
skip_stdout_stderr: boolean [default: False]
639-
Only display the display-outputs and execution result and skip stdout
640-
& stderr. Usually used when using streaming output
647+
result_only: boolean [default: False]
648+
Only display the execution result and skip stdout, stderr and
649+
display-outputs. Usually used when using streaming output
641650
since these outputs would have already been displayed.
642651
"""
643652
self.wait_for_output()
644653
if self._single_result:
645-
self._display_single_result(skip_stdout_stderr=skip_stdout_stderr)
654+
self._display_single_result(result_only=result_only)
646655
return
647656

648657
stdouts = self.stdout
@@ -657,25 +666,26 @@ def display_outputs(self, groupby="type", skip_stdout_stderr=False):
657666
for eid, stdout, stderr, outputs, r, execute_result in zip(
658667
targets, stdouts, stderrs, output_lists, results, execute_results
659668
):
660-
if not skip_stdout_stderr:
669+
if not result_only:
661670
self._display_stream(stdout, '[stdout:%i] ' % eid)
662671
self._display_stream(stderr, '[stderr:%i] ' % eid, file=sys.stderr)
663672

664673
if get_ipython() is None:
665674
# displaypub is meaningless outside IPython
666675
continue
667676

668-
if outputs or execute_result is not None:
677+
if (outputs and not result_only) or execute_result is not None:
669678
_raw_text('[output:%i]' % eid)
670679

671-
for output in outputs:
672-
self._republish_displaypub(output, eid)
680+
if not result_only:
681+
for output in outputs:
682+
self._republish_displaypub(output, eid)
673683

674684
if execute_result is not None:
675685
display(r)
676686

677687
elif groupby in ('type', 'order'):
678-
if not skip_stdout_stderr:
688+
if not result_only:
679689
# republish stdout:
680690
for eid, stdout in zip(targets, stdouts):
681691
self._display_stream(stdout, '[stdout:%i] ' % eid)
@@ -688,24 +698,25 @@ def display_outputs(self, groupby="type", skip_stdout_stderr=False):
688698
# displaypub is meaningless outside IPython
689699
return
690700

691-
if groupby == 'order':
692-
output_dict = dict(
693-
(eid, outputs) for eid, outputs in zip(targets, output_lists)
694-
)
695-
N = max(len(outputs) for outputs in output_lists)
696-
for i in range(N):
697-
for eid in targets:
698-
outputs = output_dict[eid]
699-
if len(outputs) >= N:
701+
if not result_only:
702+
if groupby == 'order':
703+
output_dict = dict(
704+
(eid, outputs) for eid, outputs in zip(targets, output_lists)
705+
)
706+
N = max(len(outputs) for outputs in output_lists)
707+
for i in range(N):
708+
for eid in targets:
709+
outputs = output_dict[eid]
710+
if len(outputs) >= N:
711+
_raw_text('[output:%i]' % eid)
712+
self._republish_displaypub(outputs[i], eid)
713+
else:
714+
# republish displaypub output
715+
for eid, outputs in zip(targets, output_lists):
716+
if outputs:
700717
_raw_text('[output:%i]' % eid)
701-
self._republish_displaypub(outputs[i], eid)
702-
else:
703-
# republish displaypub output
704-
for eid, outputs in zip(targets, output_lists):
705-
if outputs:
706-
_raw_text('[output:%i]' % eid)
707-
for output in outputs:
708-
self._republish_displaypub(output, eid)
718+
for output in outputs:
719+
self._republish_displaypub(output, eid)
709720

710721
# finally, add execute_result:
711722
for eid, r, execute_result in zip(targets, results, execute_results):

ipyparallel/client/magics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ def parallel_execute(
339339
result.wait_for_output()
340340
result.get()
341341
# Skip stdout/stderr if streaming stdout/stderr
342-
result.display_outputs(groupby, skip_stdout_stderr=bool(stream_output))
342+
result.display_outputs(groupby, result_only=bool(stream_output))
343343
else:
344344
# return AsyncResult only on non-blocking submission
345345
return result

ipyparallel/tests/test_magics.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,9 @@ def test_cellpx_stream(self):
233233
[
234234
r'\[stdout:\d+\] stdout',
235235
r'\[stdout:\d+\] stdout2',
236-
]
237-
* len(v)
238-
)
239-
expected.extend(
240-
[
241236
r'\[output:\d+\]',
242237
r'IPython\.core\.display\.HTML',
238+
r'\[output:\d+\]',
243239
r'IPython\.core\.display\.Math',
244240
]
245241
* len(v)

0 commit comments

Comments
 (0)