def closed(self):
return self._file.closed
- @property
- def encoding(self):
- return self._file.encoding
-
def fileno(self):
self.rollover()
return self._file.fileno()
@property
def mode(self):
- return self._file.mode
+ try:
+ return self._file.mode
+ except AttributeError:
+ return self._TemporaryFileArgs[0]
@property
def name(self):
- return self._file.name
-
- @property
- def newlines(self):
- return self._file.newlines
+ try:
+ return self._file.name
+ except AttributeError:
+ return None
def next(self):
return self._file.next
return rv
def xreadlines(self, *args):
- return self._file.xreadlines(*args)
+ try:
+ return self._file.xreadlines(*args)
+ except AttributeError:
+ return iter(self._file.readlines(*args))
f.write(b'x')
self.assertTrue(f._rolled)
+ def test_xreadlines(self):
+ f = self.do_create(max_size=20)
+ f.write(b'abc\n' * 5)
+ f.seek(0)
+ self.assertFalse(f._rolled)
+ self.assertEqual(list(f.xreadlines()), [b'abc\n'] * 5)
+ f.write(b'x\ny')
+ self.assertTrue(f._rolled)
+ f.seek(0)
+ self.assertEqual(list(f.xreadlines()), [b'abc\n'] * 5 + [b'x\n', b'y'])
+
def test_sparse(self):
# A SpooledTemporaryFile that is written late in the file will extend
# when that occurs
seek(0, 0)
self.assertTrue(read(70) == 'a'*35 + '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, 'w+b')
+ self.assertIsNotNone(f.name)
+ with self.assertRaises(AttributeError):
+ f.newlines
+ with self.assertRaises(AttributeError):
+ f.encoding
+
def test_context_manager_before_rollover(self):
# A SpooledTemporaryFile can be used as a context manager
with tempfile.SpooledTemporaryFile(max_size=1) as f:
Library
-------
+- Issue #10355: In SpooledTemporaryFile class mode and name properties and
+ xreadlines method now work for unrolled files. encoding and newlines
+ properties now removed as they have no sense and always produced
+ AttributeError.
+
- Issue #16686: Fixed a lot of bugs in audioop module. Fixed crashes in
avgpp(), maxpp() and ratecv(). Fixed an integer overflow in add(), bias(),
and ratecv(). reverse(), lin2lin() and ratecv() no more lose precision for