Commit 142d2364 authored by Brett Cannon's avatar Brett Cannon

Merged revisions 76113-76114 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r76113 | brett.cannon | 2009-11-04 17:17:22 -0800 (Wed, 04 Nov 2009) | 3 lines

  importlib.test.source.util referenced variables in the 'finally' part of a
  try/finally which may not have been set.
........
  r76114 | brett.cannon | 2009-11-04 17:26:57 -0800 (Wed, 04 Nov 2009) | 6 lines

  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.
........
parent 2bb246ac
......@@ -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)
......@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment