feat(jupyter): send Jupyter messaging metadata with Deno.jupyter.broadcast (#20714)

Exposes
[`metadata`](https://jupyter-client.readthedocs.io/en/latest/messaging.html#metadata)
to the `Deno.jupyter.broadcast` API.

```js
await Deno.jupyter.broadcast(msgType, content, metadata);
```

The metadata is required for
[`"comm_open"`](https://github.com/jupyter-widgets/ipywidgets/blob/main/packages/schema/messages.md#instantiating-a-widget-object-1)
for with `jupyter.widget` target.
This commit is contained in:
Trevor Manz 2023-09-29 18:24:09 -04:00 committed by GitHub
parent 2d1af0cf51
commit 7bcf1211a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 2 deletions

View file

@ -9,8 +9,8 @@ function enableJupyter() {
} = core.ensureFastOps();
globalThis.Deno.jupyter = {
async broadcast(msgType, content) {
await op_jupyter_broadcast(msgType, content);
async broadcast(msgType, content, { metadata = {} } = {}) {
await op_jupyter_broadcast(msgType, content, metadata);
},
};
}

View file

@ -36,6 +36,7 @@ pub async fn op_jupyter_broadcast(
state: Rc<RefCell<OpState>>,
#[string] message_type: String,
#[serde] content: serde_json::Value,
#[serde] metadata: serde_json::Value,
) -> Result<(), AnyError> {
let (iopub_socket, last_execution_request) = {
let s = state.borrow();
@ -52,6 +53,7 @@ pub async fn op_jupyter_broadcast(
last_request
.new_message(&message_type)
.with_content(content)
.with_metadata(metadata)
.send(&mut *iopub_socket.lock().await)
.await?;
}

View file

@ -206,6 +206,14 @@ impl JupyterMessage {
self
}
pub(crate) fn with_metadata(
mut self,
metadata: serde_json::Value,
) -> JupyterMessage {
self.metadata = metadata;
self
}
pub(crate) async fn send<S: zeromq::SocketSend>(
&self,
connection: &mut Connection<S>,

View file

@ -1978,6 +1978,9 @@ declare namespace Deno {
export function broadcast(
msgType: string,
content: Record<string, unknown>,
extra?: {
metadata?: Record<string, unknown>;
},
): Promise<void>;
}
}