]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
#17818: aifc.getparams now returns a namedtuple.
authorR David Murray <rdmurray@bitdance.com>
Thu, 25 Jul 2013 20:12:01 +0000 (16:12 -0400)
committerR David Murray <rdmurray@bitdance.com>
Thu, 25 Jul 2013 20:12:01 +0000 (16:12 -0400)
Patch by Claudiu Popa.

Doc/library/aifc.rst
Doc/whatsnew/3.4.rst
Lib/aifc.py
Lib/test/test_aifc.py
Lib/test/test_pyclbr.py
Misc/NEWS

index f8a6ab7ef84bb3860d6296e0b8f182cb2de41478..c1cd215c3ff9fa23a5a8911eed3cafabeefb67b9 100644 (file)
@@ -96,7 +96,9 @@ following methods:
 
 .. method:: aifc.getparams()
 
-   Return a tuple consisting of all of the above values in the above order.
+   Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth,
+   framerate, nframes, comptype, compname)``, equivalent to output of the
+   :meth:`get\*` methods.
 
 
 .. method:: aifc.getmarkers()
index 2b114f135b1839eeb17e3f0d07ce2bd5e6db8245..40b82432c29fe0929641bd93fcc2f100bb20b34a 100644 (file)
@@ -173,6 +173,12 @@ be specified on the command line, and ``-f`` is a shorthand for ``-o
 FAIL_FAST`` (to parallel the similar option supported by the :mod:`unittest`
 CLI).  (Contributed by R. David Murray in :issue:`11390`.)
 
+aifc
+----
+
+The :meth:`~aifc.getparams` method now returns a namedtuple rather than a
+plain tuple.  (Contributed by Claudiu Popa in :issue:`17818`.)
+
 
 functools
 ---------
index 67ea5dadc0bf1819d1b68ca508e148332ad4d2b6..ae5fd6d9e035b67458ee9fb74cca629fa06a2e13 100644 (file)
@@ -69,7 +69,7 @@ This returns an instance of a class with the following public methods:
   getcomptype()   -- returns compression type ('NONE' for AIFF files)
   getcompname()   -- returns human-readable version of
              compression type ('not compressed' for AIFF files)
-  getparams() -- returns a tuple consisting of all of the
+  getparams() -- returns a namedtuple consisting of all of the
              above in the above order
   getmarkers()    -- get the list of marks in the audio file or None
              if there are no marks
@@ -252,6 +252,11 @@ def _write_float(f, x):
     _write_ulong(f, lomant)
 
 from chunk import Chunk
+from collections import namedtuple
+
+_aifc_params = namedtuple('_aifc_params',
+                          'nchannels sampwidth framerate nframes comptype compname')
+
 
 class Aifc_read:
     # Variables used in this class:
@@ -378,9 +383,9 @@ class Aifc_read:
 ##      return self._version
 
     def getparams(self):
-        return self.getnchannels(), self.getsampwidth(), \
-              self.getframerate(), self.getnframes(), \
-              self.getcomptype(), self.getcompname()
+        return _aifc_params(self.getnchannels(), self.getsampwidth(),
+                            self.getframerate(), self.getnframes(),
+                            self.getcomptype(), self.getcompname())
 
     def getmarkers(self):
         if len(self._markers) == 0:
@@ -658,8 +663,8 @@ class Aifc_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 _aifc_params(self._nchannels, self._sampwidth, self._framerate,
+                            self._nframes, self._comptype, self._compname)
 
     def setmark(self, id, pos, name):
         if id <= 0:
index 98d43e42c08844ff680452d74280d291fe1c59e7..05e4ca0a797f7c9af4ad2475d2d6d8c9c8385b01 100644 (file)
@@ -3,6 +3,7 @@ import unittest
 import os
 import io
 import struct
+import pickle
 
 import aifc
 
@@ -31,6 +32,7 @@ class AIFCTest(unittest.TestCase):
 
     def test_params(self):
         f = self.f = aifc.open(self.sndfilepath)
+        params = f.getparams()
         self.assertEqual(f.getfp().name, self.sndfilepath)
         self.assertEqual(f.getnchannels(), 2)
         self.assertEqual(f.getsampwidth(), 2)
@@ -43,6 +45,36 @@ class AIFCTest(unittest.TestCase):
             (2, 2, 48000, 14400, b'NONE', b'not compressed'),
             )
 
+        params = f.getparams()
+        self.assertEqual(params.nchannels, 2)
+        self.assertEqual(params.sampwidth, 2)
+        self.assertEqual(params.framerate, 48000)
+        self.assertEqual(params.nframes, 14400)
+        self.assertEqual(params.comptype, b'NONE')
+        self.assertEqual(params.compname, b'not compressed')
+
+    def test_params_added(self):
+        f = self.f = aifc.open(TESTFN, 'wb')
+        f.aiff()
+        f.setparams((1, 1, 1, 1, b'NONE', b''))
+        f.close()
+
+        f = self.f = aifc.open(TESTFN, 'rb')
+        params = f.getparams()
+        self.assertEqual(params.nchannels, f.getnchannels())
+        self.assertEqual(params.sampwidth, f.getsampwidth())
+        self.assertEqual(params.framerate, f.getframerate())
+        self.assertEqual(params.nframes, f.getnframes())
+        self.assertEqual(params.comptype, f.getcomptype())
+        self.assertEqual(params.compname, f.getcompname())
+
+    def test_getparams_picklable(self):
+        self.f = aifc.open(self.sndfilepath)
+        params = self.f.getparams()
+        dump = pickle.dumps(params)
+        self.assertEqual(pickle.loads(dump), params)
+        self.f.close()
+
     def test_context_manager(self):
         with open(self.sndfilepath, 'rb') as testfile:
             with aifc.open(testfile) as f:
index e83989e2d8e3f75252c9959ddf4c5afd8e6b00c3..c0944550d66e52ef9ba62cbc061785f71b6c79e8 100644 (file)
@@ -158,7 +158,7 @@ class PyclbrTest(TestCase):
         cm('random', ignore=('Random',))  # from _random import Random as CoreGenerator
         cm('cgi', ignore=('log',))      # set with = in module
         cm('pickle')
-        cm('aifc', ignore=('openfp',))  # set with = in module
+        cm('aifc', ignore=('openfp', '_aifc_params'))  # set with = in module
         cm('sre_parse', ignore=('dump',)) # from sre_constants import *
         cm('pdb')
         cm('pydoc')
index dae40a96a39172fc5a24f865aeb8f0784d9a780a..744d7e194d215a0ddc3837ffcf9b01b45bec97d5 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -166,6 +166,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #17818: aifc.getparams now returns a namedtuple.
+
 - Issue #18549: Eliminate dead code in socket_ntohl()
 
 - Issue #18530: Remove additional stat call from posixpath.ismount.