Revert my commit 3555cf6f9c98: "Issue #8796: codecs.open() calls the builtin
open() function instead of using StreamReaderWriter. Deprecate StreamReader,
StreamWriter, StreamReaderWriter, StreamRecoder and EncodedFile() of the codec
module. Use the builtin open() function or io.TextIOWrapper instead."
"It has not been approved !" wrote Marc-Andre Lemburg.
diff --git a/Lib/codecs.py b/Lib/codecs.py
index ec7879f..b150d64 100644
--- a/Lib/codecs.py
+++ b/Lib/codecs.py
@@ -345,8 +345,6 @@
The set of allowed parameter values can be extended via
register_error.
"""
- import warnings
- warnings.warn('use io.TextIOWrapper', DeprecationWarning, stacklevel=2)
self.stream = stream
self.errors = errors
@@ -418,8 +416,6 @@
The set of allowed parameter values can be extended via
register_error.
"""
- import warnings
- warnings.warn('use io.TextIOWrapper', DeprecationWarning, stacklevel=2)
self.stream = stream
self.errors = errors
self.bytebuffer = b""
@@ -850,7 +846,7 @@
### Shortcuts
-def open(filename, mode='r', encoding=None, errors=None, buffering=1):
+def open(filename, mode='rb', encoding=None, errors='strict', buffering=1):
""" Open an encoded file using the given mode and return
a wrapped version providing transparent encoding/decoding.
@@ -881,13 +877,18 @@
parameter.
"""
- if encoding is not None:
- return builtins.open(filename, mode, buffering,
- encoding, errors, newline='')
- else:
- if 'b' not in mode:
- mode = mode + 'b'
- return builtins.open(filename, mode, buffering, encoding, errors)
+ if encoding is not None and \
+ 'b' not in mode:
+ # Force opening of the file in binary mode
+ mode = mode + 'b'
+ file = builtins.open(filename, mode, buffering)
+ if encoding is None:
+ return file
+ info = lookup(encoding)
+ srw = StreamReaderWriter(file, info.streamreader, info.streamwriter, errors)
+ # Add attributes to simplify introspection
+ srw.encoding = encoding
+ return srw
def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'):