Changeset 11396:b02e47b49559 in orange


Ignore:
Timestamp:
03/12/13 15:52:06 (13 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Prevent a ZeroDivisionError in DownloadProgress class.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/utils/serverfiles.py

    r10581 r11396  
    624624    return found 
    625625 
     626 
    626627def search(sstrings, **kwargs): 
    627628    """Search for files in the local repository where all substrings in a list  
     
    632633    return _search(si, sstrings, **kwargs) 
    633634 
     635 
     636def sizeformat(size): 
     637    """ 
     638    >>> sizeformat(256) 
     639    256 bytes 
     640    >>> sizeformat(1024) 
     641    1.0 KB 
     642    >>> sizeformat(1.5 * 2 ** 20) 
     643    1.5 MB 
     644 
     645    """ 
     646    for unit in ['bytes', 'KB', 'MB', 'GB', 'TB']: 
     647        if size < 1024.0: 
     648            if unit == "bytes": 
     649                return "%1.0f %s" % (size, unit) 
     650            else: 
     651                return "%3.1f %s" % (size, unit) 
     652        size /= 1024.0 
     653    return "%.1f PB" % size 
     654 
     655 
    634656class DownloadProgress(ConsoleProgressBar): 
    635657    redirect = None 
    636658    lock = threading.RLock() 
    637     def sizeof_fmt(num): 
    638         for x in ['bytes','KB','MB','GB','TB']: 
    639             if num < 1024.0: 
    640                 return "%3.1f %s" % (num, x) if x <> 'bytes' else "%1.0f %s" % (num, x) 
    641             num /= 1024.0 
    642              
     659 
    643660    def __init__(self, filename, size): 
    644661        print "Downloading", filename 
     
    649666 
    650667    def sizeof_fmt(self, num): 
    651         for x in ['bytes','KB','MB','GB','TB']: 
    652             if num < 1024.0: 
    653                 return "%3.1f %s" % (num, x) if x <> 'bytes' else "%1.0f %s" % (num, x) 
    654             num /= 1024.0 
     668        return sizeformat(num) 
    655669 
    656670    def getstring(self): 
    657         speed = int(self.state * self.size / 100.0 / (time.time() - self.starttime)) 
     671        elapsed = max(time.time() - self.starttime, 0.1) 
     672        speed = int(self.state * self.size / 100.0 / elapsed) 
    658673        eta = (100 - self.state) * self.size / 100.0 / speed 
    659         return ConsoleProgressBar.getstring(self) + "  %s  %12s/s  %3i:%02i ETA" % (self.sizeof_fmt(self.size), self.sizeof_fmt(speed), eta/60, eta%60) 
    660          
     674        return ConsoleProgressBar.getstring(self) + \ 
     675               "  %s  %12s/s  %3i:%02i ETA" % (self.sizeof_fmt(self.size), 
     676                                               self.sizeof_fmt(speed), 
     677                                               eta / 60, eta % 60) 
     678 
    661679    def __call__(self, *args, **kwargs): 
    662680        ret = ConsoleProgressBar.__call__(self, *args, **kwargs) 
     
    664682            self.redirect(self.state) 
    665683        return ret 
    666      
     684 
    667685    class RedirectContext(object): 
    668686        def __enter__(self): 
    669687            DownloadProgress.lock.acquire() 
    670688            return DownloadProgress 
    671          
     689 
    672690        def __exit__(self, ex_type, value, tb): 
    673691            DownloadProgress.redirect = None 
    674692            DownloadProgress.lock.release() 
    675693            return False 
    676          
     694 
    677695    @classmethod 
    678696    def setredirect(cls, redirect): 
    679697        cls.redirect = staticmethod(redirect) 
    680698        return cls.RedirectContext() 
    681      
     699 
    682700    @classmethod 
    683701    def __enter__(cls): 
    684702        cls.lock.acquire() 
    685703        return cls 
    686      
     704 
    687705    @classmethod 
    688706    def __exit__(cls, exc_type, exc_value, traceback): 
    689707        cls.lock.release() 
    690708        return False 
     709 
    691710 
    692711def consoleupdate(domains=None, searchstr="essential"): 
Note: See TracChangeset for help on using the changeset viewer.