[Treepkg-commits] r49 - in trunk: test treepkg

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu May 22 14:44:43 CEST 2008


Author: bh
Date: 2008-05-22 14:44:43 +0200 (Thu, 22 May 2008)
New Revision: 49

Modified:
   trunk/test/test_run.py
   trunk/treepkg/run.py
Log:
New parameter treepkg.run.call: extra_env for additional environment
variables passed to the subprocess.  Also add a test case.


Modified: trunk/test/test_run.py
===================================================================
--- trunk/test/test_run.py	2008-05-22 10:40:08 UTC (rev 48)
+++ trunk/test/test_run.py	2008-05-22 12:44:43 UTC (rev 49)
@@ -28,3 +28,23 @@
             self.assertEquals(exc.returncode, 1)
         else:
             self.fail("call did not raise an exception")
+
+    def test_call_extra_env(self):
+        """Test call with the extra_env parameter"""
+        subprocess_cmd = [sys.executable, "-c",
+                          "import sys, os;"
+                          "value = os.environ.get('TREEPKG_TEST');"
+                          "sys.exit(int(value != 'xyzzy'))"
+                          ]
+        # sanity check that the extra environment variable we use for
+        # the test is not set yet
+        self.assertRaises(SubprocessError, call, subprocess_cmd)
+
+        # the actual test
+        try:
+            call(subprocess_cmd, extra_env=dict(TREEPKG_TEST="xyzzy"))
+        except SubprocessError, exc:
+            self.fail("the extra_env variables were not set properly")
+        else:
+            # test OK
+            pass

Modified: trunk/treepkg/run.py
===================================================================
--- trunk/treepkg/run.py	2008-05-22 10:40:08 UTC (rev 48)
+++ trunk/treepkg/run.py	2008-05-22 12:44:43 UTC (rev 49)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007 by Intevation GmbH
+# Copyright (C) 2007, 2008 by Intevation GmbH
 # Authors:
 # Bernhard Herzog <bh at intevation.de>
 #
@@ -20,7 +20,7 @@
         self.returncode = returncode
 
 
-def call(command, suppress_output=False, **kw):
+def call(command, suppress_output=False, extra_env=None, **kw):
     """Run command as a subprocess and wait until it is finished.
 
     The command should be given as a list of strings to avoid problems
@@ -30,7 +30,12 @@
     if suppress_output:
         kw["stdout"] = open(os.devnull, "w")
         kw["stderr"] = open(os.devnull, "w")
-    ret = subprocess.call(command, **kw)
+    env = kw.pop("env", None)
+    if extra_env:
+        if env is None:
+            env = os.environ.copy()
+        env.update(extra_env)
+    ret = subprocess.call(command, env=env, **kw)
     if ret != 0:
         raise SubprocessError(command, ret)
 



More information about the Treepkg-commits mailing list