# Copyright 2015 Hewlett-Packard Development Company, L.P. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from __future__ import print_function import re import sys import linecache from prettytable import PrettyTable PEP8_LINE = r'^((?P.*):(?P\d*):(?P\d*):) ' \ '(?P(?P\w\d{1,3})(?P.*$))' HTML = True def main(): raw_errors = [] max_filename_len = 0 for line in sys.stdin: m = re.match(PEP8_LINE, line) if m: m = m.groupdict() raw_errors.append(m) if len(m['file']) > max_filename_len: max_filename_len = len(m['file']) else: print(line) if len(raw_errors) > 0: print('Flake8 Results') ct = PrettyTable([ "File", "Line", "Column", "Error Code", "Error Message", "Code" ]) ct.align["File"] = "l" ct.align["Error Message"] = "l" ct.align["Code"] = "l" for line in raw_errors: ct.add_row(format_dict(line)) print(ct) with open('flake8_results.html', 'w') as f: f.write('%s' % ct.get_html_string(attributes = {"cellspacing": 0})) # noqa def format_dict(raw): output = [] if raw['file'].startswith('./'): output.append(raw['file'][2:]) else: output.append(raw['file']) output.append(raw['line']) output.append(raw['col']) output.append(raw['error_code']) output.append(raw['error_desc'].lstrip()) code_string = linecache.getline( output[0], int(raw['line'])).lstrip().rstrip() output.append(code_string) return output if __name__ == '__main__': main()