From c0d13396bb356b1ad2582a1c61e9eb6630cace85 Mon Sep 17 00:00:00 2001 From: Nathaniel Nicandro Date: Sun, 17 Mar 2019 02:04:00 -0500 Subject: [PATCH] org-babel-execute:jupyter: Make all blocks synchronous during export --- ob-jupyter.el | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/ob-jupyter.el b/ob-jupyter.el index 235c406..954c0b1 100644 --- a/ob-jupyter.el +++ b/ob-jupyter.el @@ -61,6 +61,8 @@ (:async . "no")) "Default header arguments for Jupyter src-blocks.") +;;; Helper functions + (defun org-babel-jupyter--src-block-kernel-language () (when (org-in-src-block-p) (let ((info (org-babel-get-src-block-info))) @@ -76,6 +78,8 @@ (advice-member-p 'ob-jupyter (intern (concat "org-babel-execute:" lang))))) +;;; `ob' integration + (defun org-babel-variable-assignments:jupyter (params &optional lang) "Assign variables in PARAMS according to the Jupyter kernel language. LANG is the kernel language of the source block. If LANG is nil, @@ -290,8 +294,17 @@ the PARAMS alist." ;; silent results and link style results? (when (member "file" (assq :result-params params)) (org-babel-jupyter--remove-file-param params)) - (if (jupyter-org-request-inline-block-p req) "" - (jupyter-org-insert-async-id req))) + (cl-labels + ((sync-on-export + () + (unless (jupyter-request-idle-received-p req) + (jupyter-wait-until-idle req most-positive-fixnum)) + (remove-hook 'org-babel-after-execute-hook #'sync-on-export t))) + ;; Ensure we convert async blocks to synchronous ones when exporting + (when (bound-and-true-p org-export-current-backend) + (add-hook 'org-babel-after-execute-hook #'sync-on-export t t)) + (if (jupyter-org-request-inline-block-p req) "" + (jupyter-org-insert-async-id req)))) (t (let ((result-params (assq :result-params params))) (when (and (member "file" result-params) @@ -313,6 +326,8 @@ the PARAMS alist." ;; `jupyter-org-client' (nconc (alist-get :result-params params) (list "raw")))))))) +;;; Overriding source block languages, language aliases + (defvar org-babel-jupyter--babel-ops '("execute" "expand-body" "prep-session" "edit-prep" "variable-assignments" "load-session")) @@ -399,6 +414,8 @@ Optional argument REFRESH has the same meaning as in (replace-regexp-in-string "[0-9]*" "" lang))))))) +;;; `ox' integration + (defvar org-latex-minted-langs) (defun org-babel-jupyter-setup-export (backend) @@ -414,6 +431,8 @@ mapped to their appropriate minted language in do (cl-pushnew (list (intern (concat "jupyter-" lang)) lang) org-latex-minted-langs :test #'equal))))) +;;; Hook into `org' + (org-babel-jupyter-aliases-from-kernelspecs) (add-hook 'org-export-before-processing-hook #'org-babel-jupyter-setup-export)