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 = (' ', 'β', 'β', 'β', 'β') | |