From: Brett Cannon Date: Thu, 5 Nov 2009 01:26:57 +0000 (+0000) Subject: Use tempfile.mkdtemp() instead of tempfile.tempdir for where importlib places X-Git-Tag: v3.2a1~2235 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cfed029c42ba1f1129de0ff3e455fcaf1c7ef9c6;p=python Use tempfile.mkdtemp() instead of tempfile.tempdir for where importlib places source files for tests. Allows for concurrent execution of the tests by preventing various executions from trampling each other. Closes issue #7248. --- diff --git a/Lib/importlib/test/source/util.py b/Lib/importlib/test/source/util.py index a881d4a5e9..2b945c5936 100644 --- a/Lib/importlib/test/source/util.py +++ b/Lib/importlib/test/source/util.py @@ -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) diff --git a/Misc/NEWS b/Misc/NEWS index f114efb7bb..1e2a79f145 100644 --- 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.