forked from mirrors/org-mode
ob-python.el: Assign variables in preamble instead of body
* lisp/ob-python.el (org-babel-execute:python): Add variable assignment to preamble instead of body. (org-babel-python-evaluate): Concatenate preamble (which now includes variable assignment) to body before session evaluation. Fixes https://lists.gnu.org/archive/html/emacs-orgmode/2020-03/msg00126.html. For non-session evaluation, ob-python adds indentation to the body inside main(), but this was adding spurious indentation for multiline strings passed through :var. This commit fixes the issue by moving variable assignment out of the body and into the preamble.
This commit is contained in:
parent
d9fe6aeafe
commit
6149b6cb6d
|
@ -82,10 +82,14 @@ This function is called by `org-babel-execute-src-block'."
|
||||||
(return-val (when (and (eq result-type 'value) (not session))
|
(return-val (when (and (eq result-type 'value) (not session))
|
||||||
(cdr (assq :return params))))
|
(cdr (assq :return params))))
|
||||||
(preamble (cdr (assq :preamble params)))
|
(preamble (cdr (assq :preamble params)))
|
||||||
|
(preamble (concat preamble (and preamble "\n")
|
||||||
|
(mapconcat #'identity
|
||||||
|
(org-babel-variable-assignments:python params)
|
||||||
|
"\n")))
|
||||||
(full-body
|
(full-body
|
||||||
(org-babel-expand-body:generic
|
(org-babel-expand-body:generic
|
||||||
(concat body (if return-val (format "\nreturn %s" return-val) ""))
|
(concat body (if return-val (format "\nreturn %s" return-val) ""))
|
||||||
params (org-babel-variable-assignments:python params)))
|
params))
|
||||||
(result (org-babel-python-evaluate
|
(result (org-babel-python-evaluate
|
||||||
session full-body result-type result-params preamble)))
|
session full-body result-type result-params preamble)))
|
||||||
(org-babel-reassemble-table
|
(org-babel-reassemble-table
|
||||||
|
@ -272,7 +276,8 @@ except Exception:
|
||||||
"Evaluate BODY as Python code."
|
"Evaluate BODY as Python code."
|
||||||
(if session
|
(if session
|
||||||
(org-babel-python-evaluate-session
|
(org-babel-python-evaluate-session
|
||||||
session body result-type result-params)
|
session (concat preamble (and preamble "\n") body)
|
||||||
|
result-type result-params)
|
||||||
(org-babel-python-evaluate-external-process
|
(org-babel-python-evaluate-external-process
|
||||||
body result-type result-params preamble)))
|
body result-type result-params preamble)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue