)]}'
{"oslo_log/cmds/convert_json.py":[{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"952f4b819f7a04eb8613a45ba01c403b0394ffe4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                               \u0027 %(process)d %(levelname)s %(name)s\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    #: Default output format."},{"line_number":43,"context_line":"    output_format \u003d (\u0027%(asctime)s.%(msecs)03d %(process)d %(levelname)s \u0027"},{"line_number":44,"context_line":"                     \u0027%(name)s [-] %(message)s\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    #: Additional format components when in DEBUG level (or lower)."}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_baec60bc","line":43,"updated":"2016-05-03 18:46:17.000000000","message":"I\u0027m not certain this hardcoding of configuration format is the right approach. This for example is the non context version and many messages have context.\n\nThe alternative is to either enable specifying all formats used, or accept a configuration file that has them. Neither seem a practical solution.","commit_id":"1de7f674866215927483aab99c876dbaa26f3a6d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2489080dd91917713daa92be6fbf5845e30f1fea","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                               \u0027 %(process)d %(levelname)s %(name)s\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    #: Default output format."},{"line_number":43,"context_line":"    output_format \u003d (\u0027%(asctime)s.%(msecs)03d %(process)d %(levelname)s \u0027"},{"line_number":44,"context_line":"                     \u0027%(name)s [-] %(message)s\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    #: Additional format components when in DEBUG level (or lower)."}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_13829ac8","line":43,"in_reply_to":"1a122d0e_baec60bc","updated":"2016-05-03 22:54:49.000000000","message":"Right, so at that point I could just accept a logging configuration and then make a new logger object and then just untranslate the json formatted data that came from the json formatter and pipe it into this new logger. That might work...","commit_id":"1de7f674866215927483aab99c876dbaa26f3a6d"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_log import log"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class JsonUnformatter(object):"},{"line_number":28,"context_line":"    \"\"\"Turns a json log entry back into something useful.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    #: Log level names to colors + color attributes."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_a2dc2be5","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":21},"updated":"2016-08-09 14:14:42.000000000","message":"What about \"JsonLogTail\"? You\u0027re transcoding not unformatting (parsing).","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class JsonUnformatter(object):"},{"line_number":28,"context_line":"    \"\"\"Turns a json log entry back into something useful.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    #: Log level names to colors + color attributes."},{"line_number":31,"context_line":"    level_colors \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_fd024208","line":28,"updated":"2016-08-09 14:14:42.000000000","message":"Colors and formats a JSON log stream for human consumption","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    #: Log level names to colors + color attributes."},{"line_number":31,"context_line":"    level_colors \u003d {"},{"line_number":32,"context_line":"        \u0027ERROR\u0027: (\u0027red\u0027, []),"},{"line_number":33,"context_line":"        \u0027FATAL\u0027: (\u0027red\u0027, [\u0027blink\u0027]),"},{"line_number":34,"context_line":"        \u0027WARNING\u0027: (\u0027yellow\u0027, []),"},{"line_number":35,"context_line":"        \u0027WARN\u0027: (\u0027yellow\u0027, []),"},{"line_number":36,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_42ec4f8f","line":33,"updated":"2016-08-09 14:14:42.000000000","message":"soft -1 for good taste, maybe bold instead?","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027ERROR\u0027: (\u0027red\u0027, []),"},{"line_number":33,"context_line":"        \u0027FATAL\u0027: (\u0027red\u0027, [\u0027blink\u0027]),"},{"line_number":34,"context_line":"        \u0027WARNING\u0027: (\u0027yellow\u0027, []),"},{"line_number":35,"context_line":"        \u0027WARN\u0027: (\u0027yellow\u0027, []),"},{"line_number":36,"context_line":"    }"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    #: Prefix each line of exception output with this format."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_02c097df","line":35,"updated":"2016-08-09 14:14:42.000000000","message":"maybe INFO: white and have anything lower be the slightly grey standard colour?","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"5419db5ffc179592451c0480e74b40b4bfbd9005","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                     \u0027%(name)s [-] %(message)s\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    #: Additional format components when in DEBUG level (or lower)."},{"line_number":47,"context_line":"    debug_format_suffix \u003d \u0027%(funcname)s %(pathname)s:%(lineno)d\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self, colored\u003dFalse):"},{"line_number":50,"context_line":"        self.colored \u003d colored"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_44934cfa","line":47,"updated":"2016-08-23 15:27:25.000000000","message":"output_exception_prefix and output_format are nearly identical so I unified them. I dropped the \u0027[-]\u0027, it doesn\u0027t seem useful for human consumption and if you really need it you can pass in --prefix.\n\nMy JSON records look very different to yours! So I made the formats parameters.","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    #: Additional format components when in DEBUG level (or lower)."},{"line_number":47,"context_line":"    debug_format_suffix \u003d \u0027%(funcname)s %(pathname)s:%(lineno)d\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self, colored\u003dFalse):"},{"line_number":50,"context_line":"        self.colored \u003d colored"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def unformat(self, line):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_9d42263d","line":49,"range":{"start_line":49,"start_character":23,"end_line":49,"end_character":30},"updated":"2016-08-09 14:14:42.000000000","message":"nit I\u0027m uncomfortable with the adjective colored, color would be fine","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def unformat(self, line):"},{"line_number":53,"context_line":"        decoded \u003d jsonutils.loads(line)"},{"line_number":54,"context_line":"        levelno \u003d decoded[\u0027levelno\u0027]"},{"line_number":55,"context_line":"        if self.colored:"},{"line_number":56,"context_line":"            levelname \u003d decoded[\u0027levelname\u0027]"},{"line_number":57,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_bdb56a32","line":54,"updated":"2016-08-09 14:14:42.000000000","message":"can we put this next to L66? even inline?","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                                                         attrs\u003dcolor_attrs)"},{"line_number":65,"context_line":"        output_format \u003d self.output_format"},{"line_number":66,"context_line":"        if levelno \u003c\u003d log.DEBUG:"},{"line_number":67,"context_line":"            output_format +\u003d self.debug_format_suffix"},{"line_number":68,"context_line":"        lines \u003d ["},{"line_number":69,"context_line":"            output_format % decoded"},{"line_number":70,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_7d6e5297","line":67,"updated":"2016-08-09 14:14:42.000000000","message":"+0: an option to enable/disable this would be nice","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            output_format +\u003d self.debug_format_suffix"},{"line_number":68,"context_line":"        lines \u003d ["},{"line_number":69,"context_line":"            output_format % decoded"},{"line_number":70,"context_line":"        ]"},{"line_number":71,"context_line":"        tb \u003d decoded.get(\u0027traceback\u0027)"},{"line_number":72,"context_line":"        if tb:"},{"line_number":73,"context_line":"            tb_new_lines \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_bdff2aa9","line":70,"updated":"2016-08-09 14:14:42.000000000","message":"nit no reason to spread this over 3 lines","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            tb_prefix \u003d self.output_exception_prefix % decoded"},{"line_number":75,"context_line":"            for tb_line in tb.splitlines():"},{"line_number":76,"context_line":"                tb_new_lines.append(tb_prefix + \" \" + tb_line)"},{"line_number":77,"context_line":"            lines.append(\"\\n\".join(tb_new_lines))"},{"line_number":78,"context_line":"        return lines"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_7d22d202","line":77,"updated":"2016-08-09 14:14:42.000000000","message":"why are we joining here? Why not just:\n\n  if tb:\n    lines +\u003d [self.output_exception_prefix + \" %s\"\n                  % (decoded, tb_line)\n              for tb_line in tb.splitlines()]","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"5419db5ffc179592451c0480e74b40b4bfbd9005","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                             \" `termcolor` to be installed)\")"},{"line_number":101,"context_line":"    parser.add_argument(\"--use-stderr\", default\u003dFalse,"},{"line_number":102,"context_line":"                        action\u003d\u0027store_true\u0027,"},{"line_number":103,"context_line":"                        help\u003d\u0027Log output to standard error.\u0027)"},{"line_number":104,"context_line":"    args \u003d parser.parse_args()"},{"line_number":105,"context_line":"    in_file \u003d args.file"},{"line_number":106,"context_line":"    if in_file is None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_048034f4","line":103,"updated":"2016-08-23 15:27:25.000000000","message":"I dropped this option because you can use shell redirection instead","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        raise ImportError(\"Coloring requested but `termcolor` is not\""},{"line_number":113,"context_line":"                          \" importable\")"},{"line_number":114,"context_line":"    uf \u003d JsonUnformatter(colored\u003dargs.colored)"},{"line_number":115,"context_line":"    with maybe_close(in_file, ensure_closed):"},{"line_number":116,"context_line":"        for line in in_file:"},{"line_number":117,"context_line":"            line \u003d line.strip()"},{"line_number":118,"context_line":"            if not line:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_fd3402fc","line":115,"updated":"2016-08-09 14:14:42.000000000","message":"not a big fan of maybe_close; if you put the guts in a function, it could be called in different contexts","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"5419db5ffc179592451c0480e74b40b4bfbd9005","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        raise ImportError(\"Coloring requested but `termcolor` is not\""},{"line_number":113,"context_line":"                          \" importable\")"},{"line_number":114,"context_line":"    uf \u003d JsonUnformatter(colored\u003dargs.colored)"},{"line_number":115,"context_line":"    with maybe_close(in_file, ensure_closed):"},{"line_number":116,"context_line":"        for line in in_file:"},{"line_number":117,"context_line":"            line \u003d line.strip()"},{"line_number":118,"context_line":"            if not line:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_647f68e0","line":115,"in_reply_to":"9ad45d7e_fd3402fc","updated":"2016-08-23 15:27:25.000000000","message":"Python will close our handle when we exit","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c5c78bea9f65bd4b3f11334310d790fe761aa1f2","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            if not line:"},{"line_number":119,"context_line":"                continue"},{"line_number":120,"context_line":"            for out_line in uf.unformat(line):"},{"line_number":121,"context_line":"                if args.use_stderr:"},{"line_number":122,"context_line":"                    print(out_line, file\u003dsys.stderr)"},{"line_number":123,"context_line":"                else:"},{"line_number":124,"context_line":"                    print(out_line, file\u003dsys.stdout)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_7d78122c","line":121,"updated":"2016-08-09 14:14:42.000000000","message":"we could work out which handle to use around L114","commit_id":"c5cc79f97969e637752e89b34d442cccce23c3ae"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ef3b7fa9f97c8499a39412562a4b7bb0b4d2b718","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ConsoleFormatter(object):"},{"line_number":30,"context_line":"    \"\"\"Colors and formats log records for human consumption.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    level_colors \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_2f18a974","line":29,"updated":"2016-08-23 15:27:20.000000000","message":"not sure this still needs to be a class","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1f2f202979790af4c332594c84da7cd188b15c77","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ConsoleFormatter(object):"},{"line_number":30,"context_line":"    \"\"\"Colors and formats log records for human consumption.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    level_colors \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_32e905b8","line":29,"in_reply_to":"1ac06dbe_2f18a974","updated":"2016-08-24 06:55:08.000000000","message":"Ya probably doesn\u0027t :-P","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":1882,"name":"dave-mcnally","email":"dave.mcnally@hpe.com","username":"dave-mcnally"},"change_message_id":"b9bd56ebc7f53b2f32d3774bf86df12fd61af80e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    if args.color and not termcolor:"},{"line_number":95,"context_line":"        raise ImportError(\"Coloring requested but `termcolor` is not\""},{"line_number":96,"context_line":"                          \" importable\")"},{"line_number":97,"context_line":"    return args"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def reformat_json(rf, fh):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_2aa53746","line":97,"range":{"start_line":97,"start_character":11,"end_line":97,"end_character":15},"updated":"2016-08-23 15:55:45.000000000","message":"If you run this at the moment with no args it just hangs. Would be nice if it printed the help message.","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"68b147bfb3ac882d87392b89558756bdade5b92a","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    if args.color and not termcolor:"},{"line_number":95,"context_line":"        raise ImportError(\"Coloring requested but `termcolor` is not\""},{"line_number":96,"context_line":"                          \" importable\")"},{"line_number":97,"context_line":"    return args"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def reformat_json(rf, fh):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_95156c9d","line":97,"range":{"start_line":97,"start_character":11,"end_line":97,"end_character":15},"in_reply_to":"1ac06dbe_2aa53746","updated":"2016-08-23 16:00:26.000000000","message":"that\u0027s because it\u0027s waiting for stdin","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1f2f202979790af4c332594c84da7cd188b15c77","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    if args.color and not termcolor:"},{"line_number":95,"context_line":"        raise ImportError(\"Coloring requested but `termcolor` is not\""},{"line_number":96,"context_line":"                          \" importable\")"},{"line_number":97,"context_line":"    return args"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def reformat_json(rf, fh):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_b2ecd5bb","line":97,"range":{"start_line":97,"start_character":11,"end_line":97,"end_character":15},"in_reply_to":"1ac06dbe_95156c9d","updated":"2016-08-24 06:55:08.000000000","message":"ya that one is \u0027 default\u003dsys.stdin\u0027\n\nthough perhaps we can handle this differently.","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d1a0f1cab554af8b9759b967ebf00bce34f3f0df","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    if args.color and not termcolor:"},{"line_number":95,"context_line":"        raise ImportError(\"Coloring requested but `termcolor` is not\""},{"line_number":96,"context_line":"                          \" importable\")"},{"line_number":97,"context_line":"    return args"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def reformat_json(rf, fh):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_c031b6a3","line":97,"range":{"start_line":97,"start_character":11,"end_line":97,"end_character":15},"in_reply_to":"1ac06dbe_b2ecd5bb","updated":"2016-08-25 11:12:33.000000000","message":"I like that we\u0027re behaving very much like \u0027cat\u0027 plus a transform","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"ef3b7fa9f97c8499a39412562a4b7bb0b4d2b718","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            # specifiers."},{"line_number":114,"context_line":"            record \u003d collections.defaultdict(str, record)"},{"line_number":115,"context_line":"        except ValueError:"},{"line_number":116,"context_line":"            yield \"Not JSON: %s\" % line"},{"line_number":117,"context_line":"            continue"},{"line_number":118,"context_line":"        for out_line in rf.format(record):"},{"line_number":119,"context_line":"            yield out_line"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_8f027d08","line":116,"updated":"2016-08-23 15:27:20.000000000","message":"Might be nice to colorise \"Not JSON\" but accomplishing that while respecting args.color felt like a hack too far","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1f2f202979790af4c332594c84da7cd188b15c77","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            # specifiers."},{"line_number":114,"context_line":"            record \u003d collections.defaultdict(str, record)"},{"line_number":115,"context_line":"        except ValueError:"},{"line_number":116,"context_line":"            yield \"Not JSON: %s\" % line"},{"line_number":117,"context_line":"            continue"},{"line_number":118,"context_line":"        for out_line in rf.format(record):"},{"line_number":119,"context_line":"            yield out_line"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_f2300d58","line":116,"in_reply_to":"1ac06dbe_8f027d08","updated":"2016-08-24 06:55:08.000000000","message":"\u0027Not json you fool!\u0027 hahaha","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7174cb3ff96272f3df8fe8485fcefdc7e1da385f","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            # specifiers."},{"line_number":114,"context_line":"            record \u003d collections.defaultdict(str, record)"},{"line_number":115,"context_line":"        except ValueError:"},{"line_number":116,"context_line":"            yield \"Not JSON: %s\" % line"},{"line_number":117,"context_line":"            continue"},{"line_number":118,"context_line":"        for out_line in rf.format(record):"},{"line_number":119,"context_line":"            yield out_line"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_9270b90c","line":116,"in_reply_to":"1ac06dbe_f2300d58","updated":"2016-08-24 06:57:01.000000000","message":"http://s2.quickmeme.com/img/e6/e62eab1fe4b0a7fc2d471220555792a0e252acf4dbe2fcdf17d9c44d0a396680.jpg\n\nthe joke may not make sense without that :-P","commit_id":"37ed7168f5e74fffbc471b28d5ed0450672c0144"}]}
