Esempio n. 1
0
    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()
Esempio n. 2
0
 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)
Esempio n. 3
0
 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
Esempio n. 4
0
 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()
Esempio n. 5
0
 def progress_end(self):
   tty.clear_line()
   self._progress = None
Esempio n. 6
0
 def progress_end(self):
     tty.clear_line()
     self._progress = None