mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Issue #10355: SpooledTemporaryFile properties and xreadline method now work for unrolled files.
This commit is contained in:
parent
62e709c52b
commit
beaa3adae9
3 changed files with 48 additions and 11 deletions
|
@ -546,10 +546,6 @@ class SpooledTemporaryFile:
|
|||
def closed(self):
|
||||
return self._file.closed
|
||||
|
||||
@property
|
||||
def encoding(self):
|
||||
return self._file.encoding
|
||||
|
||||
def fileno(self):
|
||||
self.rollover()
|
||||
return self._file.fileno()
|
||||
|
@ -562,15 +558,17 @@ class SpooledTemporaryFile:
|
|||
|
||||
@property
|
||||
def mode(self):
|
||||
try:
|
||||
return self._file.mode
|
||||
except AttributeError:
|
||||
return self._TemporaryFileArgs[0]
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
try:
|
||||
return self._file.name
|
||||
|
||||
@property
|
||||
def newlines(self):
|
||||
return self._file.newlines
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
def next(self):
|
||||
return self._file.next
|
||||
|
@ -610,4 +608,7 @@ class SpooledTemporaryFile:
|
|||
return rv
|
||||
|
||||
def xreadlines(self, *args):
|
||||
try:
|
||||
return self._file.xreadlines(*args)
|
||||
except AttributeError:
|
||||
return iter(self._file.readlines(*args))
|
||||
|
|
|
@ -738,6 +738,17 @@ class test_SpooledTemporaryFile(TC):
|
|||
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
|
||||
|
@ -793,6 +804,26 @@ class test_SpooledTemporaryFile(TC):
|
|||
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:
|
||||
|
|
|
@ -202,6 +202,11 @@ Core and Builtins
|
|||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue