Skip to content

Commit

Permalink
Allow to send binary buffers by MessageSent (#9819)
Browse files Browse the repository at this point in the history
  • Loading branch information
mattpap committed Mar 25, 2020
1 parent bbaae98 commit 40e13e3
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
24 changes: 18 additions & 6 deletions bokeh/document/events.py
Expand Up @@ -22,8 +22,12 @@
# Imports
#-----------------------------------------------------------------------------

# Standard library imports
from typing import Any, Union

# Bokeh imports
from ..util.dependencies import import_optional
from ..util.serialization import make_id

#-----------------------------------------------------------------------------
# Globals and constants
Expand Down Expand Up @@ -146,23 +150,31 @@ def generate(self, references, buffers):
class MessageSentEvent(DocumentPatchedEvent):
""" """

def __init__(self, document, msg_type, msg_data, setter=None, callback_invoker=None):
def __init__(self, document, msg_type: str, msg_data: Union[Any, bytes], setter=None, callback_invoker=None):
super(MessageSentEvent, self).__init__(document, setter, callback_invoker)
self.msg_type = msg_type
self.msg_data = msg_data

def dispatch(self, receiver):
super(MessageSentEvent, self).dispatch(receiver)
if hasattr(receiver, '_document_message_sent'):
if hasattr(receiver, "_document_message_sent"):
receiver._document_message_sent(self)

def generate(self, references, buffers):
return {
'kind' : 'MessageSent',
'msg_type' : self.msg_type,
'msg_data' : self.msg_data,
msg = {
"kind": "MessageSent",
"msg_type": self.msg_type,
}

if not isinstance(self.msg_data, bytes):
msg["msg_data"] = self.msg_data
else:
buffer_id = make_id()
buf = (dict(id=buffer_id), self.msg_data)
buffers.append(buf)

return msg

class ModelChangedEvent(DocumentPatchedEvent):
''' A concrete event representing updating an attribute and value of a
specific Bokeh Model.
Expand Down
16 changes: 14 additions & 2 deletions bokehjs/src/lib/document/document.ts
Expand Up @@ -703,8 +703,20 @@ export class Document {
for (const event_json of events_json) {
switch (event_json.kind) {
case 'MessageSent': {
const msg_data = Document._resolve_refs(event_json.msg_data, old_references, new_references)
this._trigger_on_message(event_json.msg_type, msg_data)
const {msg_type, msg_data} = event_json
let data: unknown
if (msg_data === undefined) {
if (buffers.length == 1) {
const [[, buffer]] = buffers
data = buffer
} else {
throw new Error("expected exactly one buffer")
}
} else {
data = Document._resolve_refs(msg_data, old_references, new_references)
}

this._trigger_on_message(msg_type, data)
break
}
case 'ModelChanged': {
Expand Down
2 changes: 1 addition & 1 deletion bokehjs/src/lib/document/events.ts
Expand Up @@ -15,7 +15,7 @@ export interface ModelChanged {
export interface MessageSent {
kind: "MessageSent"
msg_type: string
msg_data: unknown
msg_data?: unknown
}

export interface TitleChanged {
Expand Down

0 comments on commit 40e13e3

Please sign in to comment.