def execute(self): summary = { 'started': datetime.now(), } summary.update(self.config.get_summary_information()) found_files = find_python(self.config.ignores, self.config.paths, self.config.explicit_file_mode, self.config.workdir) # Run the tools messages = [] for tool in self.config.get_tools(found_files): for name, cls in tools.TOOLS.items(): if cls == tool.__class__: toolname = name break else: toolname = 'Unknown' try: # Tools can output to stdout/stderr in unexpected places, for example, # pep257 emits warnings about __all__ and as pyroma exec's the setup.py # file, it will execute any print statements in that, etc etc... with capture_output(hide=not self.config.direct_tool_stdout) as capture: messages += tool.run(found_files) if self.config.include_tool_stdout: loc = Location(self.config.workdir, None, None, None, None) if capture.get_hidden_stderr(): msg = 'stderr from %s:\n%s' % (toolname, capture.get_hidden_stderr()) messages.append(Message(toolname, 'hidden-output', loc, message=msg)) if capture.get_hidden_stdout(): msg = 'stdout from %s:\n%s' % (toolname, capture.get_hidden_stdout()) messages.append(Message(toolname, 'hidden-output', loc, message=msg)) except Exception: # pylint: disable=broad-except if self.config.die_on_tool_error: raise else: loc = Location(self.config.workdir, None, None, None, None) msg = 'Tool %s failed to run (exception was raised)' % ( toolname, ) message = Message( toolname, 'failure', loc, message=msg, ) messages.append(message) messages = self.process_messages(found_files, messages) summary['message_count'] = len(messages) summary['completed'] = datetime.now() # Timedelta.total_seconds() is not available # on Python<=2.6 so we calculate it ourselves # See issue #60 and http://stackoverflow.com/a/3694895 delta = (summary['completed'] - summary['started']) total_seconds = (delta.microseconds + (delta.seconds + delta.days * 24 * 3600) * 1e6) / 1e6 summary['time_taken'] = '%0.2f' % total_seconds external_config = [] for tool, configured_by in self.config.configured_by.items(): if configured_by is not None: external_config.append((tool, configured_by)) if len(external_config) > 0: summary['external_config'] = ', '.join(['%s: %s' % info for info in external_config]) self.summary = summary self.messages = self.messages + messages
def execute(self): summary = { 'started': datetime.now(), } summary.update(self.config.get_summary_information()) found_files = find_python(self.config.ignores, self.config.paths, self.config.explicit_file_mode, self.config.workdir) # Run the tools messages = [] for tool in self.config.get_tools(found_files): for name, cls in tools.TOOLS.items(): if cls == tool.__class__: toolname = name break else: toolname = 'Unknown' try: # Tools can output to stdout/stderr in unexpected places, for example, # pep257 emits warnings about __all__ and as pyroma exec's the setup.py # file, it will execute any print statements in that, etc etc... with capture_output( hide=not self.config.direct_tool_stdout) as capture: messages += tool.run(found_files) if self.config.include_tool_stdout: loc = Location(self.config.workdir, None, None, None, None) if capture.get_hidden_stderr(): msg = 'stderr from %s:\n%s' % ( toolname, capture.get_hidden_stderr()) messages.append( Message(toolname, 'hidden-output', loc, message=msg)) if capture.get_hidden_stdout(): msg = 'stdout from %s:\n%s' % ( toolname, capture.get_hidden_stdout()) messages.append( Message(toolname, 'hidden-output', loc, message=msg)) except FatalProspectorException as fatal: sys.stderr.write(fatal.message) sys.exit(2) except Exception: # pylint: disable=broad-except if self.config.die_on_tool_error: raise else: loc = Location(self.config.workdir, None, None, None, None) msg = 'Tool %s failed to run (exception was raised)' % ( toolname, ) message = Message( toolname, 'failure', loc, message=msg, ) messages.append(message) messages = self.process_messages(found_files, messages) summary['message_count'] = len(messages) summary['completed'] = datetime.now() # Timedelta.total_seconds() is not available # on Python<=2.6 so we calculate it ourselves # See issue #60 and http://stackoverflow.com/a/3694895 delta = (summary['completed'] - summary['started']) total_seconds = (delta.microseconds + (delta.seconds + delta.days * 24 * 3600) * 1e6) / 1e6 summary['time_taken'] = '%0.2f' % total_seconds external_config = [] for tool, configured_by in self.config.configured_by.items(): if configured_by is not None: external_config.append((tool, configured_by)) if len(external_config) > 0: summary['external_config'] = ', '.join( ['%s: %s' % info for info in external_config]) self.summary = summary self.messages = self.messages + messages