From e06a89655a460e7d6571ffea0b72aefef4c0a1cc Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 4 Sep 2013 00:43:03 +0300 Subject: Issue #18901: The sunau getparams method now returns a namedtuple rather than a plain tuple. Patch by Claudiu Popa. --- Doc/library/sunau.rst | 5 +++-- Doc/whatsnew/3.4.rst | 7 +++++++ Lib/sunau.py | 19 ++++++++++++------- Lib/test/test_sunau.py | 22 ++++++++++++++++++++++ Misc/NEWS | 3 +++ 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 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. -- cgit v0.12