Exemple #1
0
 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()
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
 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()
Exemple #5
0
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
Exemple #6
0
    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)
Exemple #7
0
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}')
Exemple #8
0
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}')
Exemple #9
0
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
Exemple #10
0
 def setUp(self):
     self.formatter = Formatter()
Exemple #11
0
 def setUp(self):
     self.formatter = Formatter()