You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
#
 | 
						|
# Copyright (C) 2009 The Android Open Source Project
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
import sys
 | 
						|
from time import time
 | 
						|
 | 
						|
class Progress(object):
 | 
						|
  def __init__(self, title, total=0):
 | 
						|
    self._title = title
 | 
						|
    self._total = total
 | 
						|
    self._done = 0
 | 
						|
    self._lastp = -1
 | 
						|
    self._start = time()
 | 
						|
    self._show = False
 | 
						|
    self._width = 0
 | 
						|
 | 
						|
  def update(self, inc=1, extra=''):
 | 
						|
    self._done += inc
 | 
						|
 | 
						|
    if not self._show:
 | 
						|
      if 0.5 <= time() - self._start:
 | 
						|
        self._show = True
 | 
						|
      else:
 | 
						|
        return
 | 
						|
 | 
						|
    text = None
 | 
						|
 | 
						|
    if self._total <= 0:
 | 
						|
      text = '%s: %3d' % (self._title, self._done)
 | 
						|
    else:
 | 
						|
      p = (100 * self._done) / self._total
 | 
						|
 | 
						|
      if self._lastp != p:
 | 
						|
        self._lastp = p
 | 
						|
        text = '%s: %3d%% (%2d/%2d)' % (self._title, p,
 | 
						|
                                        self._done, self._total)
 | 
						|
 | 
						|
    if text:
 | 
						|
      text += ' ' + extra
 | 
						|
      spaces = max(self._width - len(text), 0)
 | 
						|
      sys.stdout.write('%s%*s\r' % (text, spaces, ''))
 | 
						|
      sys.stdout.flush()
 | 
						|
      self._width = len(text)
 | 
						|
 | 
						|
  def end(self):
 | 
						|
    if not self._show:
 | 
						|
      return
 | 
						|
 | 
						|
    if self._total <= 0:
 | 
						|
      text = '%s: %d, done.' % (
 | 
						|
        self._title,
 | 
						|
        self._done)
 | 
						|
    else:
 | 
						|
      p = (100 * self._done) / self._total
 | 
						|
      text = '%s: %3d%% (%d/%d), done.' % (
 | 
						|
        self._title,
 | 
						|
        p,
 | 
						|
        self._done,
 | 
						|
        self._total)
 | 
						|
 | 
						|
    spaces = max(self._width - len(text), 0)
 | 
						|
    sys.stdout.write('%s%*s\n' % (text, spaces, ''))
 | 
						|
    sys.stdout.flush()
 |