From: Serhiy Storchaka <storchaka@gmail.com>
Date: Fri, 20 Mar 2015 14:11:20 +0000 (+0200)
Subject: Issue #23700: NamedTemporaryFile iterator closed underlied file object in
X-Git-Tag: v3.5.0a3~108^2
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d83b7c2df4439b678bf7e372f8c9bbaff2907689;p=python

Issue #23700: NamedTemporaryFile iterator closed underlied file object in
some circunstances while NamedTemporaryFile object was living.  This causes
failing test_csv.  Changed the implementation of NamedTemporaryFile.__iter__
to make tests passed.
---

diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 8352c38a0d..cb18ae65f6 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -426,9 +426,11 @@ class _TemporaryFileWrapper:
 
     # iter() doesn't use __getattr__ to find the __iter__ method
     def __iter__(self):
-        # 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)
+        # 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.
+        # XXX Also don't use "yield from"!
+        for line in self.file:
+            yield line
 
 
 def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None,