Browse Source

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.
Dan Davison 14 years ago
parent
commit
24a5f8b4e5
1 changed files with 18 additions and 17 deletions
  1. 18 17
      lisp/ob-python.el

+ 18 - 17
lisp/ob-python.el

@@ -50,16 +50,15 @@
 (defvar org-src-preserve-indentation)
 (defun org-babel-expand-body:python (body params &optional processed-params)
   "Expand BODY according to PARAMS, return the expanded body."
-  (concat
-   (mapconcat ;; define any variables
-    (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))) "\n")
-   "\n"
-   (org-babel-trim body (if org-src-preserve-indentation "[\f\n\r\v]"))
-   "\n"))
+  (let ((var-lines
+	 (org-babel-python-variable-assignments params processed-params)))
+    (mapconcat
+     #'identity
+     (append
+      (org-babel-python-variable-assignments params processed-params)
+      (list
+       (org-babel-trim body (if org-src-preserve-indentation "[\f\n\r\v]"))))
+     "\n")))
 
 (defun org-babel-execute:python (body params)
   "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)
   "Prepare SESSION according to the header arguments in PARAMS."
   (let* ((session (org-babel-python-initiate-session session))
-         (vars (org-babel-ref-variables params))
-         (var-lines (mapcar ;; define any variables
-                     (lambda (pair)
-                       (format "%s=%s"
-                               (car pair)
-                               (org-babel-python-var-to-python (cdr pair))))
-                     vars)))
+	 (var-lines (org-babel-python-variable-assignments params)))
     (org-babel-comint-in-buffer session
       (mapc (lambda (var)
               (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
 
+(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)
   "Convert an elisp value to a python variable.
 Convert an elisp value, VAR, into a string of python source code