I have created a Yum Download Base Callback class to make it easier for
3. party users to create custom download progress bars in a simple
ways.
Comments ?
Tim
diff --git a/yum/callbacks.py b/yum/callbacks.py
index e126f54..c1513a5 100644
--- a/yum/callbacks.py
+++ b/yum/callbacks.py
@@ -47,4 +47,113 @@ class ProcessTransNoOutputCallback:
def event(self,state,data=None):
pass
+
+class DownloadBaseCallback( BaseMeter ):
+ """
+ This is class is a base class to use by implement a download progress
+ handler to be used with YumBase.repos.setProgressBar.
+
+ Example:
+
+ from yum.callbacks import DownloadBaseCallback
+
+ class MyDownloadCallback( DownloadBaseCallback ):
+
+ def updateProgress(self,name,frac,fread,ftime):
+ '''
+ Update the progressbar
+ @param name: filename
+ @param frac: Progress fracment (0 -> 1)
+ @param fread: formated string containing BytesRead
+ @param ftime : formated string containing remaining or elapsed time
+ '''
+ pct = int( frac*100 )
+ print " %s : %s " % (name,pct)
+
+
+ if __name__ == '__main__':
+ my = YumBase()
+ my.doConfigSetup()
+ dnlcb = MyDownloadCallback()
+ my.repos.repos.setProgressBar( dnlcb )
+ for pkg in my.pkgSack:
+ print pkg.name
+
+ """
+
+ def __init__(self):
+ BaseMeter.__init__( self )
+ self.totSize = ""
+ self.oldName = None
+ self.lastPct = 0
+ self.totalPct = 0
+ self.pkgs = None
+ self.numPkgs=0
+ self.bump = 0.0
+
+ def setPackages(self,pkgs,startPct,numPct):
+ self.pkgs = pkgs
+ self.numPkgs = len(self.pkgs)
+ self.bump = numPct/self.numPkgs
+ self.totalPct = startPct
+
+ def _getPackage(self,name):
+ name = name.split('-')[0]
+ if self.pkgs:
+ for pkg in self.pkgs:
+ if pkg.name == name:
+ return pkg
+ return None
+
+ def update( self, amount_read, now=None ):
+ BaseMeter.update( self, amount_read, now )
+
+ def _do_start( self, now=None ):
+ name = self._getName()
+ self.updateProgress(name,0.0,"","")
+ if not self.size is None:
+ self.totSize = format_number( self.size )
+
+ def _do_update( self, amount_read, now=None ):
+ fread = format_number( amount_read )
+ name = self._getName()
+ if self.size is None:
+ # Elapsed time
+ etime = self.re.elapsed_time()
+ fetime = format_time( etime )
+ frac = 0.0
+ self.updateProgress(name,frac,fread,fetime)
+ else:
+ # Remaining time
+ rtime = self.re.remaining_time()
+ frtime = format_time( rtime )
+ frac = self.re.fraction_read()
+ self.updateProgress(name,frac,fread,frtime)
+
+
+ def _do_end( self, amount_read, now=None ):
+ total_time = format_time( self.re.elapsed_time() )
+ total_size = format_number( amount_read )
+ name = self._getName()
+ self.updateProgress(name,1.0,total_size,total_time)
+
+ def _getName(self):
+ '''
+ Get the name of the package being downloaded
+ '''
+ if self.text and type( self.text ) == type( "" ):
+ name = self.text
+ else:
+ name = self.basename
+ return name
+
+ def updateProgress(self,name,frac,fread,ftime):
+ '''
+ Update the progressbar (Overload in child class)
+ @param name: filename
+ @param frac: Progress fracment (0 -> 1)
+ @param fread: formated string containing BytesRead
+ @param ftime : formated string containing remaining or elapsed time
+ '''
+ pass
_______________________________________________
Yum-devel mailing list
Yum-devel@linux.duke.edu
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel