[Patches] [ python-Patches-571603 ] Fix bug in encodings.search_function
noreply@sourceforge.net
noreply@sourceforge.net
Tue, 30 Jul 2002 00:47:33 -0700
Patches item #571603, was opened at 2002-06-20 13:39
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=571603&group_id=5470
Category: Library (Lib)
Group: Python 2.3
Status: Closed
Resolution: Rejected
Priority: 5
Submitted By: Geert Jansen (geertj)
Assigned to: Nobody/Anonymous (nobody)
Summary: Fix bug in encodings.search_function
Initial Comment:
Hi,
there seems to be a bug in the default encoding search
function (search_function in encodings/__init__.py. The
function tries to load a module with the name of the
encoding, but it doesn't require that this module is in the
encodings/ directory. This leads to trouble when you try
to use an encoding that has the name of a module in the
search path.
To demonstrate, save the following line to test.py:
print 'Just testing'.encode('test')
and run it. This results in a CodecRegistryError
exception: "module "test" (test.pyc) failed to register"
The bug is present in 2.2.1 and in HEAD. In HEAD there
was actually a bugfix for this but it was incomplete.
Patches for 2.2.1 and HEAD attached.
Greetings,
Geert Jansen
----------------------------------------------------------------------
>Comment By: Martin v. Löwis (loewis)
Date: 2002-07-30 09:47
Message:
Logged In: YES
user_id=21627
Not sure what you mean by "leak". It is certainly desirable
that modules carry the same name as encodings; in fact,
*every* encoding implemented so far has a module with the
same name.
People have been using u"text".encode("japanese.sjis"),
given that the JapaneseCodecs package installs itself into a
Python package "japanese". That must continue to work. In
particular, you patch broke test.test_charmapcodec; make
sure you test your patches before submitting them.
To solve the problem of .encode("test") giving a registry
error, I have now changed the search_function to ignore
modules that don't have a getregentry function.
----------------------------------------------------------------------
Comment By: Geert Jansen (geertj)
Date: 2002-07-29 19:45
Message:
Logged In: YES
user_id=537938
Hi Martin,
Isn't it wrong to let the module namespace "leak" into the
encodings namespace? This leads to very unexpected
behaviour. Why should it be forbidden to have a module with
the same name as an encoding? This seems rather arbitrary
and solely an implementation detail.
It is still very easy to add an encoding outside the encodings/
directory using the codecs.register() function. Or maybe there
is another solution?
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2002-07-29 15:31
Message:
Logged In: YES
user_id=21627
It's actually not a bug to pass a module outside of
encodings/; the standard search function is supposed to find
other modules as well. So I have to rever thsi change.
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2002-07-28 13:33
Message:
Logged In: YES
user_id=21627
Thanks for the patch; applied as __init__.py 1.9 and 1.6.12.1.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=571603&group_id=5470