]> granicus.if.org Git - python/commitdiff
Use tempfile.mkdtemp() instead of tempfile.tempdir for where importlib places
authorBrett Cannon <bcannon@gmail.com>
Thu, 5 Nov 2009 01:26:57 +0000 (01:26 +0000)
committerBrett Cannon <bcannon@gmail.com>
Thu, 5 Nov 2009 01:26:57 +0000 (01:26 +0000)
source files for tests. Allows for concurrent execution of the tests by
preventing various executions from trampling each other.

Closes issue #7248.

Lib/importlib/test/source/util.py
Misc/NEWS

index a881d4a5e947ed589e8c91551117168c447bb65b..2b945c59364486812dfe8a2c1769991663ee7ebc 100644 (file)
@@ -42,8 +42,8 @@ def create_modules(*names):
     that contains the name passed into the context manager that caused the
     creation of the module.
 
-    All files are created in a temporary directory specified by
-    tempfile.gettempdir(). This directory is inserted at the beginning of
+    All files are created in a temporary directory returned by
+    tempfile.mkdtemp(). This directory is inserted at the beginning of
     sys.path. When the context manager exits all created files (source and
     bytecode) are explicitly deleted.
 
@@ -58,7 +58,7 @@ def create_modules(*names):
     state_manager = None
     uncache_manager = None
     try:
-        temp_dir = tempfile.gettempdir()
+        temp_dir = tempfile.mkdtemp()
         mapping['.root'] = temp_dir
         import_names = set()
         for name in names:
@@ -91,11 +91,4 @@ def create_modules(*names):
             state_manager.__exit__(None, None, None)
         if uncache_manager is not None:
             uncache_manager.__exit__(None, None, None)
-        # Reverse the order for path removal to unroll directory creation.
-        for path in reversed(created_paths):
-            if file_path.endswith('.py'):
-                support.unlink(path)
-                support.unlink(path + 'c')
-                support.unlink(path + 'o')
-            else:
-                os.rmdir(path)
+        support.rmtree(temp_dir)
index f114efb7bb952198be73db79ba7bb53d2d4a5f97..1e2a79f14584539f139ba86e22e847171d177448 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -354,6 +354,10 @@ Documentation
 Tests
 -----
 
+- Issue #7248 (part 2): Use a unique temporary directory for importlib source
+  tests instead of tempfile.tempdir. This prevents the tests from sharing state
+  between concurrent executions on the same system.
+
 - Issue #7248: In importlib.test.source.util a try/finally block did not make
   sure that some referenced objects actually were created in the block before
   calling methods on the object.