feat: preserve Jupyter MIME output in Streamlit
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import subprocess
|
||||
import sys
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from ipython_shell.jupyter.messages import (
|
||||
ExecuteResultMessage,
|
||||
UnknownJupyterMessage,
|
||||
)
|
||||
from st_demo.app import visible_records
|
||||
from st_demo.ui import event_to_record, preferred_mime
|
||||
|
||||
|
||||
class UIDisplayTests(unittest.TestCase):
|
||||
def test_completed_call_records_remain_visible_after_active_call_clears(self):
|
||||
records = {
|
||||
"finished-call": [{"kind": "execute_result", "text": "42"}],
|
||||
}
|
||||
|
||||
self.assertEqual(visible_records(records), records["finished-call"])
|
||||
|
||||
def test_app_module_loads_when_streamlit_executes_file_path(self):
|
||||
app_path = Path(__file__).parents[1] / "src" / "st_demo" / "app.py"
|
||||
result = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
"-c",
|
||||
"import runpy, sys; runpy.run_path(sys.argv[1], run_name='st_demo_script')",
|
||||
str(app_path),
|
||||
],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
|
||||
self.assertEqual(result.returncode, 0, result.stderr)
|
||||
|
||||
def test_preferred_mime_chooses_html_before_plain_text(self):
|
||||
mime, value = preferred_mime(
|
||||
{
|
||||
"text/plain": "fallback",
|
||||
"text/html": "<b>rich</b>",
|
||||
}
|
||||
)
|
||||
|
||||
self.assertEqual((mime, value), ("text/html", "<b>rich</b>"))
|
||||
|
||||
def test_execute_result_record_keeps_mime_and_repr(self):
|
||||
event = ExecuteResultMessage(
|
||||
message_id="message-1",
|
||||
parent_id="call-1",
|
||||
content={
|
||||
"execution_count": 4,
|
||||
"data": {
|
||||
"text/plain": "Line2D(_line0)",
|
||||
"image/png": "ZmFrZQ==",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
record = event_to_record(event)
|
||||
|
||||
self.assertEqual(record["kind"], "execute_result")
|
||||
self.assertEqual(record["text"], "Line2D(_line0)")
|
||||
self.assertEqual(record["data"]["image/png"], "ZmFrZQ==")
|
||||
|
||||
def test_unknown_message_record_keeps_raw_protocol_data(self):
|
||||
event = UnknownJupyterMessage(
|
||||
channel="iopub",
|
||||
msg_type="vendor_extension",
|
||||
message_id="message-2",
|
||||
content={"value": 42},
|
||||
raw={"msg_type": "vendor_extension", "content": {"value": 42}},
|
||||
)
|
||||
|
||||
record = event_to_record(event)
|
||||
|
||||
self.assertEqual(record["kind"], "vendor_extension")
|
||||
self.assertEqual(record["content"]["value"], 42)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user