diff --git a/IPython/parallel/client/client.py b/IPython/parallel/client/client.py index 466de91..7770087 100644 --- a/IPython/parallel/client/client.py +++ b/IPython/parallel/client/client.py @@ -91,39 +91,39 @@ class ExecuteReply(object): def __repr__(self): pyout = self.metadata['pyout'] or {} - text_out = pyout.get('text/plain', '') + text_out = pyout.get('data', {}).get('text/plain', '') if len(text_out) > 32: text_out = text_out[:29] + '...' return "" % (self.execution_count, text_out) def _repr_html_(self): - pyout = self.metadata['pyout'] or {} - return pyout.get("text/html") + pyout = self.metadata['pyout'] or {'data':{}} + return pyout['data'].get("text/html") def _repr_latex_(self): - pyout = self.metadata['pyout'] or {} - return pyout.get("text/latex") + pyout = self.metadata['pyout'] or {'data':{}} + return pyout['data'].get("text/latex") def _repr_json_(self): - pyout = self.metadata['pyout'] or {} - return pyout.get("application/json") + pyout = self.metadata['pyout'] or {'data':{}} + return pyout['data'].get("application/json") def _repr_javascript_(self): - pyout = self.metadata['pyout'] or {} - return pyout.get("application/javascript") + pyout = self.metadata['pyout'] or {'data':{}} + return pyout['data'].get("application/javascript") def _repr_png_(self): - pyout = self.metadata['pyout'] or {} - return pyout.get("image/png") + pyout = self.metadata['pyout'] or {'data':{}} + return pyout['data'].get("image/png") def _repr_jpeg_(self): - pyout = self.metadata['pyout'] or {} - return pyout.get("image/jpeg") + pyout = self.metadata['pyout'] or {'data':{}} + return pyout['data'].get("image/jpeg") def _repr_svg_(self): - pyout = self.metadata['pyout'] or {} - return pyout.get("image/svg+xml") + pyout = self.metadata['pyout'] or {'data':{}} + return pyout['data'].get("image/svg+xml") class Metadata(dict): @@ -834,9 +834,9 @@ class Client(HasTraits): elif msg_type == 'pyin': md.update({'pyin' : content['code']}) elif msg_type == 'display_data': - md['outputs'].append(content.get('data')) + md['outputs'].append(content) elif msg_type == 'pyout': - md['pyout'] = content.get('data') + md['pyout'] = content else: # unhandled msg_type (status, etc.) pass diff --git a/IPython/parallel/tests/test_view.py b/IPython/parallel/tests/test_view.py index 965da8c..6c1a7a0 100644 --- a/IPython/parallel/tests/test_view.py +++ b/IPython/parallel/tests/test_view.py @@ -593,7 +593,7 @@ class TestView(ClusterTestCase, ParametricTestCase): er = ar.get() self._wait_for(lambda : bool(er.pyout)) self.assertEquals(str(er), "" % er.execution_count) - self.assertEquals(er.pyout['text/plain'], '5') + self.assertEquals(er.pyout['data']['text/plain'], '5') def test_execute_reply_stdout(self): e0 = self.client[self.client.ids[0]] @@ -610,7 +610,8 @@ class TestView(ClusterTestCase, ParametricTestCase): self._wait_for(lambda : all(ar.pyout)) expected = [{'text/plain' : '5'}] * len(view) - self.assertEquals(ar.pyout, expected) + mimes = [ out['data'] for out in ar.pyout ] + self.assertEquals(mimes, expected) def test_execute_silent(self): """execute does not trigger pyout with silent=True""" @@ -645,9 +646,10 @@ class TestView(ClusterTestCase, ParametricTestCase): ar = view.execute("[ display(i) for i in range(5) ]", block=True) self._wait_for(lambda : all(len(er.outputs) >= 5 for er in ar)) - outs = [ {u'text/plain' : unicode(i)} for i in range(5) ] - expected = [outs] * len(view) - self.assertEquals(ar.outputs, expected) + expected = [ {u'text/plain' : unicode(j)} for j in range(5) ] + for outputs in ar.outputs: + mimes = [ out['data'] for out in outputs ] + self.assertEquals(mimes, expected) def test_apply_displaypub(self): """apply tracks display_pub output""" @@ -661,9 +663,10 @@ class TestView(ClusterTestCase, ParametricTestCase): ar = view.apply_async(publish) ar.get(5) self._wait_for(lambda : all(len(out) >= 5 for out in ar.outputs)) - outs = [ {u'text/plain' : unicode(j)} for j in range(5) ] - expected = [outs] * len(view) - self.assertEquals(ar.outputs, expected) + expected = [ {u'text/plain' : unicode(j)} for j in range(5) ] + for outputs in ar.outputs: + mimes = [ out['data'] for out in outputs ] + self.assertEquals(mimes, expected) def test_execute_raises(self): """exceptions in execute requests raise appropriately""" @@ -672,7 +675,7 @@ class TestView(ClusterTestCase, ParametricTestCase): self.assertRaisesRemote(ZeroDivisionError, ar.get, 2) @dec.skipif_not_matplotlib - def test_amagic_pylab(self): + def test_magic_pylab(self): """%pylab works on engines""" view = self.client[-1] ar = view.execute("%pylab inline") @@ -684,6 +687,8 @@ class TestView(ClusterTestCase, ParametricTestCase): self._wait_for(lambda : all(ar.outputs)) self.assertEquals(len(reply.outputs), 1) output = reply.outputs[0] - self.assertTrue("image/png" in output) + self.assertTrue("data" in output) + data = output['data'] + self.assertTrue("image/png" in data)