File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -578,8 +578,13 @@ def softspace(self):
578578 def tell (self ):
579579 return self ._file .tell ()
580580
581- def truncate (self ):
582- self ._file .truncate ()
581+ def truncate (self , size = None ):
582+ if size is None :
583+ self ._file .truncate ()
584+ else :
585+ if size > self ._max_size :
586+ self .rollover ()
587+ self ._file .truncate (size )
583588
584589 def write (self , s ):
585590 file = self ._file
Original file line number Diff line number Diff line change @@ -846,6 +846,27 @@ def use_closed():
846846 pass
847847 self .assertRaises (ValueError , use_closed )
848848
849+ def test_truncate_with_size_parameter (self ):
850+ # A SpooledTemporaryFile can be truncated to zero size
851+ f = tempfile .SpooledTemporaryFile (max_size = 10 )
852+ f .write (b'abcdefg\n ' )
853+ f .seek (0 )
854+ f .truncate ()
855+ self .assertFalse (f ._rolled )
856+ self .assertEqual (f ._file .getvalue (), b'' )
857+ # A SpooledTemporaryFile can be truncated to a specific size
858+ f = tempfile .SpooledTemporaryFile (max_size = 10 )
859+ f .write (b'abcdefg\n ' )
860+ f .truncate (4 )
861+ self .assertFalse (f ._rolled )
862+ self .assertEqual (f ._file .getvalue (), b'abcd' )
863+ # A SpooledTemporaryFile rolls over if truncated to large size
864+ f = tempfile .SpooledTemporaryFile (max_size = 10 )
865+ f .write (b'abcdefg\n ' )
866+ f .truncate (20 )
867+ self .assertTrue (f ._rolled )
868+ if has_stat :
869+ self .assertEqual (os .fstat (f .fileno ()).st_size , 20 )
849870
850871test_classes .append (test_SpooledTemporaryFile )
851872
Original file line number Diff line number Diff line change @@ -386,10 +386,12 @@ Core and Builtins
386386- Issue #12380: The rjust, ljust and center methods of bytes and bytearray
387387 now accept a bytearray argument.
388388
389-
390389Library
391390-------
392391
392+ - Issue #9957: SpooledTemporaryFile.truncate() now accepts an optional size
393+ parameter, as other file-like objects. Patch by Ryan Kelly.
394+
393395- Issue #13458: Fix a memory leak in the ssl module when decoding a
394396 certificate with a subjectAltName. Patch by Robert Xiao.
395397
You can’t perform that action at this time.
0 commit comments