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 / apt / package.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  12.7 KB  |  406 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import apt_pkg
  5. import sys
  6. import random
  7. import string
  8.  
  9. class Package(object):
  10.     ''' This class represents a package in the cache
  11.     '''
  12.     
  13.     def __init__(self, cache, depcache, records, sourcelist, pcache, pkgiter):
  14.         ''' Init the Package object '''
  15.         self._cache = cache
  16.         self._depcache = depcache
  17.         self._records = records
  18.         self._pkg = pkgiter
  19.         self._list = sourcelist
  20.         self._pcache = pcache
  21.  
  22.     
  23.     def _lookupRecord(self, UseCandidate = True):
  24.         ''' internal helper that moves the Records to the right
  25.             position, must be called before _records is accessed '''
  26.         if UseCandidate:
  27.             ver = self._depcache.GetCandidateVer(self._pkg)
  28.         else:
  29.             ver = self._pkg.CurrentVer
  30.         if ver == None:
  31.             return False
  32.         
  33.         if ver.FileList == None:
  34.             print 'No FileList for: %s ' % self._pkg.Name()
  35.             return False
  36.         
  37.         (f, index) = ver.FileList.pop(0)
  38.         self._records.Lookup((f, index))
  39.         return True
  40.  
  41.     
  42.     def name(self):
  43.         ''' Return the name of the package '''
  44.         return self._pkg.Name
  45.  
  46.     name = property(name)
  47.     
  48.     def id(self):
  49.         ''' Return a uniq ID for the pkg, can be used to store
  50.             additional information about the pkg '''
  51.         return self._pkg.ID
  52.  
  53.     id = property(id)
  54.     
  55.     def installedVersion(self):
  56.         ''' Return the installed version as string '''
  57.         ver = self._pkg.CurrentVer
  58.         if ver != None:
  59.             return ver.VerStr
  60.         else:
  61.             return None
  62.  
  63.     installedVersion = property(installedVersion)
  64.     
  65.     def candidateVersion(self):
  66.         ''' Return the candidate version as string '''
  67.         ver = self._depcache.GetCandidateVer(self._pkg)
  68.         if ver != None:
  69.             return ver.VerStr
  70.         else:
  71.             return None
  72.  
  73.     candidateVersion = property(candidateVersion)
  74.     
  75.     def _downloadable(self, useCandidate = True):
  76.         ''' helper, return if the version is downloadable '''
  77.         if useCandidate:
  78.             ver = self._depcache.GetCandidateVer(self._pkg)
  79.         else:
  80.             ver = self._pkg.CurrentVer
  81.         if ver == None:
  82.             return False
  83.         
  84.         return ver.Downloadable
  85.  
  86.     
  87.     def candidateDownloadable(self):
  88.         ''' returns if the canidate is downloadable '''
  89.         return self._downloadable(useCandidate = True)
  90.  
  91.     candidateDownloadable = property(candidateDownloadable)
  92.     
  93.     def installedDownloadable(self):
  94.         ''' returns if the installed version is downloadable '''
  95.         return self._downloadable(useCandidate = False)
  96.  
  97.     installedDownloadable = property(installedDownloadable)
  98.     
  99.     def sourcePackageName(self):
  100.         ''' Return the source package name as string '''
  101.         if not self._lookupRecord():
  102.             return None
  103.         
  104.         src = self._records.SourcePkg
  105.         if src != '':
  106.             return src
  107.         else:
  108.             return self._pkg.Name
  109.  
  110.     sourcePackageName = property(sourcePackageName)
  111.     
  112.     def section(self):
  113.         ''' Return the section of the package'''
  114.         return self._pkg.Section
  115.  
  116.     section = property(section)
  117.     
  118.     def priority(self):
  119.         ''' Return the priority (of the candidate version)'''
  120.         ver = self._depcache.GetCandidateVer(self._pkg)
  121.         if ver:
  122.             return ver.PriorityStr
  123.         else:
  124.             return None
  125.  
  126.     priority = property(priority)
  127.     
  128.     def installedPriority(self):
  129.         ''' Return the priority (of the installed version)'''
  130.         ver = self._depcache.GetCandidateVer(self._pkg)
  131.         if ver:
  132.             return ver.PriorityStr
  133.         else:
  134.             return None
  135.  
  136.     installedPriority = property(installedPriority)
  137.     
  138.     def summary(self):
  139.         ''' Return the short description (one line summary) '''
  140.         if not self._lookupRecord():
  141.             return ''
  142.         
  143.         ver = self._depcache.GetCandidateVer(self._pkg)
  144.         desc_iter = ver.TranslatedDescription
  145.         self._records.Lookup(desc_iter.FileList.pop(0))
  146.         return self._records.ShortDesc
  147.  
  148.     summary = property(summary)
  149.     
  150.     def description(self, format = True):
  151.         ''' Return the formated long description '''
  152.         if not self._lookupRecord():
  153.             return ''
  154.         
  155.         ver = self._depcache.GetCandidateVer(self._pkg)
  156.         desc_iter = ver.TranslatedDescription
  157.         self._records.Lookup(desc_iter.FileList.pop(0))
  158.         desc = ''
  159.         for line in string.split(unicode(self._records.LongDesc, 'utf-8'), '\n'):
  160.             tmp = string.strip(line)
  161.             if tmp == '.':
  162.                 desc += '\n'
  163.                 continue
  164.             desc += tmp + '\n'
  165.         
  166.         return desc
  167.  
  168.     description = property(description)
  169.     
  170.     def rawDescription(self):
  171.         ''' return the long description (raw)'''
  172.         if not self._lookupRecord():
  173.             return ''
  174.         
  175.         return self._records.LongDesc
  176.  
  177.     rawDescription = property(rawDescription)
  178.     
  179.     def markedInstall(self):
  180.         ''' Package is marked for install '''
  181.         return self._depcache.MarkedInstall(self._pkg)
  182.  
  183.     markedInstall = property(markedInstall)
  184.     
  185.     def markedUpgrade(self):
  186.         ''' Package is marked for upgrade '''
  187.         return self._depcache.MarkedUpgrade(self._pkg)
  188.  
  189.     markedUpgrade = property(markedUpgrade)
  190.     
  191.     def markedDelete(self):
  192.         ''' Package is marked for delete '''
  193.         return self._depcache.MarkedDelete(self._pkg)
  194.  
  195.     markedDelete = property(markedDelete)
  196.     
  197.     def markedKeep(self):
  198.         ''' Package is marked for keep '''
  199.         return self._depcache.MarkedKeep(self._pkg)
  200.  
  201.     markedKeep = property(markedKeep)
  202.     
  203.     def markedDowngrade(self):
  204.         ''' Package is marked for downgrade '''
  205.         return self._depcache.MarkedDowngrade(self._pkg)
  206.  
  207.     markedDowngrade = property(markedDowngrade)
  208.     
  209.     def markedReinstall(self):
  210.         ''' Package is marked for reinstall '''
  211.         return self._depcache.MarkedReinstall(self._pkg)
  212.  
  213.     markedReinstall = property(markedReinstall)
  214.     
  215.     def isInstalled(self):
  216.         ''' Package is installed '''
  217.         return self._pkg.CurrentVer != None
  218.  
  219.     isInstalled = property(isInstalled)
  220.     
  221.     def isUpgradable(self):
  222.         ''' Package is upgradable '''
  223.         if self.isInstalled:
  224.             pass
  225.         return self._depcache.IsUpgradable(self._pkg)
  226.  
  227.     isUpgradable = property(isUpgradable)
  228.     
  229.     def packageSize(self):
  230.         ''' The size of the candidate deb package '''
  231.         ver = self._depcache.GetCandidateVer(self._pkg)
  232.         return ver.Size
  233.  
  234.     packageSize = property(packageSize)
  235.     
  236.     def installedPackageSize(self):
  237.         ''' The size of the installed deb package '''
  238.         ver = self._pkg.CurrentVer
  239.         return ver.Size
  240.  
  241.     installedPackageSize = property(installedPackageSize)
  242.     
  243.     def candidateInstalledSize(self, UseCandidate = True):
  244.         ''' The size of the candidate installed package '''
  245.         ver = self._depcache.GetCandidateVer(self._pkg)
  246.  
  247.     candidateInstalledSize = property(candidateInstalledSize)
  248.     
  249.     def installedSize(self):
  250.         ''' The size of the currently installed package '''
  251.         ver = self._pkg.CurrentVer
  252.         return ver.InstalledSize
  253.  
  254.     installedSize = property(installedSize)
  255.     
  256.     class Origin:
  257.         
  258.         def __init__(self, pkg, VerFileIter):
  259.             self.component = VerFileIter.Component
  260.             self.archive = VerFileIter.Archive
  261.             self.origin = VerFileIter.Origin
  262.             self.label = VerFileIter.Label
  263.             self.site = VerFileIter.Site
  264.             indexfile = pkg._list.FindIndex(VerFileIter)
  265.             if indexfile and indexfile.IsTrusted:
  266.                 self.trusted = True
  267.             else:
  268.                 self.trusted = False
  269.  
  270.         
  271.         def __repr__(self):
  272.             return "component: '%s' archive: '%s' origin: '%s' label: '%s' site '%s' isTrusted: '%s'" % (self.component, self.archive, self.origin, self.label, self.site, self.trusted)
  273.  
  274.  
  275.     
  276.     def candidateOrigin(self):
  277.         ver = self._depcache.GetCandidateVer(self._pkg)
  278.         if not ver:
  279.             return None
  280.         
  281.         origins = []
  282.         for verFileIter, index in ver.FileList:
  283.             origins.append(self.Origin(self, verFileIter))
  284.         
  285.         return origins
  286.  
  287.     candidateOrigin = property(candidateOrigin)
  288.     
  289.     def markKeep(self):
  290.         ''' mark a package for keep '''
  291.         self._pcache.cachePreChange()
  292.         self._depcache.MarkKeep(self._pkg)
  293.         self._pcache.cachePostChange()
  294.  
  295.     
  296.     def markDelete(self, autoFix = True, purge = False):
  297.         """ mark a package for delete. Run the resolver if autoFix is set.
  298.             Mark the package as purge (remove with configuration) if 'purge'
  299.             is set.
  300.             """
  301.         self._pcache.cachePreChange()
  302.         self._depcache.MarkDelete(self._pkg, purge)
  303.         if autoFix and self._depcache.BrokenCount > 0:
  304.             Fix = apt_pkg.GetPkgProblemResolver(self._depcache)
  305.             Fix.Clear(self._pkg)
  306.             Fix.Protect(self._pkg)
  307.             Fix.Remove(self._pkg)
  308.             Fix.InstallProtect()
  309.             Fix.Resolve()
  310.         
  311.         self._pcache.cachePostChange()
  312.  
  313.     
  314.     def markInstall(self, autoFix = True, autoInst = True):
  315.         ''' mark a package for install. Run the resolver if autoFix is set,
  316.             automatically install required dependencies if autoInst is set
  317.         '''
  318.         self._pcache.cachePreChange()
  319.         self._depcache.MarkInstall(self._pkg, autoInst)
  320.         if autoFix and self._depcache.BrokenCount > 0:
  321.             fixer = apt_pkg.GetPkgProblemResolver(self._depcache)
  322.             fixer.Clear(self._pkg)
  323.             fixer.Protect(self._pkg)
  324.             fixer.Resolve(True)
  325.         
  326.         self._pcache.cachePostChange()
  327.  
  328.     
  329.     def markUpgrade(self):
  330.         ''' mark a package for upgrade '''
  331.         if self.isUpgradable:
  332.             self.markInstall()
  333.         else:
  334.             sys.stderr.write("MarkUpgrade() called on a non-upgrable pkg: '%s'\n" % self._pkg.Name)
  335.  
  336.     
  337.     def commit(self, fprogress, iprogress):
  338.         ''' commit the changes, need a FetchProgress and InstallProgress
  339.             object as argument
  340.         '''
  341.         self._depcache.Commit(fprogress, iprogress)
  342.  
  343.  
  344. if __name__ == '__main__':
  345.     print 'Self-test for the Package modul'
  346.     apt_pkg.init()
  347.     cache = apt_pkg.GetCache()
  348.     depcache = apt_pkg.GetDepCache(cache)
  349.     records = apt_pkg.GetPkgRecords(cache)
  350.     sourcelist = apt_pkg.GetPkgSourceList()
  351.     pkgiter = cache['apt-utils']
  352.     pkg = Package(cache, depcache, records, sourcelist, None, pkgiter)
  353.     print 'Name: %s ' % pkg.name
  354.     print 'ID: %s ' % pkg.id
  355.     print 'Priority (Candidate): %s ' % pkg.priority
  356.     print 'Priority (Installed): %s ' % pkg.installedPriority
  357.     print 'Installed: %s ' % pkg.installedVersion
  358.     print 'Candidate: %s ' % pkg.candidateVersion
  359.     print 'CandidateDownloadable: %s' % pkg.candidateDownloadable
  360.     print 'CandidateOrigins: %s' % pkg.candidateOrigin
  361.     print 'SourcePkg: %s ' % pkg.sourcePackageName
  362.     print 'Section: %s ' % pkg.section
  363.     print 'Summary: %s' % pkg.summary
  364.     print 'Description (formated) :\n%s' % pkg.description
  365.     print 'Description (unformated):\n%s' % pkg.rawDescription
  366.     print 'InstalledSize: %s ' % pkg.installedSize
  367.     print 'PackageSize: %s ' % pkg.packageSize
  368.     import apt
  369.     progress = apt.progress.OpTextProgress()
  370.     cache = apt.Cache(progress)
  371.     for i in [
  372.         True,
  373.         False]:
  374.         print 'Running install on random upgradable pkgs with AutoFix: %s ' % i
  375.         for name in cache.keys():
  376.             pkg = cache[name]
  377.             if pkg.isUpgradable:
  378.                 if random.randint(0, 1) == 1:
  379.                     pkg.markInstall(i)
  380.                 
  381.             
  382.         
  383.         print 'Broken: %s ' % cache._depcache.BrokenCount
  384.         print 'InstCount: %s ' % cache._depcache.InstCount
  385.     
  386.     print 
  387.     for i in [
  388.         True,
  389.         False]:
  390.         print 'Randomly remove some packages with AutoFix: %s' % i
  391.         cache = apt.Cache(progress)
  392.         for name in cache.keys():
  393.             if random.randint(0, 1) == 1:
  394.                 
  395.                 try:
  396.                     cache[name].markDelete(i)
  397.                 except SystemError:
  398.                     print 'Error trying to remove: %s ' % name
  399.  
  400.             
  401.         
  402.         print 'Broken: %s ' % cache._depcache.BrokenCount
  403.         print 'DelCount: %s ' % cache._depcache.DelCount
  404.     
  405.  
  406.