Unverified Kaydet (Commit) 9f914a01 authored tarafından Brian Curtin's avatar Brian Curtin Kaydeden (comit) GitHub

bpo-31985: Deprecate openfp in aifc, sunau, and wave (#4344)

The openfp functions of aifp, sunau, and wave had pointed to the open
function of each module since 1993 as a matter of backwards
compatibility. In the case of aifc.openfp, it was both undocumented
and untested. This change begins the formal deprecation of those
openfp functions, with their removal coming in 3.9.

This additionally adds a TODO in test_pyclbr around using aifc.openfp,
though it shouldn't be changed until removal in 3.9.
üst 5e0df74b
......@@ -63,6 +63,8 @@ The :mod:`sunau` module defines the following functions:
A synonym for :func:`.open`, maintained for backwards compatibility.
.. deprecated-removed:: 3.7 3.9
The :mod:`sunau` module defines the following exception:
......
......@@ -51,6 +51,8 @@ The :mod:`wave` module defines the following function and exception:
A synonym for :func:`.open`, maintained for backwards compatibility.
.. deprecated-removed:: 3.7 3.9
.. exception:: Error
......
......@@ -915,7 +915,10 @@ def open(f, mode=None):
else:
raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
openfp = open # B/W compatibility
def openfp(f, mode=None):
warnings.warn("aifc.openfp is deprecated since Python 3.7. "
"Use aifc.open instead.", DeprecationWarning, stacklevel=2)
return open(f, mode=mode)
if __name__ == '__main__':
import sys
......
......@@ -160,7 +160,7 @@ def test_wav(h, f):
return None
f.seek(0)
try:
w = wave.openfp(f, 'r')
w = wave.open(f, 'r')
except (EOFError, wave.Error):
return None
return ('wav', w.getframerate(), w.getnchannels(),
......
......@@ -104,6 +104,7 @@ is destroyed.
"""
from collections import namedtuple
import warnings
_sunau_params = namedtuple('_sunau_params',
'nchannels sampwidth framerate nframes comptype compname')
......@@ -522,4 +523,7 @@ def open(f, mode=None):
else:
raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
openfp = open
def openfp(f, mode=None):
warnings.warn("sunau.openfp is deprecated since Python 3.7. "
"Use sunau.open instead.", DeprecationWarning, stacklevel=2)
return open(f, mode=mode)
from test.support import findfile, TESTFN, unlink
import array
import io
from unittest import mock
import pickle
......@@ -49,6 +50,17 @@ class AudioTests:
self.assertEqual(pickle.loads(dump), params)
class AudioMiscTests(AudioTests):
def test_openfp_deprecated(self):
arg = "arg"
mode = "mode"
with mock.patch(f"{self.module.__name__}.open") as mock_open, \
self.assertWarns(DeprecationWarning):
self.module.openfp(arg, mode=mode)
mock_open.assert_called_with(arg, mode=mode)
class AudioWriteTests(AudioTests):
def create_file(self, testfile):
......
......@@ -7,6 +7,7 @@ import io
import sys
import struct
import aifc
import warnings
class AifcTest(audiotests.AudioWriteTests,
......@@ -144,7 +145,9 @@ class AifcALAWTest(AifcTest, unittest.TestCase):
frames = byteswap(frames, 2)
class AifcMiscTest(audiotests.AudioTests, unittest.TestCase):
class AifcMiscTest(audiotests.AudioMiscTests, unittest.TestCase):
module = aifc
def test_skipunknown(self):
#Issue 2245
#This file contains chunk types aifc doesn't recognize.
......
......@@ -223,6 +223,8 @@ class PyclbrTest(TestCase):
cm('random', ignore=('Random',)) # from _random import Random as CoreGenerator
cm('cgi', ignore=('log',)) # set with = in module
cm('pickle', ignore=('partial',))
# TODO(briancurtin): openfp is deprecated as of 3.7.
# Update this once it has been removed.
cm('aifc', ignore=('openfp', '_aifc_params')) # set with = in module
cm('sre_parse', ignore=('dump', 'groups', 'pos')) # from sre_constants import *; property
cm('pdb')
......
......@@ -117,5 +117,9 @@ class SunauULAWTest(SunauTest, unittest.TestCase):
frames = byteswap(frames, 2)
class SunauMiscTests(audiotests.AudioMiscTests, unittest.TestCase):
module = sunau
if __name__ == "__main__":
unittest.main()
......@@ -103,7 +103,9 @@ class WavePCM32Test(WaveTest, unittest.TestCase):
frames = byteswap(frames, 4)
class MiscTestCase(unittest.TestCase):
class MiscTestCase(audiotests.AudioMiscTests, unittest.TestCase):
module = wave
def test__all__(self):
blacklist = {'WAVE_FORMAT_PCM'}
support.check__all__(self, wave, blacklist=blacklist)
......
......@@ -87,6 +87,7 @@ import struct
import sys
from chunk import Chunk
from collections import namedtuple
import warnings
_wave_params = namedtuple('_wave_params',
'nchannels sampwidth framerate nframes comptype compname')
......@@ -502,4 +503,7 @@ def open(f, mode=None):
else:
raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
openfp = open # B/W compatibility
def openfp(f, mode=None):
warnings.warn("wave.openfp is deprecated since Python 3.7. "
"Use wave.open instead.", DeprecationWarning, stacklevel=2)
return open(f, mode=mode)
Formally deprecated aifc.openfp, sunau.openfp, and wave.openfp. Since change
7bc817d5ba917528e8bd07ec461c635291e7b06a in 1993, openfp in each of the three
modules had been pointing to that module's open funciton as a matter of
backwards compatibility, though it had been both untested and undocumented.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment