本文整理汇总了Python中IPython.kernel.comm.Comm.send方法的典型用法代码示例。如果您正苦于以下问题:Python Comm.send方法的具体用法?Python Comm.send怎么用?Python Comm.send使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IPython.kernel.comm.Comm
的用法示例。
在下文中一共展示了Comm.send方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: CommSocket
# 需要导入模块: from IPython.kernel.comm import Comm [as 别名]
# 或者: from IPython.kernel.comm.Comm import send [as 别名]
class CommSocket(object):
"""
Manages the Comm connection between IPython and the browser (client).
Comms are 2 way, with the CommSocket being able to publish a message
via the send_json method, and handle a message with on_message. On the
JS side figure.send_message and figure.ws.onmessage do the sending and
receiving respectively.
"""
def __init__(self, manager):
self.supports_binary = None
self.manager = manager
self.uuid = str(uuid())
display(HTML("<div id=%r></div>" % self.uuid))
try:
self.comm = Comm('matplotlib', data={'id': self.uuid})
except AttributeError:
raise RuntimeError('Unable to create an IPython notebook Comm '
'instance. Are you in the IPython notebook?')
self.comm.on_msg(self.on_message)
def on_close(self):
# When the socket is closed, deregister the websocket with
# the FigureManager.
if self.comm in self.manager.web_sockets:
self.manager.remove_web_socket(self)
self.comm.close()
def send_json(self, content):
self.comm.send({'data': json.dumps(content)})
def send_binary(self, blob):
# The comm is ascii, so we always send the image in base64
# encoded data URL form.
data_uri = "data:image/png;base64,{0}".format(b64encode(blob))
self.comm.send({'data': data_uri})
def on_message(self, message):
# The 'supports_binary' message is relevant to the
# websocket itself. The other messages get passed along
# to matplotlib as-is.
# Every message has a "type" and a "figure_id".
message = json.loads(message['content']['data'])
if message['type'] == 'closing':
self.on_close()
elif message['type'] == 'supports_binary':
self.supports_binary = message['value']
else:
self.manager.handle_json(message)
示例2: Widget
# 需要导入模块: from IPython.kernel.comm import Comm [as 别名]
# 或者: from IPython.kernel.comm.Comm import send [as 别名]
class Widget(LoggingConfigurable):
#-------------------------------------------------------------------------
# Class attributes
#-------------------------------------------------------------------------
_widget_construction_callback = None
widgets = {}
widget_types = {}
@staticmethod
def on_widget_constructed(callback):
"""Registers a callback to be called when a widget is constructed.
The callback must have the following signature:
callback(widget)"""
Widget._widget_construction_callback = callback
@staticmethod
def _call_widget_constructed(widget):
"""Static method, called when a widget is constructed."""
if Widget._widget_construction_callback is not None and callable(Widget._widget_construction_callback):
Widget._widget_construction_callback(widget)
@staticmethod
def handle_comm_opened(comm, msg):
"""Static method, called when a widget is constructed."""
widget_class = import_item(msg['content']['data']['widget_class'])
widget = widget_class(comm=comm)
#-------------------------------------------------------------------------
# Traits
#-------------------------------------------------------------------------
_model_module = Unicode(None, allow_none=True, help="""A requirejs module name
in which to find _model_name. If empty, look in the global registry.""")
_model_name = Unicode('WidgetModel', help="""Name of the backbone model
registered in the front-end to create and sync this widget with.""")
_view_module = Unicode(help="""A requirejs module in which to find _view_name.
If empty, look in the global registry.""", sync=True)
_view_name = Unicode(None, allow_none=True, help="""Default view registered in the front-end
to use to represent the widget.""", sync=True)
comm = Instance('IPython.kernel.comm.Comm')
msg_throttle = Int(3, sync=True, help="""Maximum number of msgs the
front-end can send before receiving an idle msg from the back-end.""")
version = Int(0, sync=True, help="""Widget's version""")
keys = List()
def _keys_default(self):
return [name for name in self.traits(sync=True)]
_property_lock = Tuple((None, None))
_send_state_lock = Int(0)
_states_to_send = Set(allow_none=False)
_display_callbacks = Instance(CallbackDispatcher, ())
_msg_callbacks = Instance(CallbackDispatcher, ())
#-------------------------------------------------------------------------
# (Con/de)structor
#-------------------------------------------------------------------------
def __init__(self, **kwargs):
"""Public constructor"""
self._model_id = kwargs.pop('model_id', None)
super(Widget, self).__init__(**kwargs)
Widget._call_widget_constructed(self)
self.open()
def __del__(self):
"""Object disposal"""
self.close()
#-------------------------------------------------------------------------
# Properties
#-------------------------------------------------------------------------
def open(self):
"""Open a comm to the frontend if one isn't already open."""
if self.comm is None:
args = dict(target_name='ipython.widget',
data={'model_name': self._model_name,
'model_module': self._model_module})
if self._model_id is not None:
args['comm_id'] = self._model_id
self.comm = Comm(**args)
def _comm_changed(self, name, new):
"""Called when the comm is changed."""
if new is None:
return
self._model_id = self.model_id
self.comm.on_msg(self._handle_msg)
Widget.widgets[self.model_id] = self
# first update
self.send_state()
@property
def model_id(self):
"""Gets the model id of this widget.
#.........这里部分代码省略.........
示例3: BrowserContext
# 需要导入模块: from IPython.kernel.comm import Comm [as 别名]
# 或者: from IPython.kernel.comm.Comm import send [as 别名]
class BrowserContext(object):
"""Represents an in-browser context."""
def __init__(self):
"""Constructor"""
self._calls = 0
self._callbacks = {}
# Push the Javascript to the front-end.
with open(os.path.join(os.path.split(__file__)[0], 'backend_context.js'), 'r') as f:
display(Javascript(data=f.read()))
# Open communication with the front-end.
self._comm = Comm(target_name='BrowserContext')
self._comm.on_msg(self._on_msg)
def _on_msg(self, msg):
"""Handle messages from the front-end"""
data = msg['content']['data']
# If the message is a call invoke, run the function and send
# the results.
if 'callback' in data:
guid = data['callback']
callback = callback_registry[guid]
args = data['arguments']
args = [self.deserialize(a) for a in args]
index = data['index']
results = callback(*args)
return self.serialize(self._send('return', index=index, results=results))
# The message is not a call invoke, it must be an object
# that is a response to a Python request.
else:
index = data['index']
immutable = data['immutable']
value = data['value']
if index in self._callbacks:
self._callbacks[index].resolve({
'immutable': immutable,
'value': value
})
del self._callbacks[index]
def serialize(self, obj):
"""Serialize an object for sending to the front-end."""
if hasattr(obj, '_jsid'):
return {'immutable': False, 'value': obj._jsid}
else:
obj_json = {'immutable': True}
try:
json.dumps(obj)
obj_json['value'] = obj
except:
pass
if callable(obj):
guid = str(uuid.uuid4())
callback_registry[guid] = obj
obj_json['callback'] = guid
return obj_json
def deserialize(self, obj):
"""Deserialize an object from the front-end."""
if obj['immutable']:
return obj['value']
else:
guid = obj['value']
if not guid in object_registry:
instance = JSObject(self, guid)
object_registry[guid] = instance
return object_registry[guid]
# Message types
def getattr(self, parent, child):
return self._send('getattr', parent=parent, child=child)
def setattr(self, parent, child, value):
return self._send('setattr', parent=parent, child=child, value=value)
def apply(self, parent, function, *pargs):
return self._send('apply', parent=parent, function=function, args=pargs)
def _send(self, method, **parameters):
"""Sends a message to the front-end and returns a promise."""
msg = {
'index': self._calls,
'method': method,
}
msg.update(parameters)
promise = SimplePromise()
self._callbacks[self._calls] = promise
self._calls += 1
self._comm.send(msg)
return promise
示例4: CommSocket
# 需要导入模块: from IPython.kernel.comm import Comm [as 别名]
# 或者: from IPython.kernel.comm.Comm import send [as 别名]
class CommSocket(object):
"""
Manages the Comm connection between IPython and the browser (client).
Comms are 2 way, with the CommSocket being able to publish a message
via the send_json method, and handle a message with on_message. On the
JS side figure.send_message and figure.ws.onmessage do the sending and
receiving respectively.
"""
def __init__(self, manager):
self.supports_binary = None
self.manager = manager
self.uuid = str(uuid())
# Publish an output area with a unique ID. The javascript can then
# hook into this area.
display(HTML("<div id=%r></div>" % self.uuid))
try:
self.comm = Comm("matplotlib", data={"id": self.uuid})
except AttributeError:
raise RuntimeError(
"Unable to create an IPython notebook Comm " "instance. Are you in the IPython notebook?"
)
self.comm.on_msg(self.on_message)
manager = self.manager
self.comm.on_close(lambda close_message: manager.clearup_closed())
def is_open(self):
return not self.comm._closed
def on_close(self):
# When the socket is closed, deregister the websocket with
# the FigureManager.
self.comm.close()
self.manager.clearup_closed()
def send_json(self, content):
self.comm.send({"data": json.dumps(content)})
def send_binary(self, blob):
# The comm is ascii, so we always send the image in base64
# encoded data URL form.
data = b64encode(blob)
if six.PY3:
data = data.decode("ascii")
data_uri = "data:image/png;base64,{0}".format(data)
self.comm.send({"data": data_uri})
def on_message(self, message):
# The 'supports_binary' message is relevant to the
# websocket itself. The other messages get passed along
# to matplotlib as-is.
# Every message has a "type" and a "figure_id".
message = json.loads(message["content"]["data"])
if message["type"] == "closing":
self.on_close()
elif message["type"] == "supports_binary":
self.supports_binary = message["value"]
else:
self.manager.handle_json(message)
示例5: Canvas
# 需要导入模块: from IPython.kernel.comm import Comm [as 别名]
# 或者: from IPython.kernel.comm.Comm import send [as 别名]
class Canvas(object):
def __init__(self):
self.uuid = "canvas" + str(uuid4())
self.css = {
"width": "500px",
"height": "500px",
"background-color": "white"
}
self.loop_func = None
self.interval = 0.1
self.time = 0
self.stop = False
self.stack = []
def begin(self):
def func():
self.loop_func(self.time)
self.send()
self.time += 1
if not self.stop:
timer = Timer(self.interval, func)
timer.start()
func()
def show(self):
from jinja2 import Template
from IPython.core.display import display, HTML
from IPython.kernel.comm import Comm
path = os.path.abspath(os.path.join(os.path.dirname(__file__), "templates/template.html"))
template = Template(open(path).read())
css = str(self.css).replace("{", "").replace("}", "").replace(",", ";").replace("\'", "")
html = template.render(**{
"canvas_id": self.uuid,
"svg_style": css
})
display(HTML(html))
self.comm = Comm("Draw")
if self.loop_func is not None:
self.begin()
else:
self.send()
def add(self, obj):
import re
r = re.compile(r"__.*__")
for attr in dir(obj):
m = getattr(obj, str(attr))
if callable(m) and not r.match(str(attr)):
def make_func():
m_ = m
def func(*args, **kw):
self.stack.append(("update", obj))
return m_(*args, **kw)
return func
setattr(obj, str(attr), make_func())
self.stack.append(("append", obj))
def send(self):
self.comm.send({
"canvas_id": self.uuid,
"queue": [{
"method": s[0],
"type": s[1].__class__.__name__.lower(),
"attr": s[1].attr,
"selector_id": s[1].uuid
} for s in self.stack]
})
self.stack = []
def loop(self, func):
self.loop_func = func
def width(self, val):
self.css["width"] = str(val) + "px"
def height(self, val):
self.css["height"] = str(val) + "px"
def background_color(self, val):
self.css["background-color"] = val