Spaces:
Runtime error
Runtime error
# -*- coding: utf-8 -*- | |
# Copyright (c) 2012 Georgios Verigakis <[email protected]> | |
# | |
# Permission to use, copy, modify, and distribute this software for any | |
# purpose with or without fee is hereby granted, provided that the above | |
# copyright notice and this permission notice appear in all copies. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
from __future__ import unicode_literals | |
import sys | |
from . import Progress | |
from .colors import color | |
class Bar(Progress): | |
width = 32 | |
suffix = '%(index)d/%(max)d' | |
bar_prefix = ' |' | |
bar_suffix = '| ' | |
empty_fill = ' ' | |
fill = '#' | |
color = None | |
def update(self): | |
filled_length = int(self.width * self.progress) | |
empty_length = self.width - filled_length | |
message = self.message % self | |
bar = color(self.fill * filled_length, fg=self.color) | |
empty = self.empty_fill * empty_length | |
suffix = self.suffix % self | |
line = ''.join([message, self.bar_prefix, bar, empty, self.bar_suffix, | |
suffix]) | |
self.writeln(line) | |
class ChargingBar(Bar): | |
suffix = '%(percent)d%%' | |
bar_prefix = ' ' | |
bar_suffix = ' ' | |
empty_fill = 'β' | |
fill = 'β' | |
class FillingSquaresBar(ChargingBar): | |
empty_fill = 'β’' | |
fill = 'β£' | |
class FillingCirclesBar(ChargingBar): | |
empty_fill = 'β―' | |
fill = 'β' | |
class IncrementalBar(Bar): | |
if sys.platform.startswith('win'): | |
phases = (u' ', u'β', u'β') | |
else: | |
phases = (' ', 'β', 'β', 'β', 'β', 'β', 'β', 'β', 'β') | |
def update(self): | |
nphases = len(self.phases) | |
filled_len = self.width * self.progress | |
nfull = int(filled_len) # Number of full chars | |
phase = int((filled_len - nfull) * nphases) # Phase of last char | |
nempty = self.width - nfull # Number of empty chars | |
message = self.message % self | |
bar = color(self.phases[-1] * nfull, fg=self.color) | |
current = self.phases[phase] if phase > 0 else '' | |
empty = self.empty_fill * max(0, nempty - len(current)) | |
suffix = self.suffix % self | |
line = ''.join([message, self.bar_prefix, bar, current, empty, | |
self.bar_suffix, suffix]) | |
self.writeln(line) | |
class PixelBar(IncrementalBar): | |
phases = ('β‘', 'β‘', 'β‘', 'β‘', 'β£', '⣧', 'β£·', 'β£Ώ') | |
class ShadyBar(IncrementalBar): | |
phases = (' ', 'β', 'β', 'β', 'β') | |