home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / LanguageSelector / LangCache.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  9.3 KB  |  272 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import warnings
  5. warnings.filterwarnings('ignore', 'apt API not stable yet', FutureWarning)
  6. import apt
  7. import apt_pkg
  8. from xml.etree.ElementTree import ElementTree
  9. from gettext import gettext as _
  10.  
  11. class LanguagePackageStatus(object):
  12.     
  13.     def __init__(self, pkg_template):
  14.         self.pkgname_template = pkg_template
  15.         self.available = False
  16.         self.installed = False
  17.         self.doChange = False
  18.  
  19.  
  20.  
  21. class LanguageInformation(object):
  22.     
  23.     def __init__(self):
  24.         self.language = None
  25.         self.languageCode = None
  26.         self.languagePkgList = { }
  27.         self.languagePkgList['languagePack'] = LanguagePackageStatus('language-pack-%s')
  28.         self.languagePkgList['languageSupportWritingAids'] = LanguagePackageStatus('language-support-writing-%s')
  29.         self.languagePkgList['languageSupportTranslations'] = LanguagePackageStatus('language-support-translations-%s')
  30.         self.languagePkgList['languageSupportInputMethods'] = LanguagePackageStatus('language-support-input-%s')
  31.         self.languagePkgList['languageSupportFonts'] = LanguagePackageStatus('language-support-fonts-%s')
  32.         self.languagePkgList['languageSupportExtra'] = LanguagePackageStatus('language-support-extra-%s')
  33.  
  34.     
  35.     def inconsistent(self):
  36.         ''' returns True if only parts of the language support packages are installed '''
  37.         if not (self.notInstalled) and not (self.fullInstalled):
  38.             return True
  39.         return False
  40.  
  41.     inconsistent = property(inconsistent)
  42.     
  43.     def fullInstalled(self):
  44.         ''' return True if all of the available language support packages are installed '''
  45.         for pkg in self.languagePkgList.values():
  46.             if not pkg.available:
  47.                 continue
  48.             
  49.             if not (pkg.installed or not (pkg.doChange)) and not (pkg.installed) and pkg.doChange:
  50.                 return False
  51.         
  52.         return True
  53.  
  54.     fullInstalled = property(fullInstalled)
  55.     
  56.     def notInstalled(self):
  57.         ''' return True if none of the available language support packages are installed '''
  58.         for pkg in self.languagePkgList.values():
  59.             if not pkg.available:
  60.                 continue
  61.             
  62.             if not (not (pkg.installed) or not (pkg.doChange)) and pkg.installed and pkg.doChange:
  63.                 return False
  64.         
  65.         return True
  66.  
  67.     notInstalled = property(notInstalled)
  68.     
  69.     def changes(self):
  70.         ''' returns true if anything in the state of the language packs/support changes '''
  71.         for pkg in self.languagePkgList.values():
  72.             if pkg.doChange:
  73.                 return True
  74.         
  75.         return False
  76.  
  77.     changes = property(changes)
  78.     
  79.     def __str__(self):
  80.         return '%s (%s)' % (self.language, self.languageCode)
  81.  
  82.  
  83.  
  84. class ExceptionPkgCacheBroken(Exception):
  85.     pass
  86.  
  87.  
  88. class LanguageSelectorPkgCache(apt.Cache):
  89.     pkg_translations = [
  90.         ('kdelibs-data', 'language-pack-kde-'),
  91.         ('libgnome2-common', 'language-pack-gnome-'),
  92.         ('libsword5c2a', 'sword-language-pack-')]
  93.     
  94.     def __init__(self, localeinfo, progress):
  95.         apt.Cache.__init__(self, progress)
  96.         if self._depcache.BrokenCount > 0:
  97.             raise ExceptionPkgCacheBroken()
  98.         self._depcache.BrokenCount > 0
  99.         self._localeinfo = localeinfo
  100.         self.to_inst = []
  101.         self.to_rm = []
  102.  
  103.     
  104.     def havePackageLists(self):
  105.         ''' verify that a network package lists exists '''
  106.         for metaindex in self._list.List:
  107.             for indexfile in metaindex.IndexFiles:
  108.                 if indexfile.ArchiveURI('').startswith('cdrom:'):
  109.                     continue
  110.                 
  111.                 if indexfile.ArchiveURI('').startswith('http://security.ubuntu.com'):
  112.                     continue
  113.                 
  114.                 if indexfile.Exists and indexfile.HasPackages:
  115.                     return True
  116.             
  117.         
  118.         return False
  119.  
  120.     havePackageLists = property(havePackageLists)
  121.     
  122.     def clear(self):
  123.         ''' clear the selections '''
  124.         self._depcache.Init()
  125.  
  126.     
  127.     def getChangesList(self):
  128.         to_inst = []
  129.         to_rm = []
  130.         for pkg in self.getChanges():
  131.             if pkg.markedInstall or pkg.markedUpgrade:
  132.                 to_inst.append(pkg.name)
  133.             
  134.             if pkg.markedDelete:
  135.                 to_rm.append(pkg.name)
  136.                 continue
  137.         
  138.         return (to_inst, to_rm)
  139.  
  140.     
  141.     def _getPkgList(self, languageCode):
  142.         ''' helper that returns the list of needed pkgs for the language '''
  143.         pkg_list = [
  144.             'language-support-input-%s' % languageCode,
  145.             'language-support-writing-%s' % languageCode,
  146.             'language-support-fonts-%s' % languageCode,
  147.             'language-support-translations-%s' % languageCode,
  148.             'language-support-extra-%s' % languageCode,
  149.             'language-pack-%s' % languageCode]
  150.         for pkg, translation in self.pkg_translations:
  151.             if self.has_key(pkg) and self[pkg].isInstalled:
  152.                 pkg_list.append(translation + languageCode)
  153.                 continue
  154.         
  155.         return pkg_list
  156.  
  157.     
  158.     def tryChangeDetails(self, li):
  159.         ''' change the status of the support details (fonts, input methods) '''
  160.         for item in li.languagePkgList.values():
  161.             if item.doChange:
  162.                 
  163.                 try:
  164.                     if item.installed:
  165.                         self[item.pkgname_template % li.languageCode].markDelete()
  166.                     else:
  167.                         self[item.pkgname_template % li.languageCode].markInstall()
  168.                 except SystemError:
  169.                     pass
  170.                 except:
  171.                     None<EXCEPTION MATCH>SystemError
  172.                 
  173.  
  174.             None<EXCEPTION MATCH>SystemError
  175.         
  176.         item = li.languagePkgList['languagePack']
  177.         if (item.installed or not (item.doChange) or item.available) and not (item.installed) and item.doChange:
  178.             for pkg, translation in self.pkg_translations:
  179.                 if self.has_key(pkg) and self[pkg].isInstalled and self.has_key(translation + li.languageCode) and not (self[translation + li.languageCode].isInstalled):
  180.                     self[translation + li.languageCode].markInstall()
  181.                     continue
  182.             
  183.         elif (not (item.installed) or not (item.doChange) or item.installed) and item.doChange:
  184.             for pkg, translation in self.pkg_translations:
  185.                 if self.has_key(pkg) and self[pkg].isInstalled and self.has_key(translation + li.languageCode) and self[translation + li.languageCode].isInstalled:
  186.                     self[translation + li.languageCode].markDelete()
  187.                     continue
  188.             
  189.         
  190.  
  191.     
  192.     def tryInstallLanguage(self, languageCode):
  193.         ''' mark the given language for install '''
  194.         to_inst = []
  195.         for name in self._getPkgList(languageCode):
  196.             if self.has_key(name):
  197.                 
  198.                 try:
  199.                     self[name].markInstall()
  200.                     to_inst.append(name)
  201.                 except SystemError:
  202.                     pass
  203.  
  204.                 
  205.                 try:
  206.                     self[name].markInstall()
  207.                     to_inst.append(name)
  208.                 except SystemError:
  209.                     pass
  210.                 except:
  211.                     None<EXCEPTION MATCH>SystemError
  212.                 
  213.  
  214.             None<EXCEPTION MATCH>SystemError
  215.         
  216.  
  217.     
  218.     def tryRemoveLanguage(self, languageCode):
  219.         ''' mark the given language for remove '''
  220.         to_rm = []
  221.         for name in self._getPkgList(languageCode):
  222.             if self.has_key(name):
  223.                 
  224.                 try:
  225.                     self[name].markDelete(True)
  226.                     to_rm.append(name)
  227.                 except SystemError:
  228.                     pass
  229.                 except:
  230.                     None<EXCEPTION MATCH>SystemError
  231.                 
  232.  
  233.             None<EXCEPTION MATCH>SystemError
  234.         
  235.  
  236.     
  237.     def getLanguageInformation(self):
  238.         ''' returns a list with language packs/support packages '''
  239.         res = []
  240.         for code, lang in self._localeinfo._lang.items():
  241.             li = LanguageInformation()
  242.             li.languageCode = code
  243.             li.language = lang
  244.             for langpkg_status in li.languagePkgList.values():
  245.                 pkgname = langpkg_status.pkgname_template % code
  246.                 langpkg_status.available = self.has_key(pkgname)
  247.                 if langpkg_status.available:
  248.                     langpkg_status.installed = self[pkgname].isInstalled
  249.                     continue
  250.             
  251.             if len(filter((lambda s: s.available), li.languagePkgList.values())) > 0:
  252.                 res.append(li)
  253.                 continue
  254.         
  255.         return res
  256.  
  257.  
  258. if __name__ == '__main__':
  259.     from LocaleInfo import LocaleInfo
  260.     datadir = '/usr/share/language-selector'
  261.     li = LocaleInfo('%s/data/languagelist' % datadir)
  262.     lc = LanguageSelectorPkgCache(li, apt.progress.OpProgress())
  263.     print 'available language information'
  264.     print []([ '%s' % x for x in lc.getLanguageInformation() ])
  265.     print "Trying to install 'zh'"
  266.     lc.tryInstallLanguage('zh')
  267.     print lc.getChangesList()
  268.     print 'Trying to remove it again'
  269.     lc.tryRemoveLanguage('zh')
  270.     print lc.getChangesList()
  271.  
  272.