)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"5adfd48944fba8c18609af502660b57650b1c407","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Na \u003cnazhu@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-29 03:29:38 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ability to API attribute to support configuring ip unicast"},{"line_number":8,"context_line":"address list."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"The list can be empty, it can also be comprised by one or"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9aed3d3a_7698b61c","line":7,"updated":"2016-03-01 03:00:43.000000000","message":"No full stop in the commit message header, and it should be limited to 50 chars.","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"}],"neutron/api/v2/attributes.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ff56ee1b57f471a8b5c3454f165b93fb45c57feb","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"},{"line_number":265,"context_line":"                        flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":266,"context_line":"        if not ip.is_unicast():"},{"line_number":267,"context_line":"            raise ValueError() "},{"line_number":268,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":269,"context_line":"            raise ValueError()"},{"line_number":270,"context_line":"        if ip.version \u003d\u003d 4 and str(ip) !\u003d data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_a547c6ba","line":267,"updated":"2016-02-29 16:21:40.000000000","message":"the msg assignment from L273 can move, or be added, here.","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"5adfd48944fba8c18609af502660b57650b1c407","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"},{"line_number":265,"context_line":"                        flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":266,"context_line":"        if not ip.is_unicast():"},{"line_number":267,"context_line":"            raise ValueError() "},{"line_number":268,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":269,"context_line":"            raise ValueError()"},{"line_number":270,"context_line":"        if ip.version \u003d\u003d 4 and str(ip) !\u003d data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_7666f62a","line":267,"in_reply_to":"9aed3d3a_3bfc573d","updated":"2016-03-01 03:00:43.000000000","message":"Please remove the space!","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"6f149939054a3a230c8e4ff7efb9043ac077e7a3","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"},{"line_number":265,"context_line":"                        flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":266,"context_line":"        if not ip.is_unicast():"},{"line_number":267,"context_line":"            raise ValueError() "},{"line_number":268,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":269,"context_line":"            raise ValueError()"},{"line_number":270,"context_line":"        if ip.version \u003d\u003d 4 and str(ip) !\u003d data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_3bfc573d","line":267,"in_reply_to":"9aed3d3a_a547c6ba","updated":"2016-03-01 02:27:14.000000000","message":"Accept, thanks, will update in next patch.","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ff56ee1b57f471a8b5c3454f165b93fb45c57feb","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":269,"context_line":"            raise ValueError()"},{"line_number":270,"context_line":"        if ip.version \u003d\u003d 4 and str(ip) !\u003d data:"},{"line_number":271,"context_line":"            raise ValueError()    "},{"line_number":272,"context_line":"    except Exception:"},{"line_number":273,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":274,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_e5deee0f","line":271,"updated":"2016-02-29 16:21:40.000000000","message":"From L268 to here is duplicating the code in _validate_ip_address().  Instead of doing that you could just put it in the definition on L278 to be called before this is, then this just needs to chedk is_unicast()","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"5adfd48944fba8c18609af502660b57650b1c407","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":269,"context_line":"            raise ValueError()"},{"line_number":270,"context_line":"        if ip.version \u003d\u003d 4 and str(ip) !\u003d data:"},{"line_number":271,"context_line":"            raise ValueError()    "},{"line_number":272,"context_line":"    except Exception:"},{"line_number":273,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":274,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_764d5699","line":271,"in_reply_to":"9aed3d3a_e5deee0f","updated":"2016-03-01 03:00:43.000000000","message":"+1.\nAnd remove the spaces please","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"6f149939054a3a230c8e4ff7efb9043ac077e7a3","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":269,"context_line":"            raise ValueError()"},{"line_number":270,"context_line":"        if ip.version \u003d\u003d 4 and str(ip) !\u003d data:"},{"line_number":271,"context_line":"            raise ValueError()    "},{"line_number":272,"context_line":"    except Exception:"},{"line_number":273,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":274,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_1be07395","line":271,"in_reply_to":"9aed3d3a_e5deee0f","updated":"2016-03-01 02:27:14.000000000","message":"Accept, thanks, will update in next patch.","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ff56ee1b57f471a8b5c3454f165b93fb45c57feb","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            raise ValueError()    "},{"line_number":272,"context_line":"    except Exception:"},{"line_number":273,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":274,"context_line":"        LOG.debug(msg)"},{"line_number":275,"context_line":"        return msg"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_c5cdaa32","line":274,"updated":"2016-02-29 16:21:40.000000000","message":"With the changes mentioned above, this block should be under an \"if msg:\" block","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"6f149939054a3a230c8e4ff7efb9043ac077e7a3","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            raise ValueError()    "},{"line_number":272,"context_line":"    except Exception:"},{"line_number":273,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":274,"context_line":"        LOG.debug(msg)"},{"line_number":275,"context_line":"        return msg"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_bbe7c7aa","line":274,"in_reply_to":"9aed3d3a_c5cdaa32","updated":"2016-03-01 02:27:14.000000000","message":"Accept, thanks, will update in next patch.","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"9d48caafe8773c1eb96d7cd5ad904ce5a9ad11f5","unresolved":false,"context_lines":[{"line_number":261,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"},{"line_number":262,"context_line":"    msg \u003d _validate_ip_address(data)"},{"line_number":263,"context_line":"    if msg:"},{"line_number":264,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":265,"context_line":"        return msg"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_1b3b14ed","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":64},"updated":"2016-03-01 13:27:52.000000000","message":"Remove this line. The information in msg from _validate_ip_address() is more specific.","commit_id":"f95bbfee1765cc21f36d8a354452191fb1be453c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6e749a660a723224fe17197de8ac92ad1ce3d393","unresolved":false,"context_lines":[{"line_number":261,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"},{"line_number":262,"context_line":"    msg \u003d _validate_ip_address(data)"},{"line_number":263,"context_line":"    if msg:"},{"line_number":264,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":265,"context_line":"        return msg"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_c1908e98","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":64},"in_reply_to":"7af24918_1b3b14ed","updated":"2016-03-01 15:57:05.000000000","message":"Adding to Henry\u0027s comment, you can change the code layout to not re-assign msg unnecessarily.\n\nmsg \u003d _validate_ip_address(data)\nif not msg:\n    # do unicast validation, setting msg on failure\n\nif msg:\n    LOG.debug(msg)\nreturn msg","commit_id":"f95bbfee1765cc21f36d8a354452191fb1be453c"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"5425ddaf5bb0aee92de21370641a683a595ea24d","unresolved":false,"context_lines":[{"line_number":261,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"},{"line_number":262,"context_line":"    msg \u003d _validate_ip_address(data)"},{"line_number":263,"context_line":"    if msg:"},{"line_number":264,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":265,"context_line":"        return msg"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_9a189086","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":64},"in_reply_to":"7af24918_1b3b14ed","updated":"2016-03-02 02:04:50.000000000","message":"Thanks, will update.","commit_id":"f95bbfee1765cc21f36d8a354452191fb1be453c"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"5425ddaf5bb0aee92de21370641a683a595ea24d","unresolved":false,"context_lines":[{"line_number":261,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"},{"line_number":262,"context_line":"    msg \u003d _validate_ip_address(data)"},{"line_number":263,"context_line":"    if msg:"},{"line_number":264,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":265,"context_line":"        return msg"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_da3b38ea","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":64},"in_reply_to":"7af24918_c1908e98","updated":"2016-03-02 02:04:50.000000000","message":"Thanks, will update.","commit_id":"f95bbfee1765cc21f36d8a354452191fb1be453c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6e749a660a723224fe17197de8ac92ad1ce3d393","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"_validate_ip_unicast_address_list_or_none \u003d functools.partial(_validate_list_of_items_or_none,"},{"line_number":276,"context_line":"                                        _validate_ip_unicast_address)"},{"line_number":277,"context_line":"def _validate_ip_pools(data, valid_values\u003dNone):"},{"line_number":278,"context_line":"    \"\"\"Validate that start and end IP addresses are present."},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_81f966cb","line":276,"updated":"2016-03-01 15:57:05.000000000","message":"So you can\u0027t put _validate_ip_address in the middle here?","commit_id":"f95bbfee1765cc21f36d8a354452191fb1be453c"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"5425ddaf5bb0aee92de21370641a683a595ea24d","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"_validate_ip_unicast_address_list_or_none \u003d functools.partial(_validate_list_of_items_or_none,"},{"line_number":276,"context_line":"                                        _validate_ip_unicast_address)"},{"line_number":277,"context_line":"def _validate_ip_pools(data, valid_values\u003dNone):"},{"line_number":278,"context_line":"    \"\"\"Validate that start and end IP addresses are present."},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_ba40ec57","line":276,"in_reply_to":"7af24918_81f966cb","updated":"2016-03-02 02:04:50.000000000","message":"Sorry, what do you mean?","commit_id":"f95bbfee1765cc21f36d8a354452191fb1be453c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"514513c66ffebff2209281c365ec44fac9392b98","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        return msg"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    ip \u003d netaddr.IPAddress(_validate_no_whitespace(data),"},{"line_number":267,"context_line":"                    flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":268,"context_line":"    if not ip.is_unicast():"},{"line_number":269,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"},{"line_number":270,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_fa640de6","line":267,"updated":"2016-03-02 14:40:57.000000000","message":"indentation?","commit_id":"085f0e69a224a8f1a0e25641c4897d8a3c248275"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"2f048b165cd2872472f18d775cadf66f6dec7738","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def _validate_list_of_items_or_none(item_validator, data, *args, **kwargs):"},{"line_number":97,"context_line":"    if data is not None:"},{"line_number":98,"context_line":"        if not isinstance(data, list):"},{"line_number":99,"context_line":"            msg \u003d _(\"\u0027%s\u0027 is not a list\") % data"},{"line_number":100,"context_line":"            return msg"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_db0f1e35","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":25},"updated":"2016-03-04 02:18:03.000000000","message":"Line 98 ~ 110 can leverage the previous API \"_validate_list_of_items\".","commit_id":"c8ebff81cfccb3174562a3918cd6335d3b02c2f3"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"34dd2c7e605fff0038aa7916fd63e251bf35176f","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def _validate_list_of_items_or_none(item_validator, data, *args, **kwargs):"},{"line_number":97,"context_line":"    if data is not None:"},{"line_number":98,"context_line":"        if not isinstance(data, list):"},{"line_number":99,"context_line":"            msg \u003d _(\"\u0027%s\u0027 is not a list\") % data"},{"line_number":100,"context_line":"            return msg"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_71ad499a","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":25},"in_reply_to":"7af24918_db0f1e35","updated":"2016-03-04 03:12:39.000000000","message":"Thanks, will update it.","commit_id":"c8ebff81cfccb3174562a3918cd6335d3b02c2f3"}],"neutron/tests/unit/api/v2/test_attributes.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ff56ee1b57f471a8b5c3454f165b93fb45c57feb","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        ip_addr \u003d \u0027111.1.1.1\\nwhitespace\u0027"},{"line_number":305,"context_line":"        msg \u003d attributes._validate_ip_unicast_address(ip_addr)"},{"line_number":306,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid unicast IP address\" % ip_addr, msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        ip_addr \u003d \u0027232.0.0.1\u0027"},{"line_number":309,"context_line":"        msg \u003d attributes._validate_ip_unicast_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_455d1a46","line":306,"updated":"2016-02-29 16:21:40.000000000","message":"You shouldn\u0027t need to duplicate all the tests above here, this should just contain non-unicast tests.\n\nAlso, where are the IPv6 tests?","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"6f149939054a3a230c8e4ff7efb9043ac077e7a3","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        ip_addr \u003d \u0027111.1.1.1\\nwhitespace\u0027"},{"line_number":305,"context_line":"        msg \u003d attributes._validate_ip_unicast_address(ip_addr)"},{"line_number":306,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid unicast IP address\" % ip_addr, msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        ip_addr \u003d \u0027232.0.0.1\u0027"},{"line_number":309,"context_line":"        msg \u003d attributes._validate_ip_unicast_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_9b6f63fb","line":306,"in_reply_to":"9aed3d3a_455d1a46","updated":"2016-03-01 02:27:14.000000000","message":"Will update it, thanks.","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"5adfd48944fba8c18609af502660b57650b1c407","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            self.assertEqual(\"\u0027%s\u0027 is not a valid unicast IP address\" % ip_addr, msg)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def test_validate_ip_unicast_address_list_or_none(self):"},{"line_number":323,"context_line":"        ip_list \u003d []"},{"line_number":324,"context_line":"        msg \u003d attributes._validate_ip_unicast_address_list_or_none(ip_list)"},{"line_number":325,"context_line":"        self.assertIsNone(msg)"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_6105920f","line":323,"updated":"2016-03-01 03:00:43.000000000","message":"How about a test where the ip_list is neither a List nor None","commit_id":"72be0bc778eb8e731f7ed035b019e58359a49ec9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"514513c66ffebff2209281c365ec44fac9392b98","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        msg \u003d attributes._validate_ip_unicast_address(ip_addr)"},{"line_number":288,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid unicast IP address\" % ip_addr, msg)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        ip_addr \u003d \u00272001::1\u0027"},{"line_number":291,"context_line":"        msg \u003d attributes._validate_ip_unicast_address(ip_addr)"},{"line_number":292,"context_line":"        self.assertIsNone(msg)"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_f50f0186","line":290,"updated":"2016-03-02 14:40:57.000000000","message":"2001:db8::1","commit_id":"085f0e69a224a8f1a0e25641c4897d8a3c248275"}]}
