home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __license__ = 'GPL v3'
- __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
- import sys
- import re
- import os
-
- class TerminalController:
- BOL = ''
- UP = ''
- DOWN = ''
- LEFT = ''
- RIGHT = ''
- CLEAR_SCREEN = ''
- CLEAR_EOL = ''
- CLEAR_BOL = ''
- CLEAR_EOS = ''
- BOLD = ''
- BLINK = ''
- DIM = ''
- REVERSE = ''
- NORMAL = ''
- HIDE_CURSOR = ''
- SHOW_CURSOR = ''
- COLS = None
- LINES = None
- BLACK = BLUE = GREEN = CYAN = RED = MAGENTA = YELLOW = WHITE = ''
- BG_BLACK = BG_BLUE = BG_GREEN = BG_CYAN = ''
- BG_RED = BG_MAGENTA = BG_YELLOW = BG_WHITE = ''
- _STRING_CAPABILITIES = '\n BOL=cr UP=cuu1 DOWN=cud1 LEFT=cub1 RIGHT=cuf1\n CLEAR_SCREEN=clear CLEAR_EOL=el CLEAR_BOL=el1 CLEAR_EOS=ed BOLD=bold\n BLINK=blink DIM=dim REVERSE=rev UNDERLINE=smul NORMAL=sgr0\n HIDE_CURSOR=cinvis SHOW_CURSOR=cnorm'.split()
- _COLORS = 'BLACK BLUE GREEN CYAN RED MAGENTA YELLOW WHITE'.split()
- _ANSICOLORS = 'BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE'.split()
-
- def __init__(self, term_stream = sys.stdout):
-
- try:
- import curses
- except:
- return None
-
- if os.environ.get('CALIBRE_WORKER', None) is not None and not hasattr(term_stream, 'isatty') or not term_stream.isatty():
- return None
-
- try:
- curses.setupterm()
- except:
- not term_stream.isatty()
- return None
-
- self.COLS = curses.tigetnum('cols')
- self.LINES = curses.tigetnum('lines')
- for capability in self._STRING_CAPABILITIES:
- (attrib, cap_name) = capability.split('=')
- if not self._tigetstr(cap_name):
- pass
- setattr(self, attrib, '')
-
- set_fg = self._tigetstr('setf')
- if set_fg:
- for i, color in zip(range(len(self._COLORS)), self._COLORS):
- if not curses.tparm(set_fg, i):
- pass
- setattr(self, color, '')
-
-
- set_fg_ansi = self._tigetstr('setaf')
- if set_fg_ansi:
- for i, color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS):
- if not curses.tparm(set_fg_ansi, i):
- pass
- setattr(self, color, '')
-
-
- set_bg = self._tigetstr('setb')
- if set_bg:
- for i, color in zip(range(len(self._COLORS)), self._COLORS):
- if not curses.tparm(set_bg, i):
- pass
- setattr(self, 'BG_' + color, '')
-
-
- set_bg_ansi = self._tigetstr('setab')
- if set_bg_ansi:
- for i, color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS):
- if not curses.tparm(set_bg_ansi, i):
- pass
- setattr(self, 'BG_' + color, '')
-
-
-
-
- def _tigetstr(self, cap_name):
- import curses
- if not curses.tigetstr(cap_name):
- pass
- cap = ''
- return re.sub('\\$<\\d+>[/*]?', '', cap)
-
-
- def render(self, template):
- return re.sub('\\$\\$|\\${\\w+}', self._render_sub, template)
-
-
- def _render_sub(self, match):
- s = match.group()
- if s == '$$':
- return s
- return getattr(self, s[2:-1])
-
-
-
- class ProgressBar:
- BAR = '%3d%% ${GREEN}[${BOLD}%s%s${NORMAL}${GREEN}]${NORMAL}\n'
- HEADER = '${BOLD}${CYAN}%s${NORMAL}\n\n'
-
- def __init__(self, term, header, no_progress_bar = False):
- self.term = term
- self.no_progress_bar = no_progress_bar
- if self.term.CLEAR_EOL and self.term.UP:
- pass
- self.fancy = self.term.BOL
- if self.fancy:
- if not self.term.COLS:
- pass
- self.width = 75
- self.bar = term.render(self.BAR)
- self.header = self.term.render(self.HEADER % header.center(self.width))
- if isinstance(self.header, unicode):
- self.header = self.header.encode('utf-8')
-
- self.cleared = 1
-
-
-
- def update(self, percent, message = ''):
- if isinstance(message, unicode):
- message = message.encode('utf-8', 'replace')
-
- if self.no_progress_bar:
- if message:
- print message
-
- elif self.fancy:
- if self.cleared:
- sys.stdout.write(self.header)
- self.cleared = 0
-
- n = int((self.width - 10) * percent)
- msg = message.center(self.width)
- sys.stdout.write(self.term.BOL + self.term.UP + self.term.CLEAR_EOL + self.bar % (100 * percent, '=' * n, '-' * (self.width - 10 - n)) + self.term.CLEAR_EOL + msg)
- sys.stdout.flush()
- elif not message:
- print '%d%%' % percent * 100,
- else:
- print '%d%%' % percent * 100, message
- sys.stdout.flush()
-
-
- def clear(self):
- if self.fancy and not (self.cleared):
- sys.stdout.write(self.term.BOL + self.term.CLEAR_EOL + self.term.UP + self.term.CLEAR_EOL + self.term.UP + self.term.CLEAR_EOL)
- self.cleared = 1
-
-
-
-