0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-09-29 23:17:49 +00:00

babel: python: Fix variable assignments made by `org-babel-prep-session:python'

* ob-python.el (org-babel-expand-body:python): Refactor: break variable
    assignment part out into a separate function
    (org-babel-python-variable-assignments): New function constructing
    list of variable assignment statements
    (org-babel-prep-session:python): Use new function
    `org-babel-python-variable-assignments' instead of previous
    (incorrect) variable assignment code.
This commit is contained in:
Dan Davison 2010-10-14 21:05:02 +01:00
parent 1bc914cd7a
commit 24a5f8b4e5

View file

@ -50,16 +50,15 @@
(defvar org-src-preserve-indentation) (defvar org-src-preserve-indentation)
(defun org-babel-expand-body:python (body params &optional processed-params) (defun org-babel-expand-body:python (body params &optional processed-params)
"Expand BODY according to PARAMS, return the expanded body." "Expand BODY according to PARAMS, return the expanded body."
(concat (let ((var-lines
(mapconcat ;; define any variables (org-babel-python-variable-assignments params processed-params)))
(lambda (pair) (mapconcat
(format "%s=%s" #'identity
(car pair) (append
(org-babel-python-var-to-python (cdr pair)))) (org-babel-python-variable-assignments params processed-params)
(nth 1 (or processed-params (org-babel-process-params params))) "\n") (list
"\n" (org-babel-trim body (if org-src-preserve-indentation "[\f\n\r\v]"))))
(org-babel-trim body (if org-src-preserve-indentation "[\f\n\r\v]")) "\n")))
"\n"))
(defun org-babel-execute:python (body params) (defun org-babel-execute:python (body params)
"Execute a block of Python code with Babel. "Execute a block of Python code with Babel.
@ -83,13 +82,7 @@ This function is called by `org-babel-execute-src-block'."
(defun org-babel-prep-session:python (session params) (defun org-babel-prep-session:python (session params)
"Prepare SESSION according to the header arguments in PARAMS." "Prepare SESSION according to the header arguments in PARAMS."
(let* ((session (org-babel-python-initiate-session session)) (let* ((session (org-babel-python-initiate-session session))
(vars (org-babel-ref-variables params)) (var-lines (org-babel-python-variable-assignments params)))
(var-lines (mapcar ;; define any variables
(lambda (pair)
(format "%s=%s"
(car pair)
(org-babel-python-var-to-python (cdr pair))))
vars)))
(org-babel-comint-in-buffer session (org-babel-comint-in-buffer session
(mapc (lambda (var) (mapc (lambda (var)
(end-of-line 1) (insert var) (comint-send-input) (end-of-line 1) (insert var) (comint-send-input)
@ -107,6 +100,14 @@ This function is called by `org-babel-execute-src-block'."
;; helper functions ;; helper functions
(defun org-babel-python-variable-assignments (params &optional processed-params)
(mapcar
(lambda (pair)
(format "%s=%s"
(car pair)
(org-babel-python-var-to-python (cdr pair))))
(nth 1 (or processed-params (org-babel-process-params params)))))
(defun org-babel-python-var-to-python (var) (defun org-babel-python-var-to-python (var)
"Convert an elisp value to a python variable. "Convert an elisp value to a python variable.
Convert an elisp value, VAR, into a string of python source code Convert an elisp value, VAR, into a string of python source code