diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2015-12-20 10:47:42 -0700 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2015-12-20 10:47:42 -0700 |
commit | 765422cfa5a959985808bbf11f7a6a58a9dc5e46 (patch) | |
tree | 23be151e3ee2dc61441a024d7ff047ff3e4d35f4 /numpy/testing/utils.py | |
parent | f125b7d456717b366df1ed756656e3670a8a8d54 (diff) | |
parent | c4156cfbe9c22ab99473346b7757d2b54b46baa3 (diff) | |
download | numpy-765422cfa5a959985808bbf11f7a6a58a9dc5e46.tar.gz |
Merge pull request #6866 from charris/tempfile-context-manager
ENH: Tempfile context manager
Diffstat (limited to 'numpy/testing/utils.py')
-rw-r--r-- | numpy/testing/utils.py | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/numpy/testing/utils.py b/numpy/testing/utils.py index 49d249339..0c4ebe1b9 100644 --- a/numpy/testing/utils.py +++ b/numpy/testing/utils.py @@ -12,7 +12,7 @@ import warnings from functools import partial import shutil import contextlib -from tempfile import mkdtemp +from tempfile import mkdtemp, mkstemp from .nosetester import import_nose from numpy.core import float32, empty, arange, array_repr, ndarray @@ -30,7 +30,7 @@ __all__ = ['assert_equal', 'assert_almost_equal', 'assert_approx_equal', 'assert_', 'assert_array_almost_equal_nulp', 'assert_raises_regex', 'assert_array_max_ulp', 'assert_warns', 'assert_no_warnings', 'assert_allclose', 'IgnoreException', 'clear_and_catch_warnings', - 'SkipTest', 'KnownFailureException'] + 'SkipTest', 'KnownFailureException', 'temppath', 'tempdir'] class KnownFailureException(Exception): @@ -1810,8 +1810,31 @@ def tempdir(*args, **kwargs): """ tmpdir = mkdtemp(*args, **kwargs) - yield tmpdir - shutil.rmtree(tmpdir) + try: + yield tmpdir + finally: + shutil.rmtree(tmpdir) + +@contextlib.contextmanager +def temppath(*args, **kwargs): + """Context manager for temporary files. + + Context manager that returns the path to a closed temporary file. Its + parameters are the same as for tempfile.mkstemp and are passed directly + to that function. The underlying file is removed when the context is + exited, so it should be closed at that time. + + Windows does not allow a temporary file to be opened if it is already + open, so the underlying file must be closed after opening before it + can be opened again. + + """ + fd, path = mkstemp(*args, **kwargs) + os.close(fd) + try: + yield path + finally: + os.remove(path) class clear_and_catch_warnings(warnings.catch_warnings): |