summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/importlib/test/source/util.py23
-rw-r--r--Misc/NEWS8
2 files changed, 18 insertions, 13 deletions
diff --git a/Lib/importlib/test/source/util.py b/Lib/importlib/test/source/util.py
index ca04edfa97..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.
@@ -55,8 +55,10 @@ def create_modules(*names):
source = 'attr = {0!r}'
created_paths = []
mapping = {}
+ 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:
@@ -85,13 +87,8 @@ def create_modules(*names):
state_manager.__enter__()
yield mapping
finally:
- state_manager.__exit__(None, None, 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)
+ if state_manager is not None:
+ state_manager.__exit__(None, None, None)
+ if uncache_manager is not None:
+ uncache_manager.__exit__(None, None, None)
+ support.rmtree(temp_dir)
diff --git a/Misc/NEWS b/Misc/NEWS
index d7de60fef6..c67407f8af 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -134,6 +134,14 @@ Extension Modules
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.
+
- Issue #7055: test___all__ now greedily detects all modules which have an
__all__ attribute, rather than using a hardcoded and incomplete list.