home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / LanguageSelector / LangCache.py < prev    next >
Encoding:
Python Source  |  2006-08-29  |  4.7 KB  |  139 lines

  1. import apt
  2. import apt_pkg
  3.  
  4. from gettext import gettext as _
  5.  
  6. # the language-support information
  7. class LanguageInformation(object):
  8.     def __init__(self):
  9.         self.language = None
  10.         self.languageCode = None
  11.         # langPack stuff
  12.         self.hasLangPack = False
  13.         self.langPackInstalled = False
  14.         self.installLangPack = False
  15.         # langSupport stuff
  16.         self.hasLangSupport = False
  17.         self.langSupportInstalled =False
  18.         self.installLangSupport = False 
  19.     def __str__(self):
  20.         return "%s (%s)" % (self.language, self.languageCode)
  21.  
  22. # the pkgcache stuff
  23. class ExceptionPkgCacheBroken(Exception):
  24.     pass
  25.  
  26. class LanguageSelectorPkgCache(apt.Cache):
  27.  
  28.     # packages that need special translation packs (not covered by
  29.     # the normal langpacks) 
  30.     pkg_translations = [
  31.         ("kdelibs-data", "language-pack-kde-"),
  32.         ("libgnome2-common", "language-pack-gnome-"),
  33.         ("firefox", "mozilla-firefox-locale-"),
  34.         ("mozilla-thunderbird", "mozilla-thunderbird-local-"),
  35.         ("openoffice.org", "openoffice.org-l10n-"),
  36.         ("openoffice.org", "openoffice.org-help-"),
  37.         ("libsword5c2a", "sword-language-pack-")
  38.     ]
  39.  
  40.  
  41.     def __init__(self, localeinfo, progress):
  42.         apt.Cache.__init__(self, progress)
  43.         if self._depcache.BrokenCount > 0:
  44.             raise ExceptionPkgCacheBroken()
  45.         self._localeinfo = localeinfo
  46.         # keep the lists 
  47.         self.to_inst = []
  48.         self.to_rm = []
  49.  
  50.     def clear(self):
  51.         """ clear the selections """
  52.         self._depcache.Init()
  53.         
  54.     def getChangesList(self):
  55.         to_inst = []
  56.         to_rm = []
  57.         for pkg in self.getChanges():
  58.             if pkg.markedInstall or pkg.markedUpgrade:
  59.                 to_inst.append(pkg.name)
  60.             if pkg.markedDelete:
  61.                 to_rm.append(pkg.name)
  62.         return (to_inst,to_rm)
  63.  
  64.     def _getPkgList(self, languageCode):
  65.         """ helper that returns the list of needed pkgs for the language """
  66.         # normal langpack+support first
  67.         pkg_list = ["language-support-%s"%languageCode,
  68.                       "language-pack-%s"%languageCode]
  69.         # see what additional pkgs are needed
  70.         for (pkg, translation) in self.pkg_translations:
  71.             if self.has_key(pkg) and self[pkg].isInstalled:
  72.                 pkg_list.append(translation+languageCode)
  73.         return pkg_list
  74.         
  75.     def tryInstallLanguage(self, languageCode):
  76.         """ mark the given language for install """
  77.         to_inst = []
  78.         for name in self._getPkgList(languageCode):
  79.             if self.has_key(name):
  80.                 try:
  81.                     self[name].markInstall()
  82.                     to_inst.append(name)
  83.                 except SystemError:
  84.                     pass
  85.  
  86.     def tryRemoveLanguage(self, languageCode):
  87.         """ mark the given language for remove """
  88.         to_rm = []
  89.         for name in self._getPkgList(languageCode):
  90.             if self.has_key(name):
  91.                 try:
  92.                     # purge
  93.                     self[name].markDelete(True)
  94.                     to_rm.append(name)
  95.                 except SystemError:
  96.                     pass
  97.     
  98.     def getLanguageInformation(self):
  99.         """ returns a list with language packs/support packages """
  100.         res = []
  101.         for line in open(self._localeinfo._langFile):
  102.             line = line.strip()
  103.             if line.startswith("#"):
  104.                 continue
  105.             (code, lang) = line.split(":")
  106.             li = LanguageInformation()
  107.             li.languageCode = code
  108.             li.language = _(lang)
  109.             li.hasLangPack = self.has_key("language-pack-%s" % code)
  110.             li.hasLangSupport = self.has_key("language-support-%s" % code)
  111.             if li.hasLangPack:
  112.                 li.langPackInstalled = li.installLangPack = self["language-pack-%s" % code].isInstalled
  113.             if  li.hasLangSupport:
  114.                 li.langSupportInstalled = li.installLangSupport = self["language-support-%s" % code].isInstalled
  115.             if li.hasLangPack or li.hasLangSupport:
  116.                 res.append(li)
  117.         return res
  118.  
  119.  
  120. if __name__ == "__main__":
  121.  
  122.     from LocaleInfo import LocaleInfo
  123.     datadir = "/usr/share/language-selector"
  124.     li = LocaleInfo("%s/data/languages" % datadir,
  125.                     "%s/data/countries" % datadir,
  126.                     "%s/data/languagelist" % datadir)
  127.  
  128.     lc = LanguageSelectorPkgCache(li,apt.progress.OpProgress())
  129.     print "available language information"
  130.     print ", ".join(["%s" %x for x in lc.getLanguageInformation()])
  131.  
  132.     print "Trying to install 'zh'"
  133.     lc.tryInstallLanguage("zh")
  134.     print lc.getChangesList()
  135.  
  136.     print "Trying to remove it again"
  137.     lc.tryRemoveLanguage("zh")
  138.     print lc.getChangesList()
  139.