[yum-cvs] yum/yum depsolve.py, 1.96, 1.97 packages.py, 1.61, 1.62 sqlitesack.py, 1.44, 1.45

Seth Vidal skvidal at linux.duke.edu
Sat Sep 2 05:45:10 UTC 2006


Update of /home/groups/yum/cvs/yum/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv10182/yum

Modified Files:
	depsolve.py packages.py sqlitesack.py 
Log Message:

clean up some of the dealing with package objects
setup:
po.provides
po.requires
po.obsoletes
po.conflicts
po.provides_names
po.requires_names
po.obsoletes_names
po.conflicts_names
po.changelog
po.filelist
po.dirlist
po.ghostlist
po.checksums
po.changelog

all as properties. They call out when needed so we shouldn't need to setup
anything to go get them.


Index: depsolve.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/depsolve.py,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -r1.96 -r1.97
--- depsolve.py	1 Sep 2006 19:00:07 -0000	1.96
+++ depsolve.py	2 Sep 2006 05:45:08 -0000	1.97
@@ -110,7 +110,7 @@
         if po.name in self.conf.installonlypkgs:
             return 1
         
-        provides = po.getProvidesNames()
+        provides = po.provides_names
         if filter (lambda prov: prov in self.conf.installonlypkgs, provides):
             return 1
         

Index: packages.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/packages.py,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- packages.py	2 Sep 2006 01:16:30 -0000	1.61
+++ packages.py	2 Sep 2006 05:45:08 -0000	1.62
@@ -117,7 +117,7 @@
        
     def __init__(self):
         self.simple = {} # simple things, name, arch, e,v,r, size, etc
-        self.checksums = [] # (type, checksum, id(0,1)
+        self._checksums = [] # (type, checksum, id(0,1)
         
     def __str__(self):
         if self.returnSimple('epoch') == '0':
@@ -141,7 +141,11 @@
                 self.returnSimple('epoch'),self.returnSimple('version'), 
                 self.returnSimple('release'))
         
+    def returnChecksums(self):
+        return self._checksums
 
+    checksums = property(fget=lambda self: self.returnChecksums())
+    
 class RpmBase:
     """return functions and storage for rpm-specific data"""
 
@@ -155,7 +159,7 @@
         self.files['file'] = []
         self.files['dir'] = []
         self.files['ghost'] = []
-        self.changelog = [] # (ctime, cname, ctext)
+        self._changelog = [] # (ctime, cname, ctext)
         self.licenses = []
 
     def __lt__(self, other):
@@ -266,8 +270,7 @@
         
     def returnChangelog(self):
         """return changelog entries"""
-        # fixme - maybe should die - make 'changelog' just a property/attribute
-        return self.changelog
+        return self._changelog
         
     def returnFileEntries(self, ftype='file'):
         """return list of files based on type"""
@@ -281,16 +284,29 @@
         """return list of types of files in the package"""
         # maybe should die - use direct access to attribute
         return self.files.keys()
-    
-    def returnDirEntries(self):
-        return self.returnFileEntries(ftype='dir')
-    
-    def returnGhostEntries(self):
-        return self.returnFileEntries(ftype='ghost')
 
-    filelists = property(returnFileEntries)
-    dirlists = property(returnDirEntries)
-    ghostlists = property(returnGhostEntries)
+    def returnPrcoNames(self, prcotype):
+        names = []
+        lists = self.returnPrco(prcotype)
+        for (name, flag, vertup) in lists:
+            names.append(name)
+        
+        return names
+        
+        
+    filelist = property(fget=lambda self: self.returnFileEntries(ftype='file'))
+    dirlist = property(fget=lambda self: self.returnFileEntries(ftype='dir'))
+    ghostlist = property(fget=lambda self: self.returnFileEntries(ftype='ghost'))
+    requires = property(fget=lambda self: self.returnPrco('requires'))
+    provides = property(fget=lambda self: self.returnPrco('provides'))
+    obsoletes = property(fget=lambda self: self.returnPrco('obsoletes'))
+    conflicts = property(fget=lambda self: self.returnPrco('conflicts'))
+    provides_names = property(fget=lambda self: self.returnPrcoNames('provides'))
+    requires_names = property(fget=lambda self: self.returnPrcoNames('requires'))
+    conflicts_names = property(fget=lambda self: self.returnPrcoNames('conflicts'))
+    obsoletes_names = property(fget=lambda self: self.returnPrcoNames('obsoletes'))
+    changelog = property(fget=lambda self: self.returnChangelog())
+    
     
 
 class YumAvailablePackage(PackageObject, RpmBase):
@@ -304,7 +320,8 @@
         self.simple['repoid'] = repoid
         self.repoid = repoid
         self.state = None
-        
+        self._loadedfiles = False
+
         if pkgdict != None:
             self.importFromDict(pkgdict)
             # quick, common definitions
@@ -331,36 +348,6 @@
         ver = self.printVer()
         return "%s.%s %s" % (self.name, self.arch, ver)
 
-    def _requires(self):
-        return self.returnPrco('requires')
-    
-    def _provides(self):
-        return self.returnPrco('provides')
-    
-    def _obsoletes(self):
-        return self.returnPrco('obsoletes')
-        
-    def _conflicts(self):
-        return self.returnPrco('conflicts')
-
-    def getProvidesNames(self):
-        """returns a list of providesNames"""
-        
-        provnames = []
-        prov = self.returnPrco('provides')
-        
-        for (name, flag, vertup) in prov:
-            provnames.append(name)
-
-        return provnames
-
-    requires = property(_requires)
-    provides = property(_provides)
-    obsoletes = property(_obsoletes)
-    conflicts = property(_conflicts)
-    providesnames = property(getProvidesNames)
-    
-    
     def _size(self):
         return self.returnSimple('packagesize')
     
@@ -511,7 +498,7 @@
                 if cdict.has_key('date'): date = cdict['date']
                 if cdict.has_key('value'): text = cdict['value']
                 if cdict.has_key('author'): author = cdict['author']
-                self.changelog.append((date, author, text))
+                self._changelog.append((date, author, text))
         
         if hasattr(pkgdict, 'checksum'):
             ctype = pkgdict.checksum['type']
@@ -523,7 +510,7 @@
                 csumid = 1
             else:
                 csumid = 0
-            self.checksums.append((ctype, csum, csumid))
+            self._checksums.append((ctype, csum, csumid))
             
 
 
@@ -547,7 +534,6 @@
         self.description = self.tagByName('description')
         self.pkgid = self.tagByName(rpm.RPMTAG_SHA1HEADER)
         self.size = self.tagByName('size')
-        self.__loadedfiles = False
         self.__mode_cache = {}
         self._populatePrco()
         
@@ -610,7 +596,7 @@
         fileflags = self.tagByName('fileflags')
         filemodes = self.tagByName('filemodes')
         filetuple = zip(files, filemodes, fileflags)
-        if not self.__loadedfiles:
+        if not self._loadedfiles:
             for (file, mode, flag) in filetuple:
                 #garbage checks
                 if mode is None or mode == '':
@@ -639,14 +625,22 @@
                         if not self.files.has_key('file'):
                             self.files['file'] = []
                         self.files['file'].append(file)
-            self.__loadedfiles = True
+            self._loadedfiles = True
             
     def returnFileEntries(self, ftype='file'):
         """return list of files based on type"""
         self._loadFiles()
         return YumAvailablePackage.returnFileEntries(self,ftype)
     
-    filelists = property(returnFileEntries)
+    def returnChangelog(self):
+        # note - if we think it is worth keeping changelogs in memory
+        # then create a _loadChangelog() method to put them into the 
+        # self._changelog attr
+        if len(self.tagByName('changelogname')) > 0:
+            return zip(self.tagByName('changelogname'),
+                       self.tagByName('changelogtime'),
+                       self.tagByName('changelogtext'))
+        return []
 
 class YumInstalledPackage(YumHeaderPackage):
     """super class for dealing with packages in the rpmdb"""

Index: sqlitesack.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/sqlitesack.py,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- sqlitesack.py	2 Sep 2006 01:16:30 -0000	1.44
+++ sqlitesack.py	2 Sep 2006 05:45:08 -0000	1.45
@@ -37,11 +37,7 @@
         self.sack = pkgdict.sack
         self.pkgId = pkgdict.pkgId
         self.simple['id'] = self.pkgId
-        self.changelog = None
-        self.files = None
-        self._checksums = []
-        # so bizarre
-        del self.checksums
+        self._changelog = None
         
     def returnSimple(self, varname):
         db2simplemap = { 'packagesize' : 'size_package',
@@ -84,13 +80,14 @@
             for ob in c.fetchall():
                 self._checksums.append((ob['checksum_type'], ob['checksum_value'], True))
 
+    
+    def returnChecksums(self):
+        self._loadChecksums()
         return self._checksums
-        
-    checksums = property(_loadChecksums)
-            
+
         
     def _loadFiles(self):
-        if self.files is not None:
+        if self._loadedfiles:
             return
         result = {}
         
@@ -118,10 +115,17 @@
                     filename = filenames.pop()
                 filetype = filetypes.pop()
                 result.setdefault(filetype,[]).append(filename)
+        self._loadedfiles = True
         self.files = result
 
-    def returnChangelog(self):
-        if not self.changelog:
+    def _loadChangelog(self):
+        result = []
+        if not self._changelog:
+            if not self.sack.otherdb.has_key(self.repoid):
+                #FIXME should this raise an exception or should it try to populate
+                # the otherdb
+                self._changelog = result
+                return
             cache = self.sack.otherdb[self.repoid]
             cur = cache.cursor()
             cur.execute("select changelog.date as date, "
@@ -131,9 +135,12 @@
                         "and packages.pkgKey = changelog.pkgKey", self.pkgId)
             for ob in cur.fetchall():
                 result.append( (ob['date'], ob['author'], ob['changelog']) )
-            self.changelog = result
-        return self.changelog
-            
+        self._changelog = result
+    
+    def returnChangelog(self):
+        self._loadChangelog()
+        return self._changelog
+    
     def returnFileEntries(self, ftype='file'):
         self._loadFiles()
         return YumAvailablePackage.returnFileEntries(self,ftype)




More information about the Yum-cvs-commits mailing list