From 061da546b983eb767bad15e67af1174fb0bcf31c Mon Sep 17 00:00:00 2001 From: patrick Date: Mon, 3 Aug 2020 14:33:06 +0000 Subject: Import LLVM 10.0.0 release including clang, lld and lldb. ok hackroom tested by plenty --- .../third_party/Python/module/progress/progress.py | 184 +++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 gnu/llvm/lldb/third_party/Python/module/progress/progress.py (limited to 'gnu/llvm/lldb/third_party/Python/module/progress/progress.py') diff --git a/gnu/llvm/lldb/third_party/Python/module/progress/progress.py b/gnu/llvm/lldb/third_party/Python/module/progress/progress.py new file mode 100644 index 00000000000..3397cf04301 --- /dev/null +++ b/gnu/llvm/lldb/third_party/Python/module/progress/progress.py @@ -0,0 +1,184 @@ +#!/usr/bin/python + +from __future__ import print_function + +import use_lldb_suite +import six + +import sys +import time + + +class ProgressBar(object): + """ProgressBar class holds the options of the progress bar. + The options are: + start State from which start the progress. For example, if start is + 5 and the end is 10, the progress of this state is 50% + end State in which the progress has terminated. + width -- + fill String to use for "filled" used to represent the progress + blank String to use for "filled" used to represent remaining space. + format Format + incremental + """ + light_block = six.unichr(0x2591).encode("utf-8") + solid_block = six.unichr(0x2588).encode("utf-8") + solid_right_arrow = six.unichr(0x25BA).encode("utf-8") + + def __init__(self, + start=0, + end=10, + width=12, + fill=six.unichr(0x25C9).encode("utf-8"), + blank=six.unichr(0x25CC).encode("utf-8"), + marker=six.unichr(0x25CE).encode("utf-8"), + format='[%(fill)s%(marker)s%(blank)s] %(progress)s%%', + incremental=True): + super(ProgressBar, self).__init__() + + self.start = start + self.end = end + self.width = width + self.fill = fill + self.blank = blank + self.marker = marker + self.format = format + self.incremental = incremental + self.step = 100 / float(width) # fix + self.reset() + + def __add__(self, increment): + increment = self._get_progress(increment) + if 100 > self.progress + increment: + self.progress += increment + else: + self.progress = 100 + return self + + def complete(self): + self.progress = 100 + return self + + def __str__(self): + progressed = int(self.progress / self.step) # fix + fill = progressed * self.fill + blank = (self.width - progressed) * self.blank + return self.format % { + 'fill': fill, + 'blank': blank, + 'marker': self.marker, + 'progress': int( + self.progress)} + + __repr__ = __str__ + + def _get_progress(self, increment): + return float(increment * 100) / self.end + + def reset(self): + """Resets the current progress to the start point""" + self.progress = self._get_progress(self.start) + return self + + +class AnimatedProgressBar(ProgressBar): + """Extends ProgressBar to allow you to use it straighforward on a script. + Accepts an extra keyword argument named `stdout` (by default use sys.stdout) + and may be any file-object to which send the progress status. + """ + + def __init__(self, + start=0, + end=10, + width=12, + fill=six.unichr(0x25C9).encode("utf-8"), + blank=six.unichr(0x25CC).encode("utf-8"), + marker=six.unichr(0x25CE).encode("utf-8"), + format='[%(fill)s%(marker)s%(blank)s] %(progress)s%%', + incremental=True, + stdout=sys.stdout): + super( + AnimatedProgressBar, + self).__init__( + start, + end, + width, + fill, + blank, + marker, + format, + incremental) + self.stdout = stdout + + def show_progress(self): + if hasattr(self.stdout, 'isatty') and self.stdout.isatty(): + self.stdout.write('\r') + else: + self.stdout.write('\n') + self.stdout.write(str(self)) + self.stdout.flush() + + +class ProgressWithEvents(AnimatedProgressBar): + """Extends AnimatedProgressBar to allow you to track a set of events that + cause the progress to move. For instance, in a deletion progress bar, you + can track files that were nuked and files that the user doesn't have access to + """ + + def __init__(self, + start=0, + end=10, + width=12, + fill=six.unichr(0x25C9).encode("utf-8"), + blank=six.unichr(0x25CC).encode("utf-8"), + marker=six.unichr(0x25CE).encode("utf-8"), + format='[%(fill)s%(marker)s%(blank)s] %(progress)s%%', + incremental=True, + stdout=sys.stdout): + super( + ProgressWithEvents, + self).__init__( + start, + end, + width, + fill, + blank, + marker, + format, + incremental, + stdout) + self.events = {} + + def add_event(self, event): + if event in self.events: + self.events[event] += 1 + else: + self.events[event] = 1 + + def show_progress(self): + isatty = hasattr(self.stdout, 'isatty') and self.stdout.isatty() + if isatty: + self.stdout.write('\r') + else: + self.stdout.write('\n') + self.stdout.write(str(self)) + if len(self.events) == 0: + return + self.stdout.write('\n') + for key in list(self.events.keys()): + self.stdout.write(str(key) + ' = ' + str(self.events[key]) + ' ') + if isatty: + self.stdout.write('\033[1A') + self.stdout.flush() + + +if __name__ == '__main__': + p = AnimatedProgressBar(end=200, width=200) + + while True: + p + 5 + p.show_progress() + time.sleep(0.3) + if p.progress == 100: + break + print() # new line -- cgit v1.2.3-59-g8ed1b