feat: preserve Jupyter MIME output in Streamlit
This commit is contained in:
16 files changed
+1315
-75
No files matched your search
@@ -7,7 +7,7 @@ from fastapi import Body, FastAPI, HTTPException, Path, Response
|
||||
from fastapi.responses import StreamingResponse
|
||||
from pydantic import BaseModel
|
||||
|
||||
from ipython_shell.jupyter import InputRequest, JupyterApp, KernelMessage
|
||||
from ipython_shell.jupyter import InputRequest, JupyterApp, ParsedJupyterMessage
|
||||
|
||||
app = FastAPI(title="IPython Jupyter Web App", version="0.1.0")
|
||||
shell_app = JupyterApp()
|
||||
@@ -19,7 +19,7 @@ class InputReply(BaseModel):
|
||||
value: str
|
||||
|
||||
|
||||
def serialize_event(event: KernelMessage | InputRequest) -> dict[str, object]:
|
||||
def serialize_event(event: ParsedJupyterMessage | InputRequest) -> dict[str, object]:
|
||||
"""Turn a shell event into JSON-safe data for a web client."""
|
||||
if isinstance(event, InputRequest):
|
||||
return {
|
||||
@@ -31,11 +31,15 @@ def serialize_event(event: KernelMessage | InputRequest) -> dict[str, object]:
|
||||
|
||||
# Some Jupyter messages keep binary payloads in message buffers. Base64
|
||||
# makes those buffers safe to carry beside JSON MIME data in the stream.
|
||||
content = event.content
|
||||
if isinstance(content, BaseModel):
|
||||
content = content.model_dump(mode="json")
|
||||
|
||||
return {
|
||||
"type": "kernel_message",
|
||||
"msg_type": event.msg_type,
|
||||
"parent_id": event.parent_id,
|
||||
"content": event.content,
|
||||
"content": content,
|
||||
"buffers": [
|
||||
base64.b64encode(buffer).decode("ascii") for buffer in event.buffers
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user