diff options
Diffstat (limited to 'Lib')
| -rw-r--r-- | Lib/tempfile.py | 30 | ||||
| -rw-r--r-- | Lib/test/test_tempfile.py | 39 |
2 files changed, 59 insertions, 10 deletions
diff --git a/Lib/tempfile.py b/Lib/tempfile.py index 0785d80..8f8743c4 100644 --- a/Lib/tempfile.py +++ b/Lib/tempfile.py @@ -539,7 +539,12 @@ class SpooledTemporaryFile: @property def encoding(self): - return self._file.encoding + try: + return self._file.encoding + except AttributeError: + if 'b' in self._TemporaryFileArgs['mode']: + raise + return self._TemporaryFileArgs['encoding'] def fileno(self): self.rollover() @@ -553,18 +558,26 @@ class SpooledTemporaryFile: @property def mode(self): - return self._file.mode + try: + return self._file.mode + except AttributeError: + return self._TemporaryFileArgs['mode'] @property def name(self): - return self._file.name + try: + return self._file.name + except AttributeError: + return None @property def newlines(self): - return self._file.newlines - - def next(self): - return self._file.next + try: + return self._file.newlines + except AttributeError: + if 'b' in self._TemporaryFileArgs['mode']: + raise + return self._TemporaryFileArgs['newline'] def read(self, *args): return self._file.read(*args) @@ -605,9 +618,6 @@ class SpooledTemporaryFile: self._check(file) return rv - def xreadlines(self, *args): - return self._file.xreadlines(*args) - class TemporaryDirectory(object): """Create and return a temporary directory. This has the same diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py index 2b8f096..b0c3b4b 100644 --- a/Lib/test/test_tempfile.py +++ b/Lib/test/test_tempfile.py @@ -745,6 +745,26 @@ class TestSpooledTemporaryFile(BaseTestCase): seek(0, 0) self.assertEqual(read(70), b'a'*35 + b'b'*35) + def test_properties(self): + f = tempfile.SpooledTemporaryFile(max_size=10) + f.write(b'x' * 10) + self.assertFalse(f._rolled) + self.assertEqual(f.mode, 'w+b') + self.assertIsNone(f.name) + with self.assertRaises(AttributeError): + f.newlines + with self.assertRaises(AttributeError): + f.encoding + + f.write(b'x') + self.assertTrue(f._rolled) + self.assertEqual(f.mode, 'rb+') + self.assertIsNotNone(f.name) + with self.assertRaises(AttributeError): + f.newlines + with self.assertRaises(AttributeError): + f.encoding + def test_text_mode(self): # Creating a SpooledTemporaryFile with a text mode should produce # a file object reading and writing (Unicode) text strings. @@ -755,6 +775,12 @@ class TestSpooledTemporaryFile(BaseTestCase): f.write("def\n") f.seek(0) self.assertEqual(f.read(), "abc\ndef\n") + self.assertFalse(f._rolled) + self.assertEqual(f.mode, 'w+') + self.assertIsNone(f.name) + self.assertIsNone(f.newlines) + self.assertIsNone(f.encoding) + f.write("xyzzy\n") f.seek(0) self.assertEqual(f.read(), "abc\ndef\nxyzzy\n") @@ -762,6 +788,11 @@ class TestSpooledTemporaryFile(BaseTestCase): f.write("foo\x1abar\n") f.seek(0) self.assertEqual(f.read(), "abc\ndef\nxyzzy\nfoo\x1abar\n") + self.assertTrue(f._rolled) + self.assertEqual(f.mode, 'w+') + self.assertIsNotNone(f.name) + self.assertEqual(f.newlines, '\n') + self.assertIsNotNone(f.encoding) def test_text_newline_and_encoding(self): f = tempfile.SpooledTemporaryFile(mode='w+', max_size=10, @@ -770,11 +801,19 @@ class TestSpooledTemporaryFile(BaseTestCase): f.seek(0) self.assertEqual(f.read(), "\u039B\r\n") self.assertFalse(f._rolled) + self.assertEqual(f.mode, 'w+') + self.assertIsNone(f.name) + self.assertIsNone(f.newlines) + self.assertIsNone(f.encoding) f.write("\u039B" * 20 + "\r\n") f.seek(0) self.assertEqual(f.read(), "\u039B\r\n" + ("\u039B" * 20) + "\r\n") self.assertTrue(f._rolled) + self.assertEqual(f.mode, 'w+') + self.assertIsNotNone(f.name) + self.assertIsNotNone(f.newlines) + self.assertEqual(f.encoding, 'utf-8') def test_context_manager_before_rollover(self): # A SpooledTemporaryFile can be used as a context manager |
