When the classes in wave.py opened files themselves, their .close() methods
didn't bother to close the files. This caused the new test_wave test to fail under Windows, as Windows won't let you delete a file that's open. Fixed that by ensuring the wave read & write classes' .close() and __del__ methods close files that were opened by their constructors.
This commit is contained in:
parent
e8d2f5589b
commit
cfc4178e84
26
Lib/wave.py
26
Lib/wave.py
|
@ -152,11 +152,15 @@ class Wave_read:
|
||||||
raise Error, 'fmt chunk and/or data chunk missing'
|
raise Error, 'fmt chunk and/or data chunk missing'
|
||||||
|
|
||||||
def __init__(self, f):
|
def __init__(self, f):
|
||||||
|
self._i_opened_the_file = None
|
||||||
if type(f) == type(''):
|
if type(f) == type(''):
|
||||||
f = __builtin__.open(f, 'rb')
|
f = __builtin__.open(f, 'rb')
|
||||||
|
self._i_opened_the_file = f
|
||||||
# else, assume it is an open file object already
|
# else, assume it is an open file object already
|
||||||
self.initfp(f)
|
self.initfp(f)
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
self.close()
|
||||||
#
|
#
|
||||||
# User visible methods.
|
# User visible methods.
|
||||||
#
|
#
|
||||||
|
@ -168,6 +172,9 @@ class Wave_read:
|
||||||
self._soundpos = 0
|
self._soundpos = 0
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
if self._i_opened_the_file:
|
||||||
|
self._i_opened_the_file.close()
|
||||||
|
self._i_opened_the_file = None
|
||||||
self._file = None
|
self._file = None
|
||||||
|
|
||||||
def tell(self):
|
def tell(self):
|
||||||
|
@ -284,8 +291,10 @@ class Wave_write:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, f):
|
def __init__(self, f):
|
||||||
|
self._i_opened_the_file = None
|
||||||
if type(f) == type(''):
|
if type(f) == type(''):
|
||||||
f = __builtin__.open(f, 'wb')
|
f = __builtin__.open(f, 'wb')
|
||||||
|
self._i_opened_the_file = f
|
||||||
self.initfp(f)
|
self.initfp(f)
|
||||||
|
|
||||||
def initfp(self, file):
|
def initfp(self, file):
|
||||||
|
@ -300,8 +309,7 @@ class Wave_write:
|
||||||
self._datalength = 0
|
self._datalength = 0
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
if self._file:
|
self.close()
|
||||||
self.close()
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# User visible methods.
|
# User visible methods.
|
||||||
|
@ -413,11 +421,15 @@ class Wave_write:
|
||||||
self._patchheader()
|
self._patchheader()
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self._ensure_header_written(0)
|
if self._file:
|
||||||
if self._datalength != self._datawritten:
|
self._ensure_header_written(0)
|
||||||
self._patchheader()
|
if self._datalength != self._datawritten:
|
||||||
self._file.flush()
|
self._patchheader()
|
||||||
self._file = None
|
self._file.flush()
|
||||||
|
self._file = None
|
||||||
|
if self._i_opened_the_file:
|
||||||
|
self._i_opened_the_file.close()
|
||||||
|
self._i_opened_the_file = None
|
||||||
|
|
||||||
#
|
#
|
||||||
# Internal methods.
|
# Internal methods.
|
||||||
|
|
Loading…
Reference in New Issue