def __init__(self, total, template='{i}/{total} {bar:fill}', out=sys.stdout): self.total = total self.template = text_type(template) self.enabled_widgets = list(self._get_widgets()) self.terminal_width = get_terminal_width() self.fmt = Formatter(self.terminal_width) self.start_time = time.time() self.counter = 1 self.out = out self.render()
class Minibar(object): def __init__(self, total, template='{i}/{total} {bar:fill}', out=sys.stdout): self.total = total self.template = text_type(template) self.enabled_widgets = list(self._get_widgets()) self.terminal_width = get_terminal_width() self.fmt = Formatter(self.terminal_width) self.start_time = time.time() self.counter = 1 self.out=out self.render() def _get_widgets(self): avaliable_widgets = dict([(w.name, w) for w in Widget.__subclasses__()]) for _, field_name, _, _ in string.Formatter().parse(self.template): if field_name in avaliable_widgets: yield avaliable_widgets[field_name] def iter(self, iterator): for value in iterator: self.render() self.counter += 1 yield value def render(self): if self.counter <= self.total: elapsed = time.time() - self.start_time kwargs = dict([(w.name, w(self.counter, self.total, elapsed)) for w in self.enabled_widgets]) iprint(self.fmt.format(self.template, **kwargs),self.out) def inc(self, increment=1): self.render() self.counter += increment
def bar(iterator, template='{i}/{total} {bar:fill}', total=None): if total is None: total = len(iterator) # Make sure that template is unicode template = str(template) enabled_widgets = list(get_widgets(template, iterator, total)) terminal_width = get_terminal_width() fmt = Formatter(terminal_width) start_time = time.time() for i, value in enumerate(iterator): elapsed = time.time() - start_time kwargs = {w.name: w(i + 1, total, elapsed) for w in enabled_widgets} iprint(fmt.format(template, **kwargs)) yield value
def __init__(self, total, template='{i}/{total} {bar:fill}'): self.total = total self.template = text_type(template) self.enabled_widgets = list(self._get_widgets()) self.terminal_width = get_terminal_width() self.fmt = Formatter(self.terminal_width) self.start_time = time.time() self.counter = 1 self.render()
def __format__(self, width): if not width: width = 50 bar_width = int(width) - 2 tmp = (((self.counter * 100.0) / self.total) * bar_width) / 100 bar = self.filler[-1] * int(tmp) rest = tmp % 1 if rest: bar += self.filler[int((tmp % 1) * len(self.filler))] return Formatter().format(self.template, bar=bar, bar_width=bar_width)
class TestFormatter(TestCase): def setUp(self): self.formatter = Formatter() def test_get_value_args(self): self.formatter.get_value(0, [1], {2: 'b'}).should.integer.eq(1) def test_get_value_kwargs(self): self.formatter.get_value(u'string_a', [1], { 'string_a': 'string_b' }).should.eq('string_b') def test_get_value_colors(self): self.formatter.get_value(u'black', [1], { 'string_a': 'string_b' }).should.eq('\033[30m') def test_get_value_else(self): self.formatter.get_value(u'string_a', [1], { 'string_c': 'string_b' }).should.eq('{string_a}')
class TestFormatter(TestCase): def setUp(self): self.formatter = Formatter() def test_get_value_args(self): self.formatter.get_value(0, [1], {2: 'b'}).should.integer.eq(1) def test_get_value_kwargs(self): self.formatter.get_value( u'string_a', [1], {'string_a': 'string_b'}).should.eq('string_b') def test_get_value_colors(self): self.formatter.get_value( u'black', [1], {'string_a':'string_b'}).should.eq('\033[30m') def test_get_value_else(self): self.formatter.get_value( u'string_a', [1], {'string_c':'string_b'}).should.eq('{string_a}')
class Minibar(object): def __init__(self, total, template='{i}/{total} {bar:fill}', out=sys.stdout): self.total = total self.template = text_type(template) self.enabled_widgets = list(self._get_widgets()) self.terminal_width = get_terminal_width() self.fmt = Formatter(self.terminal_width) self.start_time = time.time() self.counter = 1 self.out = out self.render() def _get_widgets(self): avaliable_widgets = {w.name: w for w in Widget.__subclasses__()} for _, field_name, _, _ in string.Formatter().parse(self.template): if field_name in avaliable_widgets: yield avaliable_widgets[field_name] def iter(self, iterator): for value in iterator: self.render() self.counter += 1 yield value def render(self): if self.counter <= self.total: elapsed = time.time() - self.start_time kwargs = { w.name: w(self.counter, self.total, elapsed) for w in self.enabled_widgets } iprint(self.fmt.format(self.template, **kwargs), self.out) def inc(self, increment=1): self.render() self.counter += increment
def setUp(self): self.formatter = Formatter()