Issue #17487: The result of the wave getparams method now is pickleable again.

Patch by Claudiu Popa.
This commit is contained in:
Serhiy Storchaka 2013-09-04 00:28:43 +03:00
parent c6171e49ab
commit 4c6a020a2d
3 changed files with 19 additions and 3 deletions

View File

@ -1,5 +1,6 @@
from test.support import TESTFN, unlink from test.support import TESTFN, unlink
import wave import wave
import pickle
import unittest import unittest
nchannels = 2 nchannels = 2
@ -69,6 +70,18 @@ class TestWave(unittest.TestCase):
self.assertEqual(params.comptype, self.f.getcomptype()) self.assertEqual(params.comptype, self.f.getcomptype())
self.assertEqual(params.compname, self.f.getcompname()) self.assertEqual(params.compname, self.f.getcompname())
def test_getparams_picklable(self):
self.f = wave.open(TESTFN, 'wb')
self.f.setnchannels(nchannels)
self.f.setsampwidth(sampwidth)
self.f.setframerate(framerate)
self.f.close()
self.f = wave.open(TESTFN, 'rb')
params = self.f.getparams()
dump = pickle.dumps(params)
self.assertEqual(pickle.loads(dump), params)
def test_wave_write_context_manager_calls_close(self): def test_wave_write_context_manager_calls_close(self):
# Close checks for a minimum header and will raise an error # Close checks for a minimum header and will raise an error
# if it is not set, so this proves that close is called. # if it is not set, so this proves that close is called.

View File

@ -87,7 +87,7 @@ import sys
from chunk import Chunk from chunk import Chunk
from collections import namedtuple from collections import namedtuple
_result = namedtuple('params', _wave_params = namedtuple('_wave_params',
'nchannels sampwidth framerate nframes comptype compname') 'nchannels sampwidth framerate nframes comptype compname')
class Wave_read: class Wave_read:
@ -212,7 +212,7 @@ class Wave_read:
return self._compname return self._compname
def getparams(self): def getparams(self):
return _result(self.getnchannels(), self.getsampwidth(), return _wave_params(self.getnchannels(), self.getsampwidth(),
self.getframerate(), self.getnframes(), self.getframerate(), self.getnframes(),
self.getcomptype(), self.getcompname()) self.getcomptype(), self.getcompname())
@ -410,7 +410,7 @@ class Wave_write:
def getparams(self): def getparams(self):
if not self._nchannels or not self._sampwidth or not self._framerate: if not self._nchannels or not self._sampwidth or not self._framerate:
raise Error('not all parameters set') raise Error('not all parameters set')
return _result(self._nchannels, self._sampwidth, self._framerate, return _wave_params(self._nchannels, self._sampwidth, self._framerate,
self._nframes, self._comptype, self._compname) self._nframes, self._comptype, self._compname)
def setmark(self, id, pos, name): def setmark(self, id, pos, name):

View File

@ -54,6 +54,9 @@ Core and Builtins
Library Library
------- -------
- Issue #17487: The result of the wave getparams method now is pickleable again.
Patch by Claudiu Popa.
- Issue #18756: os.urandom() now uses a lazily-opened persistent file - Issue #18756: os.urandom() now uses a lazily-opened persistent file
descriptor, so as to avoid using many file descriptors when run in descriptor, so as to avoid using many file descriptors when run in
parallel from multiple threads. parallel from multiple threads.