]> granicus.if.org Git - python/commitdiff
Changed .getaliases() support to register the new aliases in the
authorMarc-André Lemburg <mal@egenix.com>
Tue, 12 Dec 2000 14:45:35 +0000 (14:45 +0000)
committerMarc-André Lemburg <mal@egenix.com>
Tue, 12 Dec 2000 14:45:35 +0000 (14:45 +0000)
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.

Lib/encodings/__init__.py

index 8df90209f3a7d87b980fac3528cd1be3c245a41c..51ec8732622d61767a84b4996c65f68a401227b1 100644 (file)
@@ -18,8 +18,9 @@
 
     * 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).
 
@@ -45,6 +46,7 @@ def search_function(encoding):
     try:
         mod = __import__(modname,globals(),locals(),'*')
     except ImportError,why:
+        # cache misses
         _cache[encoding] = None
         return None
     
@@ -63,15 +65,21 @@ def search_function(encoding):
                   'incompatible codecs in module "%s.%s"' % \
                   (__name__,modname)
 
-    # Cache the encoding and its aliases
+    # Cache the codec registry entry
     _cache[encoding] = entry
+
+    # Register its aliases (without overwriting previously registered
+    # aliases)
     try:
         codecaliases = mod.getaliases()
     except AttributeError:
         pass
     else:
         for alias in codecaliases:
-            _cache[alias] = entry
+            if not aliases.aliases.has_key(alias):
+                aliases.aliases[alias] = modname
+
+    # Return the registry entry
     return entry
 
 # Register the search_function in the Python codec registry