summaryrefslogtreecommitdiff
path: root/cli/tools/jupyter/mod.rs
diff options
context:
space:
mode:
authorKyle Kelley <rgbkrk@gmail.com>2024-05-21 13:35:21 -0700
committerGitHub <noreply@github.com>2024-05-21 22:35:21 +0200
commit8698e80304815353ec52be1b16f96483ebe559a0 (patch)
tree9abd53d5b656cd8cc0c1aa3940684f3ce1d9c8ef /cli/tools/jupyter/mod.rs
parentcc8c0609ebec9f101a1739a0c42c91718ca2abba (diff)
refactor(jupyter): use runtimelib for Jupyter structures and directory paths (#23826)
This brings in [`runtimelib`](https://github.com/runtimed/runtimed) to use: ## Fully typed structs for Jupyter Messages ```rust let msg = connection.read().await?; self .send_iopub( runtimelib::Status::busy().as_child_of(msg), ) .await?; ``` ## Jupyter paths Jupyter paths are implemented in Rust, allowing the Deno kernel to be installed completely via Deno without a requirement on Python or Jupyter. Deno users will be able to install and use the kernel with just VS Code or other editors that support Jupyter. ```rust pub fn status() -> Result<(), AnyError> { let user_data_dir = user_data_dir()?; let kernel_spec_dir_path = user_data_dir.join("kernels").join("deno"); let kernel_spec_path = kernel_spec_dir_path.join("kernel.json"); if kernel_spec_path.exists() { log::info!("✅ Deno kernel already installed"); Ok(()) } else { log::warn!("ℹ️ Deno kernel is not yet installed, run `deno jupyter --install` to set it up"); Ok(()) } } ``` Closes https://github.com/denoland/deno/issues/21619
Diffstat (limited to 'cli/tools/jupyter/mod.rs')
-rw-r--r--cli/tools/jupyter/mod.rs26
1 files changed, 8 insertions, 18 deletions
diff --git a/cli/tools/jupyter/mod.rs b/cli/tools/jupyter/mod.rs
index da1c4bc4d..a4d0bb27d 100644
--- a/cli/tools/jupyter/mod.rs
+++ b/cli/tools/jupyter/mod.rs
@@ -3,7 +3,6 @@
use crate::args::Flags;
use crate::args::JupyterFlags;
use crate::ops;
-use crate::tools::jupyter::server::StdioMsg;
use crate::tools::repl;
use crate::tools::test::create_single_test_event_channel;
use crate::tools::test::reporters::PrettyTestReporter;
@@ -15,7 +14,6 @@ use deno_core::error::generic_error;
use deno_core::error::AnyError;
use deno_core::located_script_name;
use deno_core::resolve_url_or_path;
-use deno_core::serde::Deserialize;
use deno_core::serde_json;
use deno_core::url::Url;
use deno_runtime::deno_io::Stdio;
@@ -24,11 +22,13 @@ use deno_runtime::permissions::Permissions;
use deno_runtime::permissions::PermissionsContainer;
use deno_runtime::WorkerExecutionMode;
use deno_terminal::colors;
+
+use runtimelib::jupyter::ConnectionInfo;
+use runtimelib::messaging::StreamContent;
use tokio::sync::mpsc;
use tokio::sync::mpsc::UnboundedSender;
mod install;
-pub mod jupyter_msg;
pub mod server;
pub async fn kernel(
@@ -73,7 +73,7 @@ pub async fn kernel(
std::fs::read_to_string(&connection_filepath).with_context(|| {
format!("Couldn't read connection file: {:?}", connection_filepath)
})?;
- let spec: ConnectionSpec =
+ let spec: ConnectionInfo =
serde_json::from_str(&conn_file).with_context(|| {
format!(
"Connection file is not a valid JSON: {:?}",
@@ -119,12 +119,14 @@ pub async fn kernel(
test_event_receiver,
)
.await?;
- struct TestWriter(UnboundedSender<StdioMsg>);
+ struct TestWriter(UnboundedSender<StreamContent>);
impl std::io::Write for TestWriter {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self
.0
- .send(StdioMsg::Stdout(String::from_utf8_lossy(buf).into_owned()))
+ .send(StreamContent::stdout(
+ String::from_utf8_lossy(buf).into_owned(),
+ ))
.ok();
Ok(buf.len())
}
@@ -150,15 +152,3 @@ pub async fn kernel(
Ok(())
}
-
-#[derive(Debug, Deserialize)]
-pub struct ConnectionSpec {
- ip: String,
- transport: String,
- control_port: u32,
- shell_port: u32,
- stdin_port: u32,
- hb_port: u32,
- iopub_port: u32,
- key: String,
-}