from prospector.formatters.base import Formatter __all__ = ( 'TextFormatter', ) # pylint: disable=unnecessary-lambda class TextFormatter(Formatter): summary_labels = ( ('started', 'Started'), ('completed', 'Finished'), ('time_taken', 'Time Taken', lambda x: '%s seconds' % x), ('formatter', 'Formatter'), ('profiles', 'Profiles'), ('strictness', 'Strictness'), ('libraries', 'Libraries Used', lambda x: ', '.join(x)), ('tools', 'Tools Run', lambda x: ', '.join(x)), ('adaptors', 'Adaptors', lambda x: ', '.join(x)), ('message_count', 'Messages Found'), ('external_config', 'External Config'), ) def render_summary(self): output = [ 'Check Information', '=================', ] label_width = max([len(label[1]) for label in self.summary_labels]) for summary_label in self.summary_labels: key = summary_label[0] if key in self.summary: label = summary_label[1] if len(summary_label) > 2: value = summary_label[2](self.summary[key]) else: value = self.summary[key] output.append( ' %s: %s' % ( label.rjust(label_width), value, ) ) return '\n'.join(output) # pylint: disable=no-self-use def render_message(self, message): output = [] if message.location.module: output.append('%s (%s):' % ( message.location.module, message.location.path )) else: output.append('%s:' % message.location.path) output.append( ' L%s:%s %s: %s - %s' % ( message.location.line or '-', message.location.character if message.location.character else '-', message.location.function, message.source, message.code, ) ) output.append(' %s' % message.message) return '\n'.join(output) def render_messages(self): output = [ 'Messages', '========', '', ] for message in self.messages: output.append(self.render_message(message)) output.append('') return '\n'.join(output) def render_profile(self): output = [ 'Profile', '=======', '', self.profile.as_yaml().strip() ] return '\n'.join(output) def render(self, summary=True, messages=True, profile=False): output = [] if messages and self.messages: # if there are no messages, don't render an empty header output.append(self.render_messages()) if profile: output.append(self.render_profile()) if summary: output.append(self.render_summary()) return '\n\n\n'.join(output) + '\n'