New submission from Nick Coghlan:

The long discussion in issue 7475 and some subsequent discussions I had with 
Armin Ronacher have made it clear to me that the key distinction between the 
codec systems in Python 2 and Python 3 is the following differences in type 
signatures of various operations:

Python 2 (8 bit str):

    codecs module: object <-> object
    convenience methods: basestring <-> basestring
    available codecs: unicode <-> str, str <-> str, unicode <-> unicode

Python 3 (Unicode str):

    codecs module: object <-> object
    convenience methods: str <-> bytes
    available codecs: str <-> bytes, bytes <-> bytes, str <-> str

The significant distinction is the fact that, in Python 2, the convenience 
methods covered all standard library codecs, but for Python 3, the codecs 
module needs to be used directly for the bytes <-> bytes codecs and the one str 
<-> str codec (since those codecs no longer satisfy the constraints of the text 
model related convenience methods).

After attempting to implement a 2to3 fixer for these non-Unicode codecs in 
issue 17823, I realised that wouldn't really work properly (since it's a data 
driven error based on the behaviour of the named codec), so I'm rejecting that 
proposal and replacing it with this one for additional Py3k warnings in Python 
2.7.7.

My proposal is to take the following cases and make them produce warnings under 
Python 2.7.7 when Py3k warnings are enabled (remember, these are the 2.7 types, 
not the 3.x ones):

- the str.encode method is called (redirect to codecs.encode to handle 
arbitrary input types in a forward compatible way)

- the unicode.decode method is called (redirect to codecs.decode to handle 
arbitrary input types)

- PyUnicode_AsEncodedString produces something other than an 8-bit string 
(redirect to codecs.encode for arbitrary output types)

- PyUnicode_Decode produces something other than a unicode string (redirect to 
codecs.decode for arbitrary output types)

For the latter two cases, issue 17828 includes updates to the Python 3 error 
messages to similarly redirect to the convenience functions in the codecs 
module. However, the removed convenience methods will continue to simply 
trigger AttributeError in Python 3 with no special casing.

----------
components: Interpreter Core
messages: 202512
nosy: ncoghlan
priority: normal
severity: normal
stage: needs patch
status: open
title: Add -3 warnings for codec convenience method changes
type: enhancement
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue19543>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to