]> granicus.if.org Git - python/commitdiff
#17487: wave.getparams now returns a namedtuple.
authorR David Murray <rdmurray@bitdance.com>
Wed, 10 Apr 2013 16:31:43 +0000 (12:31 -0400)
committerR David Murray <rdmurray@bitdance.com>
Wed, 10 Apr 2013 16:31:43 +0000 (12:31 -0400)
Patch by Claudiu Popa.

Doc/library/wave.rst
Doc/whatsnew/3.4.rst
Lib/test/test_wave.py
Lib/wave.py
Misc/NEWS

index afafb45c55c8a203ababf0812233aae55f345e25..2e64d00305d800440372892eefd82b9d16a02321 100644 (file)
@@ -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)
index a2701a27765f38edc21890905f4bd1e849908093..75ac8ba6eb36e2aee01fdf581a4532a92da371c8 100644 (file)
@@ -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
 =============
index e0aace495c861a5a7e62258af938e5b62ae0901b..581d9739d54f7d5461a262e8331a94b9365eb83c 100644 (file)
@@ -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)
index 54f030267a835fc9dfbb4aebea3ce9bdf3666d9c..e3bf2af53c322e382539a90b1b18c231ea0108ea 100644 (file)
@@ -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')
index ff0226a84478bf22bc10fdf8f573784bfa0b870a..6344e6c51d1c0254eb49a71ed33a15306d415d8c 100644 (file)
--- 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'