def log(self, level, *objects, sep=' ', end='\n', indent=0): from craftr.core.session import session module = session.module if session else None if level < self._level: return width = tty.terminal_size()[0] - 1 if self._progress: tty.clear_line() lines = sep.join(map(str, objects)).split('\n') prefix = '' if self._line_alive else self._indent_seq * (self._indent + indent) prefix += tty.compile(self.level_colors[level]) if module: name = '(' + module.manifest.name + ':{})'.format( module.current_line) if lines and module and name != self._last_module_name: self._last_module_name = name rem = width - len(name) - len( self._indent_seq) * (self._indent + indent) if len(lines[0]) < rem - 1: print(prefix + lines[0] + ' ' * (rem - 1 - len(lines[0])), name + tty.reset) lines.pop(0) else: print(' ' * rem + name) for line in lines: print(prefix + line + tty.reset, end=end, file=self._stream) self._line_alive = ('\n' not in end) if self._progress and 'progress' in self._progress: self.progress_update(self._progress['progress'], self._progress['info_text'], _force=True) self._stream.flush()
def log(self, level, *objects, sep=' ', end='\n', indent=0): if level < self._level: return if self._progress: tty.clear_line() prefix = '' if self._line_alive else self._indent_seq * (self._indent + indent) prefix += tty.compile(self.level_colors[level]) content = sep.join(map(str, objects)) for line in content.split('\n'): print(prefix + line + tty.reset, end=end, file=self._stream) self._line_alive = ('\n' not in end) if self._progress and 'progress' in self._progress: self.progress_update(self._progress['progress'], self._progress['info_text'], _force=True)
def progress_update(self, progress, info_text='', *, _force=False): if not self._progress: return info_text = str(info_text) self._progress['progress'] = progress self._progress['info_text'] = info_text ctime = time.time() if not _force and ctime - self._progress['last'] < 0.25: return tty.clear_line() width = 30 if self._progress['spinning']: sign = ('~--', '-~-', '--~')[self._progress['index'] % 3] bar = ''.join(itertools.islice(itertools.cycle(sign), width)) else: intprogress = int(min([1.0, max([0.0, float(progress)])]) * width) bar = '#' * intprogress + ' ' * (width - intprogress) indent = self._indent_seq * self._indent print('{}|{}| {}'.format(indent, bar, info_text), end='', file=self._stream) self._progress['index'] += 1 self._progress['last'] = ctime
def progress_update(self, progress, info_text='', *, _force=False): if not self._progress: return info_text = str(info_text) self._progress['progress'] = progress self._progress['info_text'] = info_text ctime = time.time() if not _force and ctime - self._progress['last'] < 0.25: return tty.clear_line() width = 30 if self._progress['spinning']: sign = ('~--', '-~-', '--~')[self._progress['index'] % 3] bar = ''.join(itertools.islice(itertools.cycle(sign), width)) else: intprogress = int(min([1.0, max([0.0, float(progress)])]) * width) bar = '#' * intprogress + ' ' * (width - intprogress) indent = self._indent_seq * self._indent print('{}|{}| {}'.format(indent, bar, info_text), end='', file=self._stream) self._progress['index'] += 1 self._progress['last'] = ctime self._stream.flush()
def progress_end(self): tty.clear_line() self._progress = None