Skip to content

Commit 4c6a020

Browse files
Issue #17487: The result of the wave getparams method now is pickleable again.
Patch by Claudiu Popa.
1 parent c6171e4 commit 4c6a020

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

Lib/test/test_wave.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from test.support import TESTFN, unlink
22
import wave
3+
import pickle
34
import unittest
45

56
nchannels = 2
@@ -69,6 +70,18 @@ def test_getparams(self):
6970
self.assertEqual(params.comptype, self.f.getcomptype())
7071
self.assertEqual(params.compname, self.f.getcompname())
7172

73+
def test_getparams_picklable(self):
74+
self.f = wave.open(TESTFN, 'wb')
75+
self.f.setnchannels(nchannels)
76+
self.f.setsampwidth(sampwidth)
77+
self.f.setframerate(framerate)
78+
self.f.close()
79+
80+
self.f = wave.open(TESTFN, 'rb')
81+
params = self.f.getparams()
82+
dump = pickle.dumps(params)
83+
self.assertEqual(pickle.loads(dump), params)
84+
7285
def test_wave_write_context_manager_calls_close(self):
7386
# Close checks for a minimum header and will raise an error
7487
# if it is not set, so this proves that close is called.

Lib/wave.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class Error(Exception):
8787
from chunk import Chunk
8888
from collections import namedtuple
8989

90-
_result = namedtuple('params',
90+
_wave_params = namedtuple('_wave_params',
9191
'nchannels sampwidth framerate nframes comptype compname')
9292

9393
class Wave_read:
@@ -212,7 +212,7 @@ def getcompname(self):
212212
return self._compname
213213

214214
def getparams(self):
215-
return _result(self.getnchannels(), self.getsampwidth(),
215+
return _wave_params(self.getnchannels(), self.getsampwidth(),
216216
self.getframerate(), self.getnframes(),
217217
self.getcomptype(), self.getcompname())
218218

@@ -410,7 +410,7 @@ def setparams(self, params):
410410
def getparams(self):
411411
if not self._nchannels or not self._sampwidth or not self._framerate:
412412
raise Error('not all parameters set')
413-
return _result(self._nchannels, self._sampwidth, self._framerate,
413+
return _wave_params(self._nchannels, self._sampwidth, self._framerate,
414414
self._nframes, self._comptype, self._compname)
415415

416416
def setmark(self, id, pos, name):

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ Core and Builtins
5454
Library
5555
-------
5656

57+
- Issue #17487: The result of the wave getparams method now is pickleable again.
58+
Patch by Claudiu Popa.
59+
5760
- Issue #18756: os.urandom() now uses a lazily-opened persistent file
5861
descriptor, so as to avoid using many file descriptors when run in
5962
parallel from multiple threads.

0 commit comments

Comments
 (0)