)]}'
{"horizon/tables/base.py":[{"author":{"_account_id":9317,"name":"Ana Krivokapic","email":"akrivoka@redhat.com","username":"akrivoka"},"change_message_id":"2b3c7d368708a5b26e07621836ca6f57e8bbd031","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":"    try:"},{"line_number":66,"context_line":"        return sum(data, 0.0) / len(data)"},{"line_number":67,"context_line":"    except TypeError:"},{"line_number":68,"context_line":"        return \u0027\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_9b3919d2","line":67,"updated":"2014-08-06 13:31:53.000000000","message":"Please also catch ZeroDivisionError here. It can happen if `data` is an empty list.","commit_id":"e661ee37d52a8cf986bf3f7e2d2cd445676531c9"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"c1f5f6538deb7e4be3501c8276797cf9308ae4d0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":"    try:"},{"line_number":66,"context_line":"        return sum(data, 0.0) / len(data)"},{"line_number":67,"context_line":"    except TypeError:"},{"line_number":68,"context_line":"        return \u0027\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_a64f88be","line":67,"in_reply_to":"baada198_9b3919d2","updated":"2014-08-07 06:57:58.000000000","message":"Done","commit_id":"e661ee37d52a8cf986bf3f7e2d2cd445676531c9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b2afed3f75665d3416c5958f17c45ec95ec178f8","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            for filter_func in self.filters:"},{"line_number":438,"context_line":"                summation \u003d filter_func(summation)"},{"line_number":439,"context_line":"            return summation"},{"line_number":440,"context_line":"        else:"},{"line_number":441,"context_line":"            return None"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_e1145cec","line":440,"updated":"2014-08-05 10:20:43.000000000","message":"How about wrapping this if-else with try/except TypeError?","commit_id":"e661ee37d52a8cf986bf3f7e2d2cd445676531c9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"590ad43ec07e19dfb6e0883a9cc27f067abdf0c3","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    try:"},{"line_number":56,"context_line":"        return sum(data)"},{"line_number":57,"context_line":"    except TypeError:"},{"line_number":58,"context_line":"        return \u0027\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def safe_average(data):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_e146ca4f","line":58,"updated":"2014-08-07 07:17:23.000000000","message":"The return value is not consistent: any types which can be sum() vs an empty string.\nIt is better to keep the type of the return value more consistent.\n\nget_summation() below returns None if the summation cannot be got, but it leads to returning \u0027\u0027 (an empty string).","commit_id":"8311b575c95ed1c330e3f9fd0faec41f13085d56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"590ad43ec07e19dfb6e0883a9cc27f067abdf0c3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    try:"},{"line_number":66,"context_line":"        return sum(data, 0.0) / len(data)"},{"line_number":67,"context_line":"    except (TypeError, ZeroDivisionError):"},{"line_number":68,"context_line":"        return \u0027\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class Column(html.HTMLElement):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_c15e2614","line":68,"updated":"2014-08-07 07:17:23.000000000","message":"Same as the above.","commit_id":"8311b575c95ed1c330e3f9fd0faec41f13085d56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"590ad43ec07e19dfb6e0883a9cc27f067abdf0c3","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    \"\"\""},{"line_number":234,"context_line":"    summation_methods \u003d {"},{"line_number":235,"context_line":"        \"sum\": safe_sum,"},{"line_number":236,"context_line":"        \"average\": safe_average"},{"line_number":237,"context_line":"    }"},{"line_number":238,"context_line":"    # Used to retain order when instantiating columns on a table"},{"line_number":239,"context_line":"    creation_counter \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_e1b40a38","line":236,"updated":"2014-08-07 07:17:23.000000000","message":"I wonder why we need to introduce the safe version of these method. IMO it is enough to add try/except to L.435-441 in get_summation() below. It would be more simple.\n\n  def get_summation(...):\n     ....\n     try:\n         if len(data):\n            summation \u003d summation_function(data)\n            for filter_func in self.filters:\n                summation \u003d filter_func(summation)\n            return summation\n     except Exception:\n         pass\n     return False","commit_id":"8311b575c95ed1c330e3f9fd0faec41f13085d56"}]}
