)]}'
{"neutron/tests/unit/api/v2/test_attributes.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"bb7a915eb8dcfbdceb8bcabf91ad8aed72d00c36","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        pools \u003d [[{\u0027end\u0027: \u002710.0.0.254\u0027, \u0027start\u0027: invalid_ip}]]"},{"line_number":272,"context_line":"        for pool in pools:"},{"line_number":273,"context_line":"            msg \u003d attributes._validate_ip_pools(pool)"},{"line_number":274,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % invalid_ip,"},{"line_number":275,"context_line":"                    msg, \"Failed case: %s\" % str(pool))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def test_validate_fixed_ips(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_30bc8cba","line":274,"updated":"2016-01-11 12:37:08.000000000","message":"please fix the alignment here","commit_id":"312634e92b0a905c12866348a69ff8474e201ec4"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"b16e99b75c123d0d7848bcf5ae4d9f10896ea47b","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        pools \u003d [[{\u0027end\u0027: \u002710.0.0.254\u0027, \u0027start\u0027: invalid_ip}]]"},{"line_number":272,"context_line":"        for pool in pools:"},{"line_number":273,"context_line":"            msg \u003d attributes._validate_ip_pools(pool)"},{"line_number":274,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % invalid_ip,"},{"line_number":275,"context_line":"                    msg, \"Failed case: %s\" % str(pool))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def test_validate_fixed_ips(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_5e0c5142","line":274,"in_reply_to":"fa69d971_30bc8cba","updated":"2016-01-12 02:33:27.000000000","message":"Done","commit_id":"312634e92b0a905c12866348a69ff8474e201ec4"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6c5a967db871d24e028c4e7f0f937f76c0058812","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        self.assertEqual(expected_msg % {\"data\": ip_addr, \"ip\": \u00271.1.1.9\u0027},"},{"line_number":290,"context_line":"                         msg)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        ip_addr \u003d \"fe80:0:0:0:0:0:0:0001\""},{"line_number":293,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":294,"context_line":"        self.assertIsNone(msg)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_validate_ip_address_bsd(self):"},{"line_number":297,"context_line":"        # NOTE(yamamoto):  On NetBSD and OS X, netaddr.IPAddress() accepts"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_7c3a53e9","side":"PARENT","line":294,"range":{"start_line":292,"start_character":8,"end_line":294,"end_character":30},"updated":"2016-01-18 08:06:53.000000000","message":"Why did you remove it?","commit_id":"0c073785099b768e93122d7631560099ae216782"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"ff3a11cc9ec54ca01307f243d86031b9c4244960","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        self.assertEqual(expected_msg % {\"data\": ip_addr, \"ip\": \u00271.1.1.9\u0027},"},{"line_number":290,"context_line":"                         msg)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        ip_addr \u003d \"fe80:0:0:0:0:0:0:0001\""},{"line_number":293,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":294,"context_line":"        self.assertIsNone(msg)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_validate_ip_address_bsd(self):"},{"line_number":297,"context_line":"        # NOTE(yamamoto):  On NetBSD and OS X, netaddr.IPAddress() accepts"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_4aa47356","side":"PARENT","line":294,"range":{"start_line":292,"start_character":8,"end_line":294,"end_character":30},"in_reply_to":"da6ed579_7c3a53e9","updated":"2016-01-19 08:43:37.000000000","message":"sorry this was removed by mistake","commit_id":"0c073785099b768e93122d7631560099ae216782"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6c5a967db871d24e028c4e7f0f937f76c0058812","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        for data in datas:"},{"line_number":56,"context_line":"            set_data, expected \u003d data"},{"line_number":57,"context_line":"            self.assertIs(attributes.is_attr_set(set_data), expected,"},{"line_number":58,"context_line":"                          \"Failed case: %s\" % str(data))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_validate_values(self):"},{"line_number":61,"context_line":"        valid_datas \u003d [(4, [4, 6]),"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_1c48f75a","line":58,"range":{"start_line":57,"start_character":12,"end_line":58,"end_character":56},"updated":"2016-01-18 08:06:53.000000000","message":"nit: the is_attr_set() returns bool type so it\u0027s better to use assertTrue() and assertFalse() instead of assertIs().","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"ff3a11cc9ec54ca01307f243d86031b9c4244960","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        for data in datas:"},{"line_number":56,"context_line":"            set_data, expected \u003d data"},{"line_number":57,"context_line":"            self.assertIs(attributes.is_attr_set(set_data), expected,"},{"line_number":58,"context_line":"                          \"Failed case: %s\" % str(data))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_validate_values(self):"},{"line_number":61,"context_line":"        valid_datas \u003d [(4, [4, 6]),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_aa908f96","line":58,"range":{"start_line":57,"start_character":12,"end_line":58,"end_character":56},"in_reply_to":"da6ed579_1c48f75a","updated":"2016-01-19 08:43:37.000000000","message":"if use assertTrue/False, this will be:\n\nif expected:\n   self.assertTrue(...)\nelse:\n   self.assertFalse(...)\n\nI think this don\u0027t look good","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6c5a967db871d24e028c4e7f0f937f76c0058812","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                         (7, (4, 6))]"},{"line_number":70,"context_line":"        for data in invalid_datas:"},{"line_number":71,"context_line":"            value, valid_values \u003d data"},{"line_number":72,"context_line":"            msg \u003d attributes._validate_values(data, valid_values)"},{"line_number":73,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not in %s\" % (data, valid_values), msg,"},{"line_number":74,"context_line":"                             \"Failed case: %s\" % str(data))"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_9cce27b3","line":72,"range":{"start_line":72,"start_character":46,"end_line":72,"end_character":64},"updated":"2016-01-18 08:06:53.000000000","message":"value, valid_values?","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"ff3a11cc9ec54ca01307f243d86031b9c4244960","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                         (7, (4, 6))]"},{"line_number":70,"context_line":"        for data in invalid_datas:"},{"line_number":71,"context_line":"            value, valid_values \u003d data"},{"line_number":72,"context_line":"            msg \u003d attributes._validate_values(data, valid_values)"},{"line_number":73,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not in %s\" % (data, valid_values), msg,"},{"line_number":74,"context_line":"                             \"Failed case: %s\" % str(data))"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_2af33f0c","line":72,"range":{"start_line":72,"start_character":46,"end_line":72,"end_character":64},"in_reply_to":"da6ed579_9cce27b3","updated":"2016-01-19 08:43:37.000000000","message":"Done, thinks for pointing out","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6c5a967db871d24e028c4e7f0f937f76c0058812","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        for data in invalid_datas:"},{"line_number":71,"context_line":"            value, valid_values \u003d data"},{"line_number":72,"context_line":"            msg \u003d attributes._validate_values(data, valid_values)"},{"line_number":73,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not in %s\" % (data, valid_values), msg,"},{"line_number":74,"context_line":"                             \"Failed case: %s\" % str(data))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_validate_not_empty_string(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_3cc4db90","line":73,"range":{"start_line":73,"start_character":52,"end_line":73,"end_character":70},"updated":"2016-01-18 08:06:53.000000000","message":"ditto","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"ff3a11cc9ec54ca01307f243d86031b9c4244960","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        for data in invalid_datas:"},{"line_number":71,"context_line":"            value, valid_values \u003d data"},{"line_number":72,"context_line":"            msg \u003d attributes._validate_values(data, valid_values)"},{"line_number":73,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not in %s\" % (data, valid_values), msg,"},{"line_number":74,"context_line":"                             \"Failed case: %s\" % str(data))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_validate_not_empty_string(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_4acf93b0","line":73,"range":{"start_line":73,"start_character":52,"end_line":73,"end_character":70},"in_reply_to":"da6ed579_3cc4db90","updated":"2016-01-19 08:43:37.000000000","message":"Done","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6c5a967db871d24e028c4e7f0f937f76c0058812","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                       (10, (1, attributes.UNLIMITED)),"},{"line_number":153,"context_line":"                       (1, (attributes.UNLIMITED, 9))]"},{"line_number":154,"context_line":"        for data in valid_datas:"},{"line_number":155,"context_line":"            value, range \u003d data"},{"line_number":156,"context_line":"            msg \u003d attributes._validate_range(value, range)"},{"line_number":157,"context_line":"            self.assertIsNone(msg, \"Failed case: %s\" % str(data))"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_7ce7b3ac","line":155,"range":{"start_line":155,"start_character":19,"end_line":155,"end_character":24},"updated":"2016-01-18 08:06:53.000000000","message":"Please don\u0027t assign data to range() because it\u0027s built-in function in python.","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"ff3a11cc9ec54ca01307f243d86031b9c4244960","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                       (10, (1, attributes.UNLIMITED)),"},{"line_number":153,"context_line":"                       (1, (attributes.UNLIMITED, 9))]"},{"line_number":154,"context_line":"        for data in valid_datas:"},{"line_number":155,"context_line":"            value, range \u003d data"},{"line_number":156,"context_line":"            msg \u003d attributes._validate_range(value, range)"},{"line_number":157,"context_line":"            self.assertIsNone(msg, \"Failed case: %s\" % str(data))"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_aa1acf15","line":155,"range":{"start_line":155,"start_character":19,"end_line":155,"end_character":24},"in_reply_to":"da6ed579_7ce7b3ac","updated":"2016-01-19 08:43:37.000000000","message":"Done","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"daf8b3f44af97739dfddf7f7bd506e2b50cda71f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        for data in valid_datas:"},{"line_number":155,"context_line":"            value, range \u003d data"},{"line_number":156,"context_line":"            msg \u003d attributes._validate_range(value, range)"},{"line_number":157,"context_line":"            self.assertIsNone(msg, \"Failed case: %s\" % str(data))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        invalid_datas \u003d [((0, [1, 9]),"},{"line_number":160,"context_line":"                          \"\u00270\u0027 is too small - must be at least \u00271\u0027\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_b1b55f32","line":157,"range":{"start_line":157,"start_character":55,"end_line":157,"end_character":58},"updated":"2016-01-17 21:40:05.000000000","message":"calling str() is useless because that exactly what %s does[1]\n\n\n[1] %s: \"converts any Python object using str()\" from https://docs.python.org/2/library/stdtypes.html#string-formatting-operations","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"c69927e7ce0972328ad42a041c9fcc2b31e2548e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        for data in valid_datas:"},{"line_number":155,"context_line":"            value, range \u003d data"},{"line_number":156,"context_line":"            msg \u003d attributes._validate_range(value, range)"},{"line_number":157,"context_line":"            self.assertIsNone(msg, \"Failed case: %s\" % str(data))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        invalid_datas \u003d [((0, [1, 9]),"},{"line_number":160,"context_line":"                          \"\u00270\u0027 is too small - must be at least \u00271\u0027\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_22435b6e","line":157,"range":{"start_line":157,"start_character":55,"end_line":157,"end_character":58},"in_reply_to":"da6ed579_b1b55f32","updated":"2016-01-18 02:45:13.000000000","message":"Hi Cedric, because data is a tuple, so simply use %s will convert the first item to string, and there will be an error:\n\n\u003e\u003e\u003e data \u003d (1, [1, 9])\n\u003e\u003e\u003e print(\"data is %s\" % data)\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\nTypeError: not all arguments converted during string formatting\n\u003e\u003e\u003e print(\"data is %s\" % str(data))\ndata is (1, [1, 9])\n\nso the str() here is to convert the whole tuple to string first.","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6c5a967db871d24e028c4e7f0f937f76c0058812","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                         ((10, (attributes.UNLIMITED, 9)),"},{"line_number":168,"context_line":"                          \"\u002710\u0027 is too large - must be no larger than \u00279\u0027\")]"},{"line_number":169,"context_line":"        for data, expected_msg in invalid_datas:"},{"line_number":170,"context_line":"            value, range \u003d data"},{"line_number":171,"context_line":"            msg \u003d attributes._validate_range(value, range)"},{"line_number":172,"context_line":"            self.assertEqual(expected_msg, msg, \"Failed case: %s\" % str(data))"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_dc99ff20","line":170,"range":{"start_line":170,"start_character":19,"end_line":170,"end_character":24},"updated":"2016-01-18 08:06:53.000000000","message":"ditto","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"ff3a11cc9ec54ca01307f243d86031b9c4244960","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                         ((10, (attributes.UNLIMITED, 9)),"},{"line_number":168,"context_line":"                          \"\u002710\u0027 is too large - must be no larger than \u00279\u0027\")]"},{"line_number":169,"context_line":"        for data, expected_msg in invalid_datas:"},{"line_number":170,"context_line":"            value, range \u003d data"},{"line_number":171,"context_line":"            msg \u003d attributes._validate_range(value, range)"},{"line_number":172,"context_line":"            self.assertEqual(expected_msg, msg, \"Failed case: %s\" % str(data))"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_2a26df68","line":170,"range":{"start_line":170,"start_character":19,"end_line":170,"end_character":24},"in_reply_to":"da6ed579_dc99ff20","updated":"2016-01-19 08:43:37.000000000","message":"Done","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6c5a967db871d24e028c4e7f0f937f76c0058812","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        for mac_addr in mac_addrs:"},{"line_number":185,"context_line":"            msg \u003d validator(mac_addr)"},{"line_number":186,"context_line":"            self.assertEqual(err_msg % mac_addr, msg,"},{"line_number":187,"context_line":"                             \"Failed case: %s\" % str(mac_addr))"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        mac_addr \u003d None"},{"line_number":190,"context_line":"        msg \u003d validator(mac_addr)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_276844ba","line":187,"range":{"start_line":187,"start_character":53,"end_line":187,"end_character":61},"updated":"2016-01-18 08:06:53.000000000","message":"The mac_addr is string so we don\u0027t need to use str(). There are many same issues in this patch. Please check.","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"ff3a11cc9ec54ca01307f243d86031b9c4244960","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        for mac_addr in mac_addrs:"},{"line_number":185,"context_line":"            msg \u003d validator(mac_addr)"},{"line_number":186,"context_line":"            self.assertEqual(err_msg % mac_addr, msg,"},{"line_number":187,"context_line":"                             \"Failed case: %s\" % str(mac_addr))"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        mac_addr \u003d None"},{"line_number":190,"context_line":"        msg \u003d validator(mac_addr)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_6ad37739","line":187,"range":{"start_line":187,"start_character":53,"end_line":187,"end_character":61},"in_reply_to":"da6ed579_276844ba","updated":"2016-01-19 08:43:37.000000000","message":"Done","commit_id":"235026a5dff58e1cde3305cb70c3130240810fbd"}]}
