Kaydet (Commit) 4c6a020a authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

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

Patch by Claudiu Popa.
üst c6171e49
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): ...@@ -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.
......
...@@ -87,7 +87,7 @@ import sys ...@@ -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: ...@@ -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: ...@@ -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):
......
...@@ -54,6 +54,9 @@ Core and Builtins ...@@ -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.
......
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