From f92e14f62bade2c1988b34c21b78017eca8b0670 Mon Sep 17 00:00:00 2001 From: Nathaniel Nicandro Date: Sun, 13 Dec 2020 16:18:20 -0600 Subject: [PATCH] Add `jupyter-restart-kernel` --- jupyter-client.el | 8 ++++++++ jupyter-kernel.el | 7 +++++-- jupyter-server-kernel.el | 7 +++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/jupyter-client.el b/jupyter-client.el index b2338fd..55c313a 100644 --- a/jupyter-client.el +++ b/jupyter-client.el @@ -473,6 +473,14 @@ longer connected to a kernel." (jupyter-publish 'shutdown)) (jupyter-disconnect client)))) +(cl-defmethod jupyter-restart-kernel ((client jupyter-kernel-client)) + "Restart the kernel CLIENT is connected to." + (when (jupyter-connected-p client) + (pcase-let ((`(,_ ,kaction-sub) (oref client io))) + (jupyter-run-with-io kaction-sub + (jupyter-publish 'restart)) + (jupyter-disconnect client)))) + (cl-defmethod jupyter-interrupt-kernel ((client jupyter-kernel-client)) "Interrupt the kernel CLIENT is connected to." (when (jupyter-connected-p client) diff --git a/jupyter-kernel.el b/jupyter-kernel.el index e9f910d..db3d544 100644 --- a/jupyter-kernel.el +++ b/jupyter-kernel.el @@ -125,8 +125,11 @@ nil." "Notify that the kernel launched." (message "%s kernel shutdown...done" (jupyter-kernel-name kernel))) -(defun jupyter-restart (kernel) - "Shutdown then re-launch KERNEL." +(cl-defgeneric jupyter-restart ((kernel jupyter-kernel)) + "Restart KERNEL. + +The default implementation shuts down and then re-launches +KERNEL." (jupyter-shutdown kernel) (jupyter-launch kernel)) diff --git a/jupyter-server-kernel.el b/jupyter-server-kernel.el index e9a3b81..407ea8e 100644 --- a/jupyter-server-kernel.el +++ b/jupyter-server-kernel.el @@ -282,6 +282,8 @@ this case FN will be evaluated on KERNEL." (jupyter-shutdown kernel) (websocket-close ws) (setq shutdown t)) + ('restart + (jupyter-restart kernel)) (`(action ,fn) (funcall fn kernel)))))))) @@ -333,6 +335,11 @@ using its SPEC." (when session (jupyter-api-shutdown-kernel server id)))) +(cl-defmethod jupyter-restart ((kernel jupyter-server-kernel)) + (pcase-let (((cl-struct jupyter-server-kernel server id session) kernel)) + (when session + (jupyter-api-restart-kernel server id)))) + (cl-defmethod jupyter-interrupt ((kernel jupyter-server-kernel)) (pcase-let (((cl-struct jupyter-server-kernel server id) kernel)) (jupyter-api-interrupt-kernel server id)))