[Python-checkins] cpython: #17818: aifc.getparams now returns a namedtuple.

r.david.murray python-checkins at python.org
Thu Jul 25 22:12:23 CEST 2013


http://hg.python.org/cpython/rev/560c6e9d1beb
changeset:   84825:560c6e9d1beb
user:        R David Murray <rdmurray at bitdance.com>
date:        Thu Jul 25 16:12:01 2013 -0400
summary:
  #17818: aifc.getparams now returns a namedtuple.

Patch by Claudiu Popa.

files:
  Doc/library/aifc.rst    |   4 ++-
  Doc/whatsnew/3.4.rst    |   6 +++++
  Lib/aifc.py             |  17 +++++++++-----
  Lib/test/test_aifc.py   |  32 +++++++++++++++++++++++++++++
  Lib/test/test_pyclbr.py |   2 +-
  Misc/NEWS               |   2 +
  6 files changed, 55 insertions(+), 8 deletions(-)


diff --git a/Doc/library/aifc.rst b/Doc/library/aifc.rst
--- a/Doc/library/aifc.rst
+++ b/Doc/library/aifc.rst
@@ -96,7 +96,9 @@
 
 .. 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()
diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst
--- a/Doc/whatsnew/3.4.rst
+++ b/Doc/whatsnew/3.4.rst
@@ -173,6 +173,12 @@
 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
 ---------
diff --git a/Lib/aifc.py b/Lib/aifc.py
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -69,7 +69,7 @@
   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 @@
     _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 @@
 ##      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 @@
     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:
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
--- a/Lib/test/test_aifc.py
+++ b/Lib/test/test_aifc.py
@@ -3,6 +3,7 @@
 import os
 import io
 import struct
+import pickle
 
 import aifc
 
@@ -31,6 +32,7 @@
 
     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 @@
             (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:
diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py
--- a/Lib/test/test_pyclbr.py
+++ b/Lib/test/test_pyclbr.py
@@ -158,7 +158,7 @@
         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')
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -166,6 +166,8 @@
 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.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list