"""Widget for interacting with an IPython parallel engine. Authors: * Brian Granger """ #----------------------------------------------------------------------------- # Copyright (C) 2008-2012 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 os import uuid from IPython.core.display import display, Javascript from IPython.core.displaypub import publish_pretty #----------------------------------------------------------------------------- # Code #----------------------------------------------------------------------------- import os, sys from IPython.core.display import Javascript from .widget import JavascriptWidget class DirectViewWidget(JavascriptWidget): def __init__(self, dv): self.dv = dv self.targets = self.dv.targets super(DirectViewWidget,self).__init__() def render(self): jscode = self.load_file(u'directview.js') data = { 'widget_var': self.widget_var, 'targets' : self.encode_json(self.targets) } jscode = jscode % data return jscode def execute(self, code, targets='all'): if targets == 'all': targets = self.targets ar = self.dv.execute(code,block=False,targets=targets) ar.wait() metadata = ar.metadata if isinstance(metadata, (list,tuple)): for md in metadata: self.publish_md(md) elif isinstance(metadata, dict): self.publish_md(metadata) def publish_md(self, md): if md['stdout']: publish_pretty(md['stdout'],{'engine_id':md['engine_id']}) if md['stderr']: publish_pretty(md['stderr'],{'engine_id':md['engine_id']}) if md['pyerr']: publish_pretty(md['pyerr'],{'engine_id':md['engine_id']}) def interact(dv): w = DirectViewWidget(dv) w.interact() return w