示例#1
0
def main():
    # Note: We parse the args here once to find the log printer to use.
    #       Also, commands like -h (help) and -v (version) are executed here.
    #       The args are again parsed later to find the settings and configs
    #       to use during analysis.
    arg_parser = default_arg_parser()
    args = arg_parser.parse_args()

    log_printer = None if args.text_logs else ListLogPrinter()
    results, exitcode = run_coala(log_printer=log_printer, autoapply=False)

    retval = {"results": results}
    if not args.text_logs:
        retval["logs"] = log_printer.logs
    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    if args.output:
        filename = str(args.output)
        with open(filename, 'w+') as fp:
            json.dump(retval, fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(json.dumps(retval,
                         cls=JSONEncoder,
                         sort_keys=True,
                         indent=2,
                         separators=(',', ': ')))

    return exitcode
示例#2
0
def main():
    # Note: We parse the args here once to find the log printer to use.
    #       Also, commands like -h (help) and -v (version) are executed here.
    #       The args are again parsed later to find the settings and configs
    #       to use during analysis.
    arg_parser = default_arg_parser()
    args = arg_parser.parse_args()

    log_printer = None if args.text_logs else ListLogPrinter()
    results, exitcode, _ = run_coala(log_printer=log_printer, autoapply=False)

    retval = {"results": results}
    if not args.text_logs:
        retval["logs"] = log_printer.logs
    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w+') as fp:
            json.dump(retval,
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(
            json.dumps(retval,
                       cls=JSONEncoder,
                       sort_keys=True,
                       indent=2,
                       separators=(',', ': ')))

    return exitcode
示例#3
0
def print_bears(bears,
                show_description,
                show_params,
                console_printer,
                args=None):
    """
    Presents all bears being used in a stylized manner.

    :param bears:            It's a dictionary with bears as keys and list of
                             sections containing those bears as values.
    :param show_description: This parameter is deprecated.
    :param show_params:      This parameter is deprecated.
    :param console_printer:  Object to print messages on the console.
    :param args:             Args passed to coala command.
    """
    check_deprecation(OrderedDict([
        ('show_description', show_description),
        ('show_params', show_params)]))

    if not bears and not (args and args.json):
        console_printer.print('No bears to show. Did you forget to install '
                              'the `coala-bears` package? Try `pip3 install '
                              'coala-bears`.')
        return

    results = [bear for bear, _ in sorted(bears.items(),
                                          key=lambda bear_tuple:
                                          bear_tuple[0].name.lower())]
    if args and args.json:
        from coalib.output.JSONEncoder import create_json_encoder
        JSONEncoder = create_json_encoder(use_relpath=args.relpath)
        json_output = {}
        if args.show_details:
            json_output['bears'] = results
        else:
            json_output['bears'] = [bear.name for bear in results]

        import json
        json_formatted_output = json.dumps(json_output,
                                           cls=JSONEncoder,
                                           sort_keys=True,
                                           indent=2,
                                           separators=(',', ': '))
        if args.output:
            filename = args.output[0]
            with open(filename, 'w') as fp:
                fp.write(json_formatted_output)
        else:
            print(json_formatted_output)
    elif args and args.format:
        print_bears_formatted(results)
    else:
        for bear in results:
            show_bear(bear,
                      show_description,
                      show_params,
                      console_printer,
                      args)
示例#4
0
def main():
    arg_parser = get_args()
    args = arg_parser.parse_args()

    dir_path = create_dir(os.path.abspath(args.dir))

    if len(list(os.walk(dir_path))) > 0:
        copy_files(get_file(Constants.COALA_HTML_BASE), dir_path)

    if not args.noupdate:
        log_printer = ListLogPrinter()
        results, exitcode, file_dict = run_coala(
            log_printer=log_printer, autoapply=False, arg_parser=arg_parser)

        result_data = {"results": results}
        result_data["logs"] = log_printer.logs
        JSONEncoder = create_json_encoder(use_relpath=False)

        result_file = get_file(Constants.CONFIGS['results_file'], dir_path)
        file_data = get_file(Constants.CONFIGS['file_data'], dir_path)
        file_tree_data = get_file(Constants.CONFIGS['files'], dir_path)

        with open(file_tree_data, 'w') as fp:
            file_graph = build_file_graph(file_dict, dir_path)
            json.dump(file_graph, fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))

        with open(result_file, 'w') as fp:
            json.dump(result_data, fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
        with open(file_data, 'w') as fp:
            json.dump(parse_file_dict(file_dict), fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    if not args.nolaunch:
        # Launch server with reference point dir_path
        os.chdir(dir_path)
        if not os.path.exists('bower_components'):
            res = call(['bower', 'install'])
            if res != 0:
                print("Bower is required. Install from `http://bower.io/`")
                sys.exit(1)

        Handler = http.server.SimpleHTTPRequestHandler
        httpd = socketserver.TCPServer(("", Constants.PORT), Handler)
        print("serving at ", Constants.URL)
        print("Press Ctrl+C to end the coala-html session")
        httpd.serve_forever()
        webbrowser.open(Constants.URL, new=2)
示例#5
0
def print_bears(bears,
                show_description,
                show_params,
                console_printer,
                args=None):
    """
    Presents all bears being used in a stylized manner.

    :param bears:            It's a dictionary with bears as keys and list of
                             sections containing those bears as values.
    :param show_description: This parameter is deprecated.
    :param show_params:      This parameter is deprecated.
    :param console_printer:  Object to print messages on the console.
    :param args:             Args passed to coala command.
    """
    check_deprecation(
        OrderedDict([('show_description', show_description),
                     ('show_params', show_params)]))

    if not bears and not (args and args.json):
        console_printer.print('No bears to show. Did you forget to install '
                              'the `coala-bears` package? Try `pip3 install '
                              'coala-bears`.')
        return

    results = [
        bear for bear, _ in sorted(
            bears.items(), key=lambda bear_tuple: bear_tuple[0].name.lower())
    ]
    if args and args.json:
        from coalib.output.JSONEncoder import create_json_encoder
        JSONEncoder = create_json_encoder(use_relpath=args.relpath)
        json_output = {}
        if args.show_details:
            json_output['bears'] = results
        else:
            json_output['bears'] = [bear.name for bear in results]

        import json
        json_formatted_output = json.dumps(json_output,
                                           cls=JSONEncoder,
                                           sort_keys=True,
                                           indent=2,
                                           separators=(',', ': '))
        if args.output:
            filename = args.output[0]
            with open(filename, 'w') as fp:
                fp.write(json_formatted_output)
        else:
            print(json_formatted_output)
    elif args and args.format:
        print_bears_formatted(results)
    else:
        for bear in results:
            show_bear(bear, show_description, show_params, console_printer,
                      args)
示例#6
0
class JSONEncoderTest(unittest.TestCase):
    JSONEncoder = create_json_encoder(use_relpath=True)
    kw = {"cls": JSONEncoder, "sort_keys": True}

    def test_builtins(self):
        self.assertEquals('"test"', json.dumps("test", **self.kw))
        self.assertEquals('1', json.dumps(1, **self.kw))
        self.assertEquals('true', json.dumps(True, **self.kw))
        self.assertEquals('null', json.dumps(None, **self.kw))

    def test_iter(self):
        self.assertEquals('[0, 1]', json.dumps([0, 1], **self.kw))
        self.assertEquals('[0, 1]', json.dumps((0, 1), **self.kw))
        self.assertEquals('[0, 1]', json.dumps(range(2), **self.kw))

    def test_dict(self):
        self.assertEquals('{"0": 1}', json.dumps({0: 1}, **self.kw))
        self.assertEquals('{"0": 1}', json.dumps({"0": 1}, **self.kw))
        self.assertEquals('{"0": "1"}', json.dumps({"0": "1"}, **self.kw))

    def test_time(self):
        tf = datetime.today()
        self.assertEquals('"' + tf.isoformat() + '"',
                          json.dumps(tf, **self.kw))

    def test_re_object(self):
        uut = re.compile('x')
        self.assertEqual('"' + uut.pattern + '"', json.dumps(uut, **self.kw))

    def test_class1(self):
        tc1 = TestClass1()
        self.assertEquals('{"a": 0}', json.dumps(tc1, **self.kw))
        self.assertEquals('[{"a": 0}]', json.dumps([tc1], **self.kw))
        self.assertEquals('{"0": {"a": 0}}', json.dumps({0: tc1}, **self.kw))

    def test_class2(self):
        tc2 = TestClass2()
        self.assertEquals('{"a": 0, "b": {"a": 0}}',
                          json.dumps(tc2, **self.kw))

    def test_class3(self):
        tc3 = TestClass3()
        self.assertEquals('{"key": "val"}', json.dumps(tc3, **self.kw))

    def test_propertied_class(self):
        uut = PropertiedClass()
        self.assertEqual('{"prop": 5}', json.dumps(uut, **self.kw))

    def test_jsonable_class(self):
        uut = JSONAbleClass()
        self.assertEqual('["dont", "panic"]', json.dumps(uut, **self.kw))

    def test_type_error(self):
        with self.assertRaises(TypeError):
            json.dumps(1j, **self.kw)
示例#7
0
def mode_json(args, debug=False):
    import json

    from coalib.coala_main import run_coala
    from coalib.misc.DictUtilities import inverse_dicts
    from coalib.misc.Exceptions import get_exitcode
    from coalib.output.Logging import configure_json_logging
    from coalib.output.JSONEncoder import create_json_encoder

    if args.log_json:
        log_stream = configure_json_logging()

    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    results = []

    if args.show_bears:
        try:
            from coalib.parsing.FilterHelper import FilterHelper

            local_bears, global_bears = FilterHelper.apply_filter(
                'language', args.filter_by_language)
            bears = inverse_dicts(local_bears, global_bears)
            for bear, _ in sorted(bears.items(),
                                  key=lambda bear_tuple: bear_tuple[0].name):
                results.append(bear)
        except BaseException as exception:  # pylint: disable=broad-except
            return get_exitcode(exception)
    else:
        results, exitcode, _ = run_coala(args=args, debug=debug)

    retval = {'bears': results} if args.show_bears else {'results': results}

    if args.log_json:
        retval['logs'] = [
            json.loads(line) for line in log_stream.getvalue().splitlines()
        ]

    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w+') as fp:
            json.dump(retval,
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(
            json.dumps(retval,
                       cls=JSONEncoder,
                       sort_keys=True,
                       indent=2,
                       separators=(',', ': ')))

    return 0 if args.show_bears else exitcode
示例#8
0
 def test_json_export(self):
     JSONEncoder = create_json_encoder()
     a = ['first\n', 'second\n', 'third\n']
     b = ['first\n', 'third\n']
     diff = Diff.from_string_arrays(a, b)
     self.assertEqual(
         json.dumps(diff, cls=JSONEncoder, sort_keys=True), '"--- \\n'
         '+++ \\n'
         '@@ -1,3 +1,2 @@\\n'
         ' first\\n'
         '-second\\n'
         ' third\\n"')
示例#9
0
文件: DiffTest.py 项目: icoz/coala
 def test_json_export(self):
     JSONEncoder = create_json_encoder()
     a = ['first\n', 'second\n', 'third\n']
     b = ['first\n', 'third\n']
     diff = Diff.from_string_arrays(a, b)
     self.assertEqual(
         json.dumps(diff, cls=JSONEncoder, sort_keys=True),
         '"--- \\n'
         '+++ \\n'
         '@@ -1,3 +1,2 @@\\n'
         ' first\\n'
         '-second\\n'
         ' third\\n"')
示例#10
0
 def test_json_diff(self):
     file_dict = {'f_a': ['1', '2', '3'], 'f_b': ['1', '2', '3']}
     diff = Diff(file_dict['f_a'])
     diff.delete_line(2)
     diff.change_line(3, '3', '3_changed')
     uut = Result('origin', 'msg', diffs={'f_a': diff}).__json__(True)
     self.assertEqual(
         uut['diffs']['f_a'].__json__(), '--- \n'
         '+++ \n'
         '@@ -1,3 +1,2 @@\n'
         ' 1-2-3+3_changed')
     JSONEncoder = create_json_encoder(use_relpath=True)
     json_dump = json.dumps(diff, cls=JSONEncoder, sort_keys=True)
     self.assertEqual(json_dump,
                      '"--- \\n+++ \\n@@ -1,3 +1,2 @@\\n 1-2-3+3_changed"')
示例#11
0
 def test_json_diff(self):
     file_dict = {"f_a": ["1", "2", "3"], "f_b": ["1", "2", "3"]}
     expected_file = {"f_a": ["1", "3_changed"], "f_b": ["1", "2", "3"]}
     diff = Diff(file_dict['f_a'])
     diff.delete_line(2)
     diff.change_line(3, "3", "3_changed")
     uut = Result("origin", "msg", diffs={"f_a": diff}).__json__(True)
     self.assertEqual(
         uut["diffs"]['f_a'].__json__(), "--- \n"
         "+++ \n"
         "@@ -1,3 +1,2 @@\n"
         " 1-2-3+3_changed")
     JSONEncoder = create_json_encoder(use_relpath=True)
     json_dump = json.dumps(diff, cls=JSONEncoder, sort_keys=True)
     self.assertEqual(json_dump,
                      '"--- \\n+++ \\n@@ -1,3 +1,2 @@\\n 1-2-3+3_changed"')
示例#12
0
def main():
    # Note: We parse the args here once to find the log printer to use.
    #       Also, commands like -h (help) and -v (version) are executed here.
    #       The args are again parsed later to find the settings and configs
    #       to use during analysis.
    arg_parser = default_arg_parser()
    args = arg_parser.parse_args()

    log_printer = None if args.text_logs else ListLogPrinter()
    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    results = []

    if args.show_bears:
        try:
            local_bears, global_bears = get_filtered_bears(
                args.filter_by_language, log_printer)
            bears = inverse_dicts(local_bears, global_bears)
            for bear, _ in sorted(bears.items(),
                                  key=lambda bear_tuple: bear_tuple[0].name):
                results.append(bear)
        except BaseException as exception:  # pylint: disable=broad-except
            return get_exitcode(exception, log_printer)
    else:
        results, exitcode, _ = run_coala(log_printer=log_printer,
                                         autoapply=False)

    retval = {"bears": results} if args.show_bears else {"results": results}
    if not args.text_logs:
        retval["logs"] = log_printer.logs
    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w+') as fp:
            json.dump(retval,
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(
            json.dumps(retval,
                       cls=JSONEncoder,
                       sort_keys=True,
                       indent=2,
                       separators=(',', ': ')))

    return 0 if args.show_bears else exitcode
示例#13
0
def main():
    # Note: We parse the args here once to find the log printer to use.
    #       Also, commands like -h (help) and -v (version) are executed here.
    #       The args are again parsed later to find the settings and configs
    #       to use during analysis.
    arg_parser = default_arg_parser()
    args = arg_parser.parse_args()

    log_printer = None if args.text_logs else ListLogPrinter()
    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    results = []

    if args.show_bears:
        try:
            local_bears, global_bears = get_filtered_bears(
                args.filter_by_language, log_printer)
            bears = inverse_dicts(local_bears, global_bears)
            for bear, _ in sorted(bears.items(),
                                  key=lambda bear_tuple:
                                  bear_tuple[0].name):
                results.append(bear)
        except BaseException as exception:  # pylint: disable=broad-except
            return get_exitcode(exception, log_printer)
    else:
        results, exitcode, _ = run_coala(
            log_printer=log_printer, autoapply=False)

    retval = {"bears": results} if args.show_bears else {"results": results}
    if not args.text_logs:
        retval["logs"] = log_printer.logs
    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w+') as fp:
            json.dump(retval, fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(json.dumps(retval,
                         cls=JSONEncoder,
                         sort_keys=True,
                         indent=2,
                         separators=(',', ': ')))

    return 0 if args.show_bears else exitcode
示例#14
0
 def test_json_diff(self):
     file_dict = {
         "f_a": ["1", "2", "3"],
         "f_b": ["1", "2", "3"]
     }
     diff = Diff(file_dict['f_a'])
     diff.delete_line(2)
     diff.change_line(3, "3", "3_changed")
     uut = Result("origin", "msg", diffs={"f_a": diff}).__json__(True)
     self.assertEqual(uut["diffs"]['f_a'].__json__(), "--- \n"
                                                      "+++ \n"
                                                      "@@ -1,3 +1,2 @@\n"
                                                      " 1-2-3+3_changed")
     JSONEncoder = create_json_encoder(use_relpath=True)
     json_dump = json.dumps(diff, cls=JSONEncoder, sort_keys=True)
     self.assertEqual(
         json_dump, '"--- \\n+++ \\n@@ -1,3 +1,2 @@\\n 1-2-3+3_changed"')
示例#15
0
文件: ResultTest.py 项目: icoz/coala
 def test_json_diff(self):
     file_dict = {
         'f_a': ['1', '2', '3'],
         'f_b': ['1', '2', '3']
     }
     diff = Diff(file_dict['f_a'])
     diff.delete_line(2)
     diff.change_line(3, '3', '3_changed')
     uut = Result('origin', 'msg', diffs={'f_a': diff}).__json__(True)
     self.assertEqual(uut['diffs']['f_a'].__json__(), '--- \n'
                                                      '+++ \n'
                                                      '@@ -1,3 +1,2 @@\n'
                                                      ' 1-2-3+3_changed')
     JSONEncoder = create_json_encoder(use_relpath=True)
     json_dump = json.dumps(diff, cls=JSONEncoder, sort_keys=True)
     self.assertEqual(
         json_dump, '"--- \\n+++ \\n@@ -1,3 +1,2 @@\\n 1-2-3+3_changed"')
示例#16
0
def mode_json(args):
    import json

    from coalib.coala_main import run_coala
    from coalib.misc.DictUtilities import inverse_dicts
    from coalib.misc.Exceptions import get_exitcode
    from coalib.output.JSONEncoder import create_json_encoder
    from coalib.output.printers.LogPrinter import LogPrinter
    from coalib.settings.ConfigurationGathering import get_filtered_bears

    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    results = []

    if args.show_bears:
        try:
            local_bears, global_bears = get_filtered_bears(
                args.filter_by_language, LogPrinter())
            bears = inverse_dicts(local_bears, global_bears)
            for bear, _ in sorted(bears.items(),
                                  key=lambda bear_tuple: bear_tuple[0].name):
                results.append(bear)
        except BaseException as exception:  # pylint: disable=broad-except
            return get_exitcode(exception)
    else:
        results, exitcode, _ = run_coala()

    retval = {'bears': results} if args.show_bears else {'results': results}
    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w+') as fp:
            json.dump(retval,
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(
            json.dumps(retval,
                       cls=JSONEncoder,
                       sort_keys=True,
                       indent=2,
                       separators=(',', ': ')))

    return 0 if args.show_bears else exitcode
示例#17
0
def mode_json(args):
    import json

    from coalib.coala_main import run_coala
    from coalib.misc.DictUtilities import inverse_dicts
    from coalib.misc.Exceptions import get_exitcode
    from coalib.output.JSONEncoder import create_json_encoder
    from coalib.output.printers.LogPrinter import LogPrinter
    from coalib.parsing.DefaultArgParser import default_arg_parser
    from coalib.settings.ConfigurationGathering import get_filtered_bears

    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    results = []

    if args.show_bears:
        try:
            local_bears, global_bears = get_filtered_bears(
                args.filter_by_language, LogPrinter())
            bears = inverse_dicts(local_bears, global_bears)
            for bear, _ in sorted(bears.items(),
                                  key=lambda bear_tuple:
                                  bear_tuple[0].name):
                results.append(bear)
        except BaseException as exception:  # pylint: disable=broad-except
            return get_exitcode(exception)
    else:
        results, exitcode, _ = run_coala()

    retval = {'bears': results} if args.show_bears else {'results': results}
    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w+') as fp:
            json.dump(retval, fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(json.dumps(retval,
                         cls=JSONEncoder,
                         sort_keys=True,
                         indent=2,
                         separators=(',', ': ')))

    return 0 if args.show_bears else exitcode
示例#18
0
def mode_json(args):
    import json

    from coalib.coala_main import run_coala
    from coalib.misc.DictUtilities import inverse_dicts
    from coalib.misc.Exceptions import get_exitcode
    from coalib.output.Logging import configure_json_logging
    from coalib.output.JSONEncoder import create_json_encoder
    from coalib.output.printers.LogPrinter import LogPrinter
    from coalib.settings.ConfigurationGathering import get_filtered_bears

    if args.log_json:
        log_stream = configure_json_logging()

    JSONEncoder = create_json_encoder(use_relpath=args.relpath)
    results = []

    if args.show_bears:
        try:
            local_bears, global_bears = get_filtered_bears(args.filter_by_language, LogPrinter())
            bears = inverse_dicts(local_bears, global_bears)
            for bear, _ in sorted(bears.items(), key=lambda bear_tuple: bear_tuple[0].name):
                results.append(bear)
        except BaseException as exception:  # pylint: disable=broad-except
            return get_exitcode(exception)
    else:
        results, exitcode, _ = run_coala()

    retval = {"bears": results} if args.show_bears else {"results": results}

    if args.log_json:
        retval["logs"] = [json.loads(line) for line in log_stream.getvalue().splitlines()]

    if args.output:
        filename = str(args.output[0])
        with open(filename, "w+") as fp:
            json.dump(retval, fp, cls=JSONEncoder, sort_keys=True, indent=2, separators=(",", ": "))
    else:
        print(json.dumps(retval, cls=JSONEncoder, sort_keys=True, indent=2, separators=(",", ": ")))

    return 0 if args.show_bears else exitcode
示例#19
0
def mode_json(args, debug=False):
    import json

    from coalib.coala_main import run_coala
    from coalib.output.Logging import configure_json_logging
    from coalib.output.JSONEncoder import create_json_encoder

    if args.log_json:
        log_stream = configure_json_logging()

    JSONEncoder = create_json_encoder(use_relpath=args.relpath)

    results, exitcode, _ = run_coala(args=args, debug=debug)

    retval = {'results': results}

    if args.log_json:
        retval['logs'] = [
            json.loads(line) for line in log_stream.getvalue().splitlines()
        ]

    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w') as fp:
            json.dump(retval,
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(
            json.dumps(retval,
                       cls=JSONEncoder,
                       sort_keys=True,
                       indent=2,
                       separators=(',', ': ')))

    return 0 if args.show_bears else exitcode
示例#20
0
def mode_json(args, debug=False):
    import json

    from coalib.coala_main import run_coala
    from coalib.output.Logging import configure_json_logging
    from coalib.output.JSONEncoder import create_json_encoder

    if args.log_json:
        log_stream = configure_json_logging()

    JSONEncoder = create_json_encoder(use_relpath=args.relpath)

    results, exitcode, _ = run_coala(args=args, debug=debug)

    retval = {'results': results}

    if args.log_json:
        retval['logs'] = [json.loads(line) for line in
                          log_stream.getvalue().splitlines()]

    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w') as fp:
            json.dump(retval, fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(json.dumps(retval,
                         cls=JSONEncoder,
                         sort_keys=True,
                         indent=2,
                         separators=(',', ': ')))

    return 0 if args.show_bears else exitcode
示例#21
0
    results = [
        Result(
            origin='TestBear',
            message='This is wrong',
            affected_code=(SourceRange.from_values(args['filename'], 1),),
            severity=RESULT_SEVERITY.MAJOR),
        Result(
            origin='TestBear',
            message='This is wrong too',
            affected_code=(SourceRange.from_values(args['filename'], 3),),
            severity=RESULT_SEVERITY.INFO)]

    if settings['set_normal_severity']:
        for res in results:
            res.severity = RESULT_SEVERITY.NORMAL

    if settings['set_sample_dbg_msg']:
        results[0].debug_msg = 'Sample debug message'

    if not settings['not_set_different_msg']:
        results[1].message = 'Different message'

    out = {}
    out['results'] = results

    JSONEncoder = create_json_encoder()

    json_dump = json.dumps(out, cls=JSONEncoder)
    sys.stdout.write(json_dump)
示例#22
0
    results = [
        Result(
            origin='TestBear',
            message='This is wrong',
            affected_code=(SourceRange.from_values(args['filename'], 1),),
            severity=RESULT_SEVERITY.MAJOR),
        Result(
            origin='TestBear',
            message='This is wrong too',
            affected_code=(SourceRange.from_values(args['filename'], 3),),
            severity=RESULT_SEVERITY.INFO)]

    if settings['set_normal_severity']:
        for res in results:
            res.severity = RESULT_SEVERITY.NORMAL

    if settings['set_sample_dbg_msg']:
        results[0].debug_msg = 'Sample debug message'

    if not settings['not_set_different_msg']:
        results[1].message = 'Different message'

    out = {}
    out['results'] = results

    JSONEncoder = create_json_encoder()

    json_dump = json.dumps(out, cls=JSONEncoder)
    sys.stdout.write(json_dump)
示例#23
0
def main():
    arg_parser = get_args()
    args = arg_parser.parse_args()

    dir_path = create_dir(os.path.abspath(args.dir))

    main_package = gen_file_set(get_file(Constants.COALA_HTML_BASE))
    local_package = gen_file_set(dir_path)

    if not main_package.issubset(local_package):  # pragma: no cover
        copy_files(get_file(Constants.COALA_HTML_BASE), dir_path)

    if not args.noupdate:
        log_printer = ListLogPrinter()
        results, exitcode, file_dict = run_coala(log_printer=log_printer,
                                                 arg_parser=arg_parser)

        result_data = {"results": results}
        result_data["logs"] = log_printer.logs
        JSONEncoder = create_json_encoder(use_relpath=False)

        result_file = get_file(Constants.CONFIGS['results_file'], dir_path)
        file_data = get_file(Constants.CONFIGS['file_data'], dir_path)
        file_tree_data = get_file(Constants.CONFIGS['files'], dir_path)

        with open(file_tree_data, 'w') as fp:
            file_graph = build_file_graph(file_dict, dir_path)
            json.dump(file_graph,
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))

        with open(result_file, 'w') as fp:
            json.dump(result_data,
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
        with open(file_data, 'w') as fp:
            json.dump(parse_file_dict(file_dict),
                      fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    if not args.nolaunch:
        # Launch server with reference point dir_path
        os.chdir(dir_path)
        if not os.path.exists('bower_components'):
            res = call(['bower', 'install'])
            if res != 0:  # pragma: no cover
                print("Bower is required. Install from `http://bower.io/`")
                sys.exit(1)

        Handler = http.server.SimpleHTTPRequestHandler
        socketserver.TCPServer.allow_reuse_address = True
        httpd = socketserver.TCPServer(("", Constants.PORT), Handler)
        print("serving at ", Constants.URL)
        print("Press Ctrl+C to end the coala-html session")
        webbrowser.open(Constants.URL, new=2)
        try:
            httpd.serve_forever()
        except KeyboardInterrupt:
            httpd.server_close()
示例#24
0
def mode_statan(args, debug=False):
    import json
    import sys

    from coalib.coala_main import run_coala
    from coalib.output.Logging import configure_json_logging
    from coalib.output.JSONEncoder import create_json_encoder
    from coalib.results.AnalyzerResult import AnalyzerResult
    from coalib.settings.ConfigurationGathering import load_configuration

    from coalib.output.database import StoreException, AnalyzerResultStore

    JSONEncoder = create_json_encoder(use_relpath=args.relpath)

    results, exitcode, _ = run_coala(args=args, debug=debug)

    arg_parser=None
    arg_list = []
    if args is None:
        # Note: arg_list can also be []. Hence we cannot use
        # `arg_list = arg_list or default_list`
        arg_list = sys.argv[1:] if arg_list is None else arg_list
    sections, targets = load_configuration(arg_list, arg_parser=arg_parser,
                                           args=args)
    lan = sections['cli'].get('language', '')
    lan_v = sections['cli'].get('language_version', '')
    prj = sections['cli'].get('project', '')
    prj_v = sections['cli'].get('project_version', '')
    params = sections['cli'].get('params', '')

    messages = results['cli']
    analyzer_results = []
    for message in messages:
        dif = json.dumps(message.diffs,
                         cls=JSONEncoder,
                         sort_keys=True,
                         indent=2,
                         separators=(',', ': '))
        ''' analyzer_results.append(AnalyzerResult(message.origin,
            lan.value,
            lan_v.value,
            prj.value,
            prj_v.value,
            message.affected_code[0].file,
            message.message,
            message.severity,
            dif,
            message.confidence)) '''

        try:
            with AnalyzerResultStore() as result_store:
                result_store.addResult(AnalyzerResult(message.origin,
                    lan.value,
                    lan_v.value,
                    prj.value,
                    prj_v.value,
                    message.affected_code[0].file,
                    message.message,
                    params.value,
                    message.affected_code[0].start.line,
                    message.severity,
                    dif,
                    message.confidence))
                result_store.complete()
        except StoreException as e:
            print(e)

    ''' retval = {'results': results}

    if args.output:
        filename = str(args.output[0])
        with open(filename, 'w') as fp:
            json.dump(retval, fp,
                      cls=JSONEncoder,
                      sort_keys=True,
                      indent=2,
                      separators=(',', ': '))
    else:
        print(json.dumps(retval,
                         cls=JSONEncoder,
                         sort_keys=True,
                         indent=2,
                         separators=(',', ': '))) '''

    return 0 if args.show_bears else exitcode