diff --git a/Lib/io.py b/Lib/io.py index 3f497b311..a8a31c347 100644 --- a/Lib/io.py +++ b/Lib/io.py @@ -55,15 +55,29 @@ from _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation, open, open_code, BytesIO, StringIO, BufferedReader, BufferedWriter, BufferedRWPair, BufferedRandom, # XXX RUSTPYTHON TODO: IncrementalNewlineDecoder - # IncrementalNewlineDecoder, TextIOWrapper) - TextIOWrapper) + # IncrementalNewlineDecoder, text_encoding, TextIOWrapper) + text_encoding, TextIOWrapper) try: from _io import FileIO except ImportError: pass -OpenWrapper = _io.open # for compatibility with _pyio +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(name) + # Pretend this exception was created here. UnsupportedOperation.__module__ = "io"