| try: | |
| import pycodestyle as pep8 | |
| except ImportError: | |
| import pep8 | |
| import re | |
| from teamcity.messages import TeamcityServiceMessages | |
| from teamcity import __version__, is_running_under_teamcity | |
| enable_teamcity = is_running_under_teamcity() | |
| class TeamcityReport(pep8.StandardReport): | |
| name = 'teamcity' | |
| version = __version__ | |
| options_added = False | |
| @classmethod | |
| def add_options(cls, parser): | |
| if not cls.options_added: | |
| parser.add_option('--teamcity', default=False, | |
| action='callback', callback=cls.set_option_callback, | |
| help="Enable teamcity messages") | |
| cls.options_added = True | |
| @classmethod | |
| def set_option_callback(cls, option, opt, value, parser): | |
| global enable_teamcity | |
| enable_teamcity = True | |
| @classmethod | |
| def parse_options(cls, options): | |
| if not enable_teamcity: | |
| return | |
| options.reporter = TeamcityReport | |
| options.report = TeamcityReport(options) | |
| options.jobs = None # needs to be disabled, flake8 overrides the report if enabled | |
| def get_file_results(self): | |
| self._deferred_print.sort() | |
| messages = TeamcityServiceMessages() | |
| normalized_filename = self.filename.replace("\\", "/") | |
| for line_number, offset, code, text, doc in self._deferred_print: | |
| position = '%(path)s:%(row)d:%(col)d' % { | |
| 'path': normalized_filename, | |
| 'row': self.line_offset + line_number, | |
| 'col': offset + 1, | |
| } | |
| error_message = '%s %s' % (code, text) | |
| test_name = 'pep8: %s: %s' % (normalized_filename, error_message) | |
| messages.testStarted(test_name) | |
| if line_number > len(self.lines): | |
| line = '' | |
| else: | |
| line = self.lines[line_number - 1] | |
| details = [ | |
| position, | |
| line.rstrip(), | |
| re.sub(r'\S', ' ', line[:offset]) + '^', | |
| ] | |
| if doc: | |
| details.append(doc.strip()) | |
| details = '\n'.join(details) | |
| messages.testFailed(test_name, error_message, details) | |
| messages.testFinished(test_name) | |
| return self.file_errors |