Kaydet (Commit) cfc4178e authored tarafından Tim Peters's avatar Tim Peters

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.
üst e8d2f558
...@@ -152,11 +152,15 @@ class Wave_read: ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment