diff -r 34881ee3eec5 Lib/tempfile.py --- a/Lib/tempfile.py Mon Jun 16 11:14:47 2014 -0500 +++ b/Lib/tempfile.py Mon Jun 16 20:57:16 2014 -0300 @@ -383,7 +383,6 @@ def __init__(self, file, name, delete=True): self.file = file self.name = name - self.delete = delete self._closer = _TemporaryFileCloser(file, name, delete) def __getattr__(self, name): @@ -428,6 +427,13 @@ def __iter__(self): return iter(self.file) + @property + def delete(self): + return self._closer.delete + @delete.setter + def delete(self, value): + self._closer.delete = value + def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix="", prefix=template, diff -r 34881ee3eec5 Lib/test/test_tempfile.py --- a/Lib/test/test_tempfile.py Mon Jun 16 11:14:47 2014 -0500 +++ b/Lib/test/test_tempfile.py Mon Jun 16 20:57:16 2014 -0300 @@ -741,6 +741,38 @@ os.unlink(tmp) os.rmdir(dir) + def test_property_del_on_close(self): + # Tests that delete-on-close can be enabled if property delete is True + # issue21579 + dir = tempfile.mkdtemp() + try: + f = tempfile.NamedTemporaryFile(dir=dir, delete=False) + f.delete = True + f.write(b'blat') + f.close() + self.assertFalse(os.path.exists(f.name), + "NamedTemporaryFile %s exists after close" % f.name) + finally: + os.rmdir(dir) + + def test_property_dis_del_on_close(self): + # Tests that delete-on-close can be disabled if property delete is False + # issue21579 + dir = tempfile.mkdtemp() + tmp = None + try: + f = tempfile.NamedTemporaryFile(dir=dir) + f.delete = False + tmp = f.name + f.write(b'blat') + f.close() + self.assertTrue(os.path.exists(f.name), + "NamedTemporaryFile %s missing after close" % f.name) + finally: + if tmp is not None: + os.unlink(tmp) + os.rmdir(dir) + def test_multiple_close(self): # A NamedTemporaryFile can be closed many times without error f = tempfile.NamedTemporaryFile()