summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/sunau.rst5
-rw-r--r--Doc/whatsnew/3.4.rst7
-rw-r--r--Lib/sunau.py19
-rw-r--r--Lib/test/test_sunau.py22
-rw-r--r--Misc/NEWS3
5 files changed, 47 insertions, 9 deletions
diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst
index 4bdb99b..eae710d 100644
--- a/Doc/library/sunau.rst
+++ b/Doc/library/sunau.rst
@@ -150,8 +150,9 @@ AU_read objects, as returned by :func:`.open` above, have the following methods:
.. method:: AU_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:: AU_read.readframes(n)
diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst
index 218b822..427083a 100644
--- a/Doc/whatsnew/3.4.rst
+++ b/Doc/whatsnew/3.4.rst
@@ -365,6 +365,13 @@ Streaming struct unpacking using :func:`struct.iter_unpack`.
(Contributed by Antoine Pitrou in :issue:`17804`.)
+sunau
+-----
+
+The :meth:`~sunau.getparams` method now returns a namedtuple rather than a
+plain tuple. (Contributed by Claudiu Popa in :issue:`18901`.)
+
+
urllib
------
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 6775a53..7d7cd6c 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -51,7 +51,7 @@ This returns an instance of a class with the following public methods:
getcomptype() -- returns compression type ('NONE' or 'ULAW')
getcompname() -- returns human-readable version of
compression type ('not compressed' matches 'NONE')
- 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)
@@ -103,6 +103,11 @@ The close() method is called automatically when the class instance
is destroyed.
"""
+from collections import namedtuple
+
+_sunau_params = namedtuple('_sunau_params',
+ 'nchannels sampwidth framerate nframes comptype compname')
+
# from <multimedia/audio_filehdr.h>
AUDIO_FILE_MAGIC = 0x2e736e64
AUDIO_FILE_ENCODING_MULAW_8 = 1
@@ -242,9 +247,9 @@ class Au_read:
return 'not compressed'
def getparams(self):
- return self.getnchannels(), self.getsampwidth(), \
- self.getframerate(), self.getnframes(), \
- self.getcomptype(), self.getcompname()
+ return _sunau_params(self.getnchannels(), self.getsampwidth(),
+ self.getframerate(), self.getnframes(),
+ self.getcomptype(), self.getcompname())
def getmarkers(self):
return None
@@ -381,9 +386,9 @@ class Au_write:
self.setcomptype(comptype, compname)
def getparams(self):
- return self.getnchannels(), self.getsampwidth(), \
- self.getframerate(), self.getnframes(), \
- self.getcomptype(), self.getcompname()
+ return _sunau_getparams(self.getnchannels(), self.getsampwidth(),
+ self.getframerate(), self.getnframes(),
+ self.getcomptype(), self.getcompname())
def tell(self):
return self._nframeswritten
diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py
index 339ab57..c381d07 100644
--- a/Lib/test/test_sunau.py
+++ b/Lib/test/test_sunau.py
@@ -1,5 +1,6 @@
from test.support import run_unittest, TESTFN
import unittest
+import pickle
import os
import sunau
@@ -62,6 +63,27 @@ class SunAUTest(unittest.TestCase):
self.assertEqual(self.f.readframes(nframes), output)
self.f.close()
+ def test_getparams(self):
+ self.f = sunau.open(TESTFN, 'w')
+ self.f.setnchannels(nchannels)
+ self.f.setsampwidth(sampwidth)
+ self.f.setframerate(framerate)
+ self.f.setcomptype('ULAW', '')
+ output = b'\0' * nframes * nchannels * sampwidth
+ self.f.writeframes(output)
+ self.f.close()
+
+ self.f = sunau.open(TESTFN, 'rb')
+ params = self.f.getparams()
+ self.assertEqual(params.nchannels, nchannels)
+ self.assertEqual(params.sampwidth, sampwidth)
+ self.assertEqual(params.framerate, framerate)
+ self.assertEqual(params.nframes, nframes)
+ self.assertEqual(params.comptype, 'ULAW')
+
+ dump = pickle.dumps(params)
+ self.assertEqual(pickle.loads(dump), params)
+
def test_main():
run_unittest(SunAUTest)
diff --git a/Misc/NEWS b/Misc/NEWS
index 328f3fe..9539d62 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -54,6 +54,9 @@ Core and Builtins
Library
-------
+- Issue #18901: The sunau getparams method now returns a namedtuple rather than
+ a plain tuple. Patch by Claudiu Popa.
+
- Issue #17487: The result of the wave getparams method now is pickleable again.
Patch by Claudiu Popa.