[yum-cvs] yum/callbacks.py

Tim Lauridsen timlau at linux.duke.edu
Wed Oct 17 11:59:12 UTC 2007


 yum/callbacks.py |   89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

New commits:
commit 175ddd39f3fd5655f677c968580628f2de766c9d
Author: Tim Lauridsen <tim at localhost.localdomain>
Date:   Wed Oct 17 13:56:41 2007 +0200

    Added a cleanup edition of a DownloadBaseCallback to make it simple to create custom download progress handlers.

diff --git a/yum/callbacks.py b/yum/callbacks.py
index e126f54..35c92dd 100644
--- a/yum/callbacks.py
+++ b/yum/callbacks.py
@@ -47,4 +47,93 @@ 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 = ""   # Total size to download in a formatted string (Kb, MB etc)
+        
+    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
         



More information about the Yum-cvs-commits mailing list