[Python-Dev] registering unicode codecs

M.-A. Lemburg mal at egenix.com
Thu Nov 24 20:44:38 CET 2005

Neal Norwitz wrote:
> While running regrtest with -R to find reference leaks I found a usage
> issue.  When a codec is registered it is stored in the interpreter
> state and cannot be removed.  Since it is stored as a list, if you
> repeated add the same search function, you will get duplicates in the
> list and they can't be removed.  This shows up as a reference leak
> (which it really isn't) in test_unicode with this code modified from
> test_codecs_errors:
> import codecs
> def search_function(encoding):
>     def encode1(input, errors="strict"):
>         return 42
>     return (encode1, None, None, None)
> codecs.register(search_function)
> ###
> Should the search function be added to the search path if it is
> already in there?  I don't understand a benefit of having duplicate
> search functions.

Me neither :-) I never expected someone to register a search
function more than once, since there's no point in doing so.

> Should users have access to the search path (through a
> codecs.unregister())?  

Maybe, but why would you want to unregister a search function ?

> If so, should it search from the end of the
> list to the beginning to remove an item?  That way the last entry
> would be removed rather than the first.

I'd suggest to raise an exception in case a user tries
to register a search function twice. Removal should be the
same as doing list.remove(), ie. remove the first (and
only) item in the list of search functions.

Marc-Andre Lemburg

Professional Python Services directly from the Source  (#1, Nov 24 2005)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/

::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::

More information about the Python-Dev mailing list