Progress iterator. Wrap your iterables with it.
    @type it: iterator
    @type label: str
    @type width: int
    @type hide: str, None
    @type empty_char: float
    @type filled_char: float
    @type expected_size: int, None
    @type every: int
    @return: None

def bar(it, label='', width=32, hide=None, empty_char=' ', filled_char=None, expected_size=None, every=1):
    """
    Progress iterator. Wrap your iterables with it.
    @type it: iterator
    @type label: str
    @type width: int
    @type hide: str, None
    @type empty_char: float
    @type filled_char: float
    @type expected_size: int, None
    @type every: int
    @return: None
    """
    if filled_char is None:
        filled_char_tmp = b'\xe2\x96\x88'.decode()
        filled_char = "\033[0;37m" + filled_char_tmp + "\033[0m"

    count = len(it) if expected_size is None else expected_size
    with Bar(label=label, width=width, hide=hide, expected_size=count, every=every, empty_char=empty_char, filled_char=filled_char) as mybar:
        for i, item in enumerate(it):
            if isinstance(item, tuple) and len(item) == 2:
                mybar.label = item[0]
                item = item[1]
            yield item
            mybar.show(i)