mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #23700: Iterator of NamedTemporaryFile now keeps a reference to
NamedTemporaryFile instance. Patch by Bohuslav Kabrda.
This commit is contained in:
parent
86fdbf3152
commit
56cefa69ee
3 changed files with 19 additions and 1 deletions
|
@ -426,7 +426,9 @@ class _TemporaryFileWrapper:
|
||||||
|
|
||||||
# iter() doesn't use __getattr__ to find the __iter__ method
|
# iter() doesn't use __getattr__ to find the __iter__ method
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return iter(self.file)
|
# don't return iter(self.file), but yield from it to avoid closing
|
||||||
|
# file as long as it's being used as iterator, see issue #23000
|
||||||
|
yield from iter(self.file)
|
||||||
|
|
||||||
|
|
||||||
def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None,
|
def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None,
|
||||||
|
|
|
@ -707,6 +707,19 @@ class TestNamedTemporaryFile(BaseTestCase):
|
||||||
# No reference cycle was created.
|
# No reference cycle was created.
|
||||||
self.assertIsNone(wr())
|
self.assertIsNone(wr())
|
||||||
|
|
||||||
|
def test_iter(self):
|
||||||
|
# Issue #23700: getting iterator from a temporary file should keep
|
||||||
|
# it alive as long as it's being iterated over
|
||||||
|
lines = [b'spam\n', b'eggs\n', b'beans\n']
|
||||||
|
def make_file():
|
||||||
|
f = tempfile.NamedTemporaryFile(mode='w+b')
|
||||||
|
f.write(b''.join(lines))
|
||||||
|
f.seek(0)
|
||||||
|
return f
|
||||||
|
for i, l in enumerate(make_file()):
|
||||||
|
self.assertEqual(l, lines[i])
|
||||||
|
self.assertEqual(i, len(lines) - 1)
|
||||||
|
|
||||||
def test_creates_named(self):
|
def test_creates_named(self):
|
||||||
# NamedTemporaryFile creates files with names
|
# NamedTemporaryFile creates files with names
|
||||||
f = tempfile.NamedTemporaryFile()
|
f = tempfile.NamedTemporaryFile()
|
||||||
|
|
|
@ -18,6 +18,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #23700: Iterator of NamedTemporaryFile now keeps a reference to
|
||||||
|
NamedTemporaryFile instance. Patch by Bohuslav Kabrda.
|
||||||
|
|
||||||
- Issue #22903: The fake test case created by unittest.loader when it fails
|
- Issue #22903: The fake test case created by unittest.loader when it fails
|
||||||
importing a test module is now picklable.
|
importing a test module is now picklable.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue