Source code for toolchest.decor

#!/usr/bin/env python

import os
import itertools
import sys
import time
import signal

display_color = True
_done = True

HILIGHT = ''
NORMAL = ''

COLORS = {'red': '\033[31m',
          'yellow': '\033[33m',
          'blue': '\033[34m',
          'green': '\033[32m',
          'default': '\033[0m'}


[docs]def ask_yesno(message): ret = input(message + ' [y/N]? ') if ret in ('y', 'Y', 'yes', 'YES'): return True return False
[docs]def color_string(string, color): if display_color is not True: return string ret_string = '' if color in COLORS: ret_string = '{0}{1}{2}'.format(COLORS[color], string, COLORS['default']) else: ret_string = string return ret_string
[docs]def usleep(msec): time.sleep(msec / 1000000.0)
[docs]def exithandler(sig, frame): global _done _done = True
[docs]class Spinner(object): def __init__(self, startmsg='', endmsg=''): global _done self._endmsg = endmsg sys.stdout.write(startmsg) sys.stdout.flush() # No-op when redirecting if not sys.stdout.isatty(): self._pid = -1 return self._pid = os.fork() if self._pid: return signal.signal(signal.SIGTERM, exithandler) _done = False self._spinner = itertools.cycle('-/|\\') sys.stdout.write('\\') while not _done: sys.stdout.write('\b' + next(self._spinner)) sys.stdout.flush() usleep(100000) sys.stdout.write('\b') sys.stdout.flush() exit(0) def __del__(self): if self._pid > 0: os.kill(self._pid, signal.SIGTERM) os.wait() if self._pid != 0: sys.stdout.write(self._endmsg) sys.stdout.flush() def __enter__(self): pass def __exit__(self, t, v, traceback): if t is not None: raise
# Object wrapper around python-prettytable. Fakes it # if prettytable is not installed.
[docs]class PrettyTable(object): def __init__(self, column_names): self.ugly = True self.cols = column_names self.rows = [] self.align = None try: import prettytable self.pt = prettytable.PrettyTable(column_names) self.ugly = False return except ImportError: pass
[docs] def add_row(self, row): if not self.ugly: return self.pt.add_row(row) if len(row) != len(self.cols): msg = 'Row length is {0}, but should be {1}' raise ValueError(msg.format(str(len(row)), str(len(self.cols)))) self.rows.append(row)
[docs] def get_string(self): if not self.ugly: try: if self.align is not None: self.pt.align = self.align except AttributeError as e: print(e) pass return self.pt.get_string() s = '' s = s + '\t'.join([str(q) for q in self.cols]) + '\n' for r in self.rows: s = s + '\t'.join([str(q) for q in r]) + '\n' return s
[docs]def box(msg): print('+-' + ('-' * len(msg)) + '-+') print('| ' + msg + ' |') print('+-' + ('-' * len(msg)) + '-+')
[docs]def line(msg): return '-' * len(msg)