mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
Issue #19619: Blacklist non-text codecs in method API
str.encode, bytes.decode and bytearray.decode now use an internal API to throw LookupError for known non-text encodings, rather than attempting the encoding or decoding operation and then throwing a TypeError for an unexpected output type. The latter mechanism remains in place for third party non-text encodings.
This commit is contained in:
parent
322f5ba0d8
commit
c72e4e6dcc
13 changed files with 291 additions and 93 deletions
|
@ -73,9 +73,19 @@ BOM64_BE = BOM_UTF32_BE
|
|||
### Codec base classes (defining the API)
|
||||
|
||||
class CodecInfo(tuple):
|
||||
"""Codec details when looking up the codec registry"""
|
||||
|
||||
# Private API to allow Python 3.4 to blacklist the known non-Unicode
|
||||
# codecs in the standard library. A more general mechanism to
|
||||
# reliably distinguish test encodings from other codecs will hopefully
|
||||
# be defined for Python 3.5
|
||||
#
|
||||
# See http://bugs.python.org/issue19619
|
||||
_is_text_encoding = True # Assume codecs are text encodings by default
|
||||
|
||||
def __new__(cls, encode, decode, streamreader=None, streamwriter=None,
|
||||
incrementalencoder=None, incrementaldecoder=None, name=None):
|
||||
incrementalencoder=None, incrementaldecoder=None, name=None,
|
||||
*, _is_text_encoding=None):
|
||||
self = tuple.__new__(cls, (encode, decode, streamreader, streamwriter))
|
||||
self.name = name
|
||||
self.encode = encode
|
||||
|
@ -84,6 +94,8 @@ class CodecInfo(tuple):
|
|||
self.incrementaldecoder = incrementaldecoder
|
||||
self.streamwriter = streamwriter
|
||||
self.streamreader = streamreader
|
||||
if _is_text_encoding is not None:
|
||||
self._is_text_encoding = _is_text_encoding
|
||||
return self
|
||||
|
||||
def __repr__(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue