diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-06-22 18:21:56 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-06-22 18:21:56 +0000 |
commit | 69500d28402817fb70c104501b5c8f4f54650f4a (patch) | |
tree | b718c8028eb09ad8e8fb5e1503df58abb502b712 /pym/_emerge/stdout_spinner.py | |
parent | 13d9a8d5f95575c814570cd4e5713541ed022f37 (diff) | |
download | portage-69500d28402817fb70c104501b5c8f4f54650f4a.tar.gz portage-69500d28402817fb70c104501b5c8f4f54650f4a.tar.bz2 portage-69500d28402817fb70c104501b5c8f4f54650f4a.zip |
Bug #275047 - Split _emerge/__init__.py into smaller pieces (part 2).
Thanks to Sebastian Mingramm (few) <s.mingramm@gmx.de> for this patch.
svn path=/main/trunk/; revision=13667
Diffstat (limited to 'pym/_emerge/stdout_spinner.py')
-rw-r--r-- | pym/_emerge/stdout_spinner.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/pym/_emerge/stdout_spinner.py b/pym/_emerge/stdout_spinner.py new file mode 100644 index 000000000..1f49a6850 --- /dev/null +++ b/pym/_emerge/stdout_spinner.py @@ -0,0 +1,80 @@ +import platform +import sys +import time + +from portage.output import darkgreen, green + +class stdout_spinner(object): + scroll_msgs = [ + "Gentoo Rocks ("+platform.system()+")", + "Thank you for using Gentoo. :)", + "Are you actually trying to read this?", + "How many times have you stared at this?", + "We are generating the cache right now", + "You are paying too much attention.", + "A theory is better than its explanation.", + "Phasers locked on target, Captain.", + "Thrashing is just virtual crashing.", + "To be is to program.", + "Real Users hate Real Programmers.", + "When all else fails, read the instructions.", + "Functionality breeds Contempt.", + "The future lies ahead.", + "3.1415926535897932384626433832795028841971694", + "Sometimes insanity is the only alternative.", + "Inaccuracy saves a world of explanation.", + ] + + twirl_sequence = "/-\\|/-\\|/-\\|/-\\|\\-/|\\-/|\\-/|\\-/|" + + def __init__(self): + self.spinpos = 0 + self.update = self.update_twirl + self.scroll_sequence = self.scroll_msgs[ + int(time.time() * 100) % len(self.scroll_msgs)] + self.last_update = 0 + self.min_display_latency = 0.05 + + def _return_early(self): + """ + Flushing ouput to the tty too frequently wastes cpu time. Therefore, + each update* method should return without doing any output when this + method returns True. + """ + cur_time = time.time() + if cur_time - self.last_update < self.min_display_latency: + return True + self.last_update = cur_time + return False + + def update_basic(self): + self.spinpos = (self.spinpos + 1) % 500 + if self._return_early(): + return + if (self.spinpos % 100) == 0: + if self.spinpos == 0: + sys.stdout.write(". ") + else: + sys.stdout.write(".") + sys.stdout.flush() + + def update_scroll(self): + if self._return_early(): + return + if(self.spinpos >= len(self.scroll_sequence)): + sys.stdout.write(darkgreen(" \b\b\b" + self.scroll_sequence[ + len(self.scroll_sequence) - 1 - (self.spinpos % len(self.scroll_sequence))])) + else: + sys.stdout.write(green("\b " + self.scroll_sequence[self.spinpos])) + sys.stdout.flush() + self.spinpos = (self.spinpos + 1) % (2 * len(self.scroll_sequence)) + + def update_twirl(self): + self.spinpos = (self.spinpos + 1) % len(self.twirl_sequence) + if self._return_early(): + return + sys.stdout.write("\b\b " + self.twirl_sequence[self.spinpos]) + sys.stdout.flush() + + def update_quiet(self): + return |