summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-06-24 06:46:53 (GMT)
committerGitHub <noreply@github.com>2022-06-24 06:46:53 (GMT)
commit6e33ba114ffb47505fec59674c5cce5eb6476f76 (patch)
tree3682df72eda311bea3bb61f8cc59d50a21e514f5
parent5075e81c519af5cf3fd9d356d483b0c9df6b116a (diff)
downloadcpython-6e33ba114ffb47505fec59674c5cce5eb6476f76.zip
cpython-6e33ba114ffb47505fec59674c5cce5eb6476f76.tar.gz
cpython-6e33ba114ffb47505fec59674c5cce5eb6476f76.tar.bz2
gh-94169: Remove deprecated io.OpenWrapper (#94170)
Remove io.OpenWrapper and _pyio.OpenWrapper, deprecated in Python 3.10: just use :func:`open` instead. The open() (io.open()) function is a built-in function. Since Python 3.10, _pyio.open() is also a static method.
-rw-r--r--Doc/whatsnew/3.12.rst6
-rw-r--r--Lib/_pyio.py16
-rw-r--r--Lib/io.py16
-rw-r--r--Lib/test/test_io.py8
-rw-r--r--Misc/NEWS.d/next/Library/2022-06-23-14-35-10.gh-issue-94169.jeba90.rst4
5 files changed, 10 insertions, 40 deletions
diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index 8dde135..52e4d7e 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -208,6 +208,12 @@ Removed
(and corresponding ``EXPERIMENTAL_ISOLATED_SUBINTERPRETERS``)
have been removed.
+* Remove ``io.OpenWrapper`` and ``_pyio.OpenWrapper``, deprecated in Python
+ 3.10: just use :func:`open` instead. The :func:`open` (:func:`io.open`)
+ function is a built-in function. Since Python 3.10, :func:`_pyio.open` is
+ also a static method.
+ (Contributed by Victor Stinner in :gh:`94169`.)
+
Porting to Python 3.12
======================
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 0bfdeaa..1251078 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -303,22 +303,6 @@ except AttributeError:
open_code = _open_code_with_warning
-def __getattr__(name):
- if name == "OpenWrapper":
- # bpo-43680: Until Python 3.9, _pyio.open was not a static method and
- # builtins.open was set to OpenWrapper to not become a bound method
- # when set to a class variable. _io.open is a built-in function whereas
- # _pyio.open is a Python function. In Python 3.10, _pyio.open() is now
- # a static method, and builtins.open() is now io.open().
- import warnings
- warnings.warn('OpenWrapper is deprecated, use open instead',
- DeprecationWarning, stacklevel=2)
- global OpenWrapper
- OpenWrapper = open
- return OpenWrapper
- raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
-
-
# In normal operation, both `UnsupportedOperation`s should be bound to the
# same object.
try:
diff --git a/Lib/io.py b/Lib/io.py
index a205e00..50ce974 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -57,22 +57,6 @@ from _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation,
IncrementalNewlineDecoder, text_encoding, TextIOWrapper)
-def __getattr__(name):
- if name == "OpenWrapper":
- # bpo-43680: Until Python 3.9, _pyio.open was not a static method and
- # builtins.open was set to OpenWrapper to not become a bound method
- # when set to a class variable. _io.open is a built-in function whereas
- # _pyio.open is a Python function. In Python 3.10, _pyio.open() is now
- # a static method, and builtins.open() is now io.open().
- import warnings
- warnings.warn('OpenWrapper is deprecated, use open instead',
- DeprecationWarning, stacklevel=2)
- global OpenWrapper
- OpenWrapper = open
- return OpenWrapper
- raise AttributeError("module {__name__!r} has no attribute {name!r}")
-
-
# Pretend this exception was created here.
UnsupportedOperation.__module__ = "io"
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 129734b..24c93b9 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -4301,14 +4301,6 @@ class MiscIOTest(unittest.TestCase):
proc = assert_python_ok('-X', 'utf8=1', '-c', code)
self.assertEqual(b"utf-8", proc.out.strip())
- @support.cpython_only
- # Depending if OpenWrapper was already created or not, the warning is
- # emitted or not. For example, the attribute is already created when this
- # test is run multiple times.
- @warnings_helper.ignore_warnings(category=DeprecationWarning)
- def test_openwrapper(self):
- self.assertIs(self.io.OpenWrapper, self.io.open)
-
class CMiscIOTest(MiscIOTest):
io = io
diff --git a/Misc/NEWS.d/next/Library/2022-06-23-14-35-10.gh-issue-94169.jeba90.rst b/Misc/NEWS.d/next/Library/2022-06-23-14-35-10.gh-issue-94169.jeba90.rst
new file mode 100644
index 0000000..40c1fc1
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-06-23-14-35-10.gh-issue-94169.jeba90.rst
@@ -0,0 +1,4 @@
+Remove ``io.OpenWrapper`` and ``_pyio.OpenWrapper``, deprecated in Python
+3.10: just use :func:`open` instead. The :func:`open` (:func:`io.open`)
+function is a built-in function. Since Python 3.10, :func:`_pyio.open` is
+also a static method. Patch by Victor Stinner.