This commit is contained in:
lda
2026-08-31 19:49:17 +07:00 Verified
parent c2c41ea9ce
commit d9ef330beb
9 changed files with 27 additions and 28 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ from .events import (
event_from_history_output,
)
from .jupyter.app import JupyterApp
from .jupyter.shell import JupyterShell
from .jupyter.messages import JupyterMessage, KernelMessage, ParsedJupyterMessage
from .jupyter.shell import JupyterShell
from .jupyter.transport import InputRequest, JupyterTransport
from .models import (
AppInfo,
@@ -46,9 +46,9 @@ __all__ = [
"InputRequest",
"JSONValue",
"JupyterApp",
"JupyterMessage",
"JupyterShell",
"JupyterTransport",
"JupyterMessage",
"KernelMessage",
"ParsedJupyterMessage",
"Shell",
+2 -2
View File
@@ -18,17 +18,17 @@ from .shell import JupyterShell
from .transport import InputRequest, JupyterTransport
__all__ = [
"InputRequest",
"DisplayDataMessage",
"ErrorMessage",
"ExecuteReplyMessage",
"ExecuteResultMessage",
"InputRequest",
"InputRequestMessage",
"JupyterApp",
"JupyterMessage",
"KernelMessage",
"JupyterShell",
"JupyterTransport",
"KernelMessage",
"KnownJupyterMessage",
"ParsedJupyterMessage",
"StatusMessage",
+10 -11
View File
@@ -2,20 +2,19 @@ from typing import Annotated, ClassVar, Final, Literal
from pydantic import BaseModel, ConfigDict, Field, TypeAdapter, ValidationError
type JupyterChannel = Literal["iopub", "shell", "stdin"]
type MessageStatus = Literal["ok", "error", "abort"]
STREAM: Final[Literal["stream"]] = "stream"
DISPLAY_DATA: Final[Literal["display_data"]] = "display_data"
UPDATE_DISPLAY_DATA: Final[Literal["update_display_data"]] = "update_display_data"
EXECUTE_RESULT: Final[Literal["execute_result"]] = "execute_result"
ERROR: Final[Literal["error"]] = "error"
STATUS: Final[Literal["status"]] = "status"
EXECUTE_INPUT: Final[Literal["execute_input"]] = "execute_input"
CLEAR_OUTPUT: Final[Literal["clear_output"]] = "clear_output"
EXECUTE_REPLY: Final[Literal["execute_reply"]] = "execute_reply"
INPUT_REQUEST: Final[Literal["input_request"]] = "input_request"
STREAM: Final = "stream"
DISPLAY_DATA: Final = "display_data"
UPDATE_DISPLAY_DATA: Final = "update_display_data"
EXECUTE_RESULT: Final = "execute_result"
ERROR: Final = "error"
STATUS: Final = "status"
EXECUTE_INPUT: Final = "execute_input"
CLEAR_OUTPUT: Final = "clear_output"
EXECUTE_REPLY: Final = "execute_reply"
INPUT_REQUEST: Final = "input_request"
class MimeContent(BaseModel):
+6 -4
View File
@@ -11,8 +11,6 @@ from .messages import (
ExecuteReplyMessage,
InputRequestMessage,
JupyterChannel,
JupyterMessage,
KernelMessage,
ParsedJupyterMessage,
StatusMessage,
parse_jupyter_message,
@@ -116,7 +114,9 @@ class JupyterTransport:
async def execute(self, code: str) -> str:
"""Submit one cell and return its Jupyter message ID."""
if self._reader_failure is not None:
raise RuntimeError("JupyterTransport channel reader failed") from self._reader_failure
raise RuntimeError(
"JupyterTransport channel reader failed"
) from self._reader_failure
if self.client is None:
raise RuntimeError("JupyterTransport has not been started")
@@ -131,7 +131,9 @@ class JupyterTransport:
) -> AsyncIterator[ParsedJupyterMessage | InputRequest]:
"""Yield decoded output, input, and completion messages for one call."""
if self._reader_failure is not None:
raise RuntimeError("JupyterTransport channel reader failed") from self._reader_failure
raise RuntimeError(
"JupyterTransport channel reader failed"
) from self._reader_failure
if self.client is None:
raise RuntimeError("JupyterTransport has not been started")
if self._active_call != call_id:
+3 -2
View File
@@ -10,7 +10,6 @@ from pathlib import Path
from uuid import uuid4
from ipython_shell.jupyter import InputRequest, JupyterApp, ParsedJupyterMessage
from st_demo.ui import event_to_record, latex_body, preferred_mime
@@ -28,7 +27,9 @@ class _CallFailed:
@dataclass
class _BackgroundCall:
events: queue.Queue[ParsedJupyterMessage | InputRequest | _CallFinished | _CallFailed]
events: queue.Queue[
ParsedJupyterMessage | InputRequest | _CallFinished | _CallFailed
]
task: Future[None] | None = None
-1
View File
@@ -13,7 +13,6 @@ from ipython_shell.jupyter.messages import (
)
from ipython_shell.jupyter.transport import InputRequest
MIME_PRIORITY: Final[tuple[str, ...]] = (
"text/html",
"image/svg+xml",
+1 -1
View File
@@ -2,10 +2,10 @@ import unittest
from fastapi.testclient import TestClient
from ipython_agent.ipython_wrapper import get_app_info
from ipython_mcp.app import app as mcp_app
from ipython_shell import App, AppInfo
from ipython_webapp.app import app as web_app
from ipython_agent.ipython_wrapper import get_app_info
class AppInfoTests(unittest.IsolatedAsyncioTestCase):
+1 -1
View File
@@ -3,8 +3,8 @@ import re
import unittest
from ipython_shell.jupyter.app import JupyterApp
from ipython_shell.jupyter.shell import JupyterShell
from ipython_shell.jupyter.messages import ExecuteResultMessage
from ipython_shell.jupyter.shell import JupyterShell
from ipython_shell.jupyter.transport import InputRequest
+2 -4
View File
@@ -211,12 +211,10 @@ class AsyncTransportTests(unittest.IsolatedAsyncioTestCase):
await transport.start()
try:
call_id = await transport.execute(
"import matplotlib.pyplot as plt\n"
"plt.plot([1, 2, 3], [4, 5, 6])"
"import matplotlib.pyplot as plt\nplt.plot([1, 2, 3], [4, 5, 6])"
)
messages = [
message
async for message in transport.messages_for(call_id)
message async for message in transport.messages_for(call_id)
]
finally:
await transport.shutdown()