Changed .getaliases() support to register the new aliases in the

encodings package aliases mapping dictionary rather than in the
internal cache used by the search function.

This enables aliases to take advantage of the full normalization
process applied to encoding names which was previously not available.

The patch restricts alias registration to new aliases. Existing
aliases cannot be overridden anymore.
This commit is contained in:
Marc-André Lemburg 2000-12-12 14:45:35 +00:00
parent 5fa0bd64a8
commit 988ad2bdff
1 changed files with 12 additions and 4 deletions

View File

@ -18,8 +18,9 @@
* getaliases() -> sequence of encoding name strings to use as aliases * getaliases() -> sequence of encoding name strings to use as aliases
Alias names returned by getaliases() must be lower-case. Alias names returned by getaliases() must be standard encoding
names as defined above (lower-case, hyphens converted to
underscores).
Written by Marc-Andre Lemburg (mal@lemburg.com). Written by Marc-Andre Lemburg (mal@lemburg.com).
@ -45,6 +46,7 @@ def search_function(encoding):
try: try:
mod = __import__(modname,globals(),locals(),'*') mod = __import__(modname,globals(),locals(),'*')
except ImportError,why: except ImportError,why:
# cache misses
_cache[encoding] = None _cache[encoding] = None
return None return None
@ -63,15 +65,21 @@ def search_function(encoding):
'incompatible codecs in module "%s.%s"' % \ 'incompatible codecs in module "%s.%s"' % \
(__name__,modname) (__name__,modname)
# Cache the encoding and its aliases # Cache the codec registry entry
_cache[encoding] = entry _cache[encoding] = entry
# Register its aliases (without overwriting previously registered
# aliases)
try: try:
codecaliases = mod.getaliases() codecaliases = mod.getaliases()
except AttributeError: except AttributeError:
pass pass
else: else:
for alias in codecaliases: for alias in codecaliases:
_cache[alias] = entry if not aliases.aliases.has_key(alias):
aliases.aliases[alias] = modname
# Return the registry entry
return entry return entry
# Register the search_function in the Python codec registry # Register the search_function in the Python codec registry