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.
This commit is contained in:
Victor Stinner 2011-05-27 01:51:18 +02:00
parent c556e10b94
commit 98fe1a0c3b
4 changed files with 148 additions and 59 deletions

View file

@ -345,6 +345,8 @@ class StreamWriter(Codec):
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
@ -416,6 +418,8 @@ class StreamReader(Codec):
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""
@ -846,7 +850,7 @@ class StreamRecoder:
### Shortcuts
def open(filename, mode='rb', encoding=None, errors='strict', buffering=1):
def open(filename, mode='r', encoding=None, errors=None, buffering=1):
""" Open an encoded file using the given mode and return
a wrapped version providing transparent encoding/decoding.
@ -877,18 +881,13 @@ def open(filename, mode='rb', encoding=None, errors='strict', buffering=1):
parameter.
"""
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
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)
def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'):