From 671cd3290bb046060c8173b5c8294e35fd02ca3d Mon Sep 17 00:00:00 2001 From: R David Murray Date: Wed, 10 Apr 2013 12:31:43 -0400 Subject: #17487: wave.getparams now returns a namedtuple. Patch by Claudiu Popa. --- Doc/library/wave.rst | 5 +++-- Doc/whatsnew/3.4.rst | 6 ++++++ Lib/test/test_wave.py | 16 ++++++++++++++++ Lib/wave.py | 16 ++++++++++------ Misc/NEWS | 3 +++ 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Doc/library/wave.rst b/Doc/library/wave.rst index afafb45..2e64d00 100644 --- a/Doc/library/wave.rst +++ b/Doc/library/wave.rst @@ -98,8 +98,9 @@ Wave_read objects, as returned by :func:`.open`, have the following methods: .. method:: Wave_read.getparams() - Returns a tuple ``(nchannels, sampwidth, framerate, nframes, comptype, - compname)``, equivalent to output of the :meth:`get\*` methods. + Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth, + framerate, nframes, comptype, compname)``, equivalent to output of the + :meth:`get\*` methods. .. method:: Wave_read.readframes(n) diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst index a2701a2..75ac8ba 100644 --- a/Doc/whatsnew/3.4.rst +++ b/Doc/whatsnew/3.4.rst @@ -157,6 +157,12 @@ doctest Added ``FAIL_FAST`` flag to halt test running as soon as the first failure is detected. (Contributed by R. David Murray and Daniel Urban in :issue:`16522`.) +wave +---- + +The :meth:`~wave.getparams` method now returns a namedtuple rather than a +plain tuple. (Contributed by Claudiu Popa in :issue:`17487`.) + Optimizations ============= diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py index e0aace4..581d973 100644 --- a/Lib/test/test_wave.py +++ b/Lib/test/test_wave.py @@ -58,6 +58,22 @@ class TestWave(unittest.TestCase): output = b'\0' * nframes * nchannels * sampwidth self.f.writeframes(output) + def test_getparams(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() + self.assertEqual(params.nchannels, self.f.getnchannels()) + self.assertEqual(params.nframes, self.f.getnframes()) + self.assertEqual(params.sampwidth, self.f.getsampwidth()) + self.assertEqual(params.framerate, self.f.getframerate()) + self.assertEqual(params.comptype, self.f.getcomptype()) + self.assertEqual(params.compname, self.f.getcompname()) + def test_main(): run_unittest(TestWave) diff --git a/Lib/wave.py b/Lib/wave.py index 54f0302..e3bf2af 100644 --- a/Lib/wave.py +++ b/Lib/wave.py @@ -18,7 +18,7 @@ This returns an instance of a class with the following public methods: getcomptype() -- returns compression type ('NONE' for linear samples) getcompname() -- returns human-readable version of compression type ('not compressed' linear samples) - getparams() -- returns a tuple consisting of all of the + getparams() -- returns a namedtuple consisting of all of the above in the above order getmarkers() -- returns None (for compatibility with the aifc module) @@ -90,6 +90,10 @@ else: big_endian = 0 from chunk import Chunk +from collections import namedtuple + +_result = namedtuple('params', + 'nchannels sampwidth framerate nframes comptype compname') class Wave_read: """Variables used in this class: @@ -206,9 +210,9 @@ class Wave_read: return self._compname def getparams(self): - return self.getnchannels(), self.getsampwidth(), \ - self.getframerate(), self.getnframes(), \ - self.getcomptype(), self.getcompname() + return _result(self.getnchannels(), self.getsampwidth(), + self.getframerate(), self.getnframes(), + self.getcomptype(), self.getcompname()) def getmarkers(self): return None @@ -398,8 +402,8 @@ class Wave_write: def getparams(self): if not self._nchannels or not self._sampwidth or not self._framerate: raise Error('not all parameters set') - return self._nchannels, self._sampwidth, self._framerate, \ - self._nframes, self._comptype, self._compname + return _result(self._nchannels, self._sampwidth, self._framerate, + self._nframes, self._comptype, self._compname) def setmark(self, id, pos, name): raise Error('setmark() not supported') diff --git a/Misc/NEWS b/Misc/NEWS index ff0226a..6344e6c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -32,6 +32,9 @@ Core and Builtins Library ------- +- Issue #17487: The wave getparams method now returns a namedtuple rather than + a plain tuple. + - Issue #17675: socket repr() provides local and remote addresses (if any). Patch by Giampaolo Rodola' -- cgit v0.12