Changing codec lookup order. (was: Re: [Python-Dev] Re: [Python-checkins] python/dist/src/Lib/email/test test_email_codecs.py, 1.4, 1.5)

Hye-Shik Chang perky at i18n.org
Sun Jan 18 17:01:08 EST 2004


On Sun, Jan 18, 2004 at 10:24:12PM +0100, "Martin v. L?wis" wrote:
> 
> I also find that installing JapaneseCodecs on top of a CJK-enabled
> Python 2.4 causes shift_jis to use the CJK codec, not the japanese
> codec.
> 

Aah. We need to change codec lookup order of encodings.search_function
to enable to override default codec by 3rd party one.  With attached
patch, I could get JapaneseCodecs's one.

Now, I admit that CJK codecs are obviously un-backportable to 2.3
due to this change. ;-)


Hye-Shik
-------------- next part --------------
*** __init__.py.orig	Mon Jan 19 06:49:27 2004
--- __init__.py	Mon Jan 19 06:46:16 2004
***************
*** 28,33 ****
--- 28,34 ----
  """#"
  
  import codecs, exceptions, types
+ import aliases
  
  _cache = {}
  _unknown = '--unknown--'
***************
*** 74,96 ****
  
      # Import the module:
      #
!     # First look in the encodings package, then try to lookup the
!     # encoding in the aliases mapping and retry the import using the
!     # default import module lookup scheme with the alias name.
      #
      modname = normalize_encoding(encoding)
!     try:
!         mod = __import__('encodings.' + modname,
!                          globals(), locals(), _import_tail)
!     except ImportError:
!         import aliases
!         modname = (aliases.aliases.get(modname) or
!                    aliases.aliases.get(modname.replace('.', '_')) or
!                    modname)
          try:
!             mod = __import__(modname, globals(), locals(), _import_tail)
          except ImportError:
              mod = None
  
      try:
          getregentry = mod.getregentry
--- 75,97 ----
  
      # Import the module:
      #
!     # First lookup the encoding in the aliases mapping and try the
!     # import using the default import module lookup scheme with the
!     # alias name if available. Then look in the encodings package.
      #
      modname = normalize_encoding(encoding)
!     modnamestry = ['encodings.' + modname]
!     aliasedname = (aliases.aliases.get(modname) or
!                    aliases.aliases.get(modname.replace('.', '_')))
!     if aliasedname is not None:
!         modnamestry.insert(0, aliasedname)
!     for mn in modnamestry:
          try:
!             mod = __import__(mn, globals(), locals(), _import_tail)
          except ImportError:
              mod = None
+         else:
+             break
  
      try:
          getregentry = mod.getregentry
***************
*** 125,131 ****
      except AttributeError:
          pass
      else:
-         import aliases
          for alias in codecaliases:
              if not aliases.aliases.has_key(alias):
                  aliases.aliases[alias] = modname
--- 126,131 ----


More information about the Python-Dev mailing list