)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37eefacfc0901d4c19bb2941c0b12671462242e4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     YAMAMOTO Takashi \u003cyamamoto@valinux.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-16 09:40:54 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"attributes: Additional IP address validation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To fix UT failure on some platforms, introduce an additional"},{"line_number":10,"context_line":"ip address validation instead of assuming that netaddr provides it."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"1a930d6b_3dee37b5","line":7,"updated":"2015-01-22 13:53:49.000000000","message":"It is better to mention what kind of validation is added in the commit message. It sounds useful.","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"}],"neutron/api/v2/attributes.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"7a38ff8829a8cc01a5aa54c452dab78015dc99e2","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":178,"context_line":"        LOG.debug(msg)"},{"line_number":179,"context_line":"        return msg"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def _validate_ip_pools(data, valid_values\u003dNone):"},{"line_number":183,"context_line":"    \"\"\"Validate that start and end IP addresses are present."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_3b53d93a","side":"PARENT","line":180,"updated":"2014-11-27 03:17:10.000000000","message":"I find the flow of this function to not be very intuitive; the success case is buried in a try/else.  If you put the contents of the else in the try, the original except doesn\u0027t need to change.  Example:\n\ntry:\n  netaddr.IPAddress(foo)\n  if \u0027:\u0027 in data or foo:\n    raise SomeError()\nexcept Exception:\n  msg \u003d foo\n  LOG.debug(msg)\n  return msg\n\n... then I think it reads better.","commit_id":"963d699df5faa48857f43f1870b68b1a13b5e5f5"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"6524ee8bb955a92d3ba0f1bb544a5f65696b89a2","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":178,"context_line":"        LOG.debug(msg)"},{"line_number":179,"context_line":"        return msg"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def _validate_ip_pools(data, valid_values\u003dNone):"},{"line_number":183,"context_line":"    \"\"\"Validate that start and end IP addresses are present."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_de93a3a2","side":"PARENT","line":180,"in_reply_to":"5a890539_3b53d93a","updated":"2014-11-27 03:32:24.000000000","message":"Done","commit_id":"963d699df5faa48857f43f1870b68b1a13b5e5f5"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"72103bf0bf23c03e1057c3e7b69947a1730ada17","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise Exception()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":191,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_3eb90716","line":188,"updated":"2014-11-27 03:37:32.000000000","message":"nit: I\u0027d probably raise a ValueError() here, if you do another rev for some other reason.","commit_id":"5b3e3c8167408c0984785c9889592152dd89f906"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"152f2602f02f5cfa7cdc6f6b0cc969b715a5c0ef","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise Exception()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":191,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_c9667029","line":188,"in_reply_to":"5a890539_3eb90716","updated":"2014-11-28 05:31:55.000000000","message":"Done","commit_id":"5b3e3c8167408c0984785c9889592152dd89f906"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1190dea18e7946fde4a307cbb894de4ee6575797","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":191,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_7928c933","line":188,"updated":"2014-12-01 10:02:00.000000000","message":"in general we should not raise - all of the validate methods return a string if there is a problem","commit_id":"f6b293dac5ee3160aaec5a84c0f8fbf03b328799"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"22ca0d01e73a7b717e8ec89ebbde0d34a119bde2","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":191,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a890539_37eb8f79","line":188,"in_reply_to":"5a890539_7928c933","updated":"2014-12-02 02:06:13.000000000","message":"garyk,\nthis exception is caught by the surrounding try-except and invisible to callers.","commit_id":"f6b293dac5ee3160aaec5a84c0f8fbf03b328799"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"200e965f31c92414cbba18e32438b6082df9445a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"def _validate_ip_address(data, valid_values\u003dNone):"},{"line_number":174,"context_line":"    try:"},{"line_number":175,"context_line":"        netaddr.IPAddress(_validate_no_whitespace(data))"},{"line_number":176,"context_line":"        # NOTE(yamamoto): netaddr uses libraries provided by the underlying"},{"line_number":177,"context_line":"        # platform to convert addresses.  For example, inet_aton(3)."},{"line_number":178,"context_line":"        # Some platforms, including NetBSD and OS X, have inet_aton"},{"line_number":179,"context_line":"        # implementation which accepts more varying forms of addresses than"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_6ca85bdc","line":176,"updated":"2014-12-24 20:32:21.000000000","message":"that\u0027s an awful lot of comments for a one line change :)","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d293731a944b8ff2d7be68282c7004dccce65cd5","unresolved":false,"context_lines":[{"line_number":173,"context_line":"def _validate_ip_address(data, valid_values\u003dNone):"},{"line_number":174,"context_line":"    try:"},{"line_number":175,"context_line":"        netaddr.IPAddress(_validate_no_whitespace(data))"},{"line_number":176,"context_line":"        # NOTE(yamamoto): netaddr uses libraries provided by the underlying"},{"line_number":177,"context_line":"        # platform to convert addresses.  For example, inet_aton(3)."},{"line_number":178,"context_line":"        # Some platforms, including NetBSD and OS X, have inet_aton"},{"line_number":179,"context_line":"        # implementation which accepts more varying forms of addresses than"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_9aa627aa","line":176,"in_reply_to":"3a961159_6ca85bdc","updated":"2015-01-14 03:02:08.000000000","message":"yes, as you know, the necessity of comments is not always proportional to the number of lines.","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"55872260f5d4ed397f0c56122caec1d7410dd9ef","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        #   \u003e\u003e\u003e netaddr.IPAddress(str(int(\u00271\u0027 * 59) \u0026 0xffffffff))"},{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_77d8451e","line":187,"updated":"2015-01-08 11:09:27.000000000","message":"split constructs a list. wouldn\u0027t \"data.count(\u0027.\u0027) !\u003d 4\" work here?","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d293731a944b8ff2d7be68282c7004dccce65cd5","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        #   \u003e\u003e\u003e netaddr.IPAddress(str(int(\u00271\u0027 * 59) \u0026 0xffffffff))"},{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_da06efcc","line":187,"in_reply_to":"3a961159_77d8451e","updated":"2015-01-14 03:02:08.000000000","message":"good idea.","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"17c1c361d243f236229948160fb94dab6954ad94","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":191,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_4697f6eb","line":188,"updated":"2015-01-09 17:19:58.000000000","message":"It\u0027s strange to raise a ValueError in a broad try except ... l186/187 could be done outside of the try/except:\n\n try:\n   netaddr.IPAddress(_validate_no_whitespace(data))\n except Exception:\n   pass\n else:\n   if \u0027:\u0027 in data or data.count(\u0027.\u0027)) \u003d\u003d 3:\n     return\n \n msg \u003d _(...)\n LOG.debug(msg)\n return msg","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d293731a944b8ff2d7be68282c7004dccce65cd5","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and len(data.split(\u0027.\u0027)) !\u003d 4:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"},{"line_number":191,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_3a70d372","line":188,"in_reply_to":"3a961159_4697f6eb","updated":"2015-01-14 03:02:08.000000000","message":"that\u0027s my preference too.  see PS5.\n\nunfortunately there doesn\u0027t seem to be a consistent preference among folks.","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"717fd0677fac5b90b16da39f84107057f33f2c45","unresolved":false,"context_lines":[{"line_number":173,"context_line":"def _validate_ip_address(data, valid_values\u003dNone):"},{"line_number":174,"context_line":"    try:"},{"line_number":175,"context_line":"        netaddr.IPAddress(_validate_no_whitespace(data))"},{"line_number":176,"context_line":"        # NOTE(yamamoto): netaddr uses libraries provided by the underlying"},{"line_number":177,"context_line":"        # platform to convert addresses.  For example, inet_aton(3)."},{"line_number":178,"context_line":"        # Some platforms, including NetBSD and OS X, have inet_aton"},{"line_number":179,"context_line":"        # implementation which accepts more varying forms of addresses than"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_ed632e18","line":176,"updated":"2015-01-22 07:49:37.000000000","message":"interesting.","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"7dc166d434f5fbd624cdcfd6cce35230c51090ef","unresolved":false,"context_lines":[{"line_number":173,"context_line":"def _validate_ip_address(data, valid_values\u003dNone):"},{"line_number":174,"context_line":"    try:"},{"line_number":175,"context_line":"        netaddr.IPAddress(_validate_no_whitespace(data))"},{"line_number":176,"context_line":"        # NOTE(yamamoto): netaddr uses libraries provided by the underlying"},{"line_number":177,"context_line":"        # platform to convert addresses.  For example, inet_aton(3)."},{"line_number":178,"context_line":"        # Some platforms, including NetBSD and OS X, have inet_aton"},{"line_number":179,"context_line":"        # implementation which accepts more varying forms of addresses than"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_b22a562a","line":176,"in_reply_to":"1a930d6b_ed632e18","updated":"2015-01-22 13:33:26.000000000","message":"Yeah, thanks for the info.","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37eefacfc0901d4c19bb2941c0b12671462242e4","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":184,"context_line":"        #   \u003e\u003e\u003e netaddr.IPAddress(str(int(\u00271\u0027 * 59) \u0026 0xffffffff))"},{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_fd1bcf19","line":186,"updated":"2015-01-22 13:53:49.000000000","message":"The condition at L.187 is understandable but it is not so obvious. It is worth mentioned what this line checks. It checks if IPv4 address has three periods with 4 octets.\n\n(this is my main reason of -1)","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"7dc166d434f5fbd624cdcfd6cce35230c51090ef","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        #   \u003e\u003e\u003e netaddr.IPAddress(str(int(\u00271\u0027 * 59) \u0026 0xffffffff))"},{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_52de9212","line":187,"updated":"2015-01-22 13:33:26.000000000","message":"This does not warrant an ApiImpact tag, does it? I mean, it changes what the API will accept, but this is now the behavior that was intended all along. Right?","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f701cf71cf057220f1af1aaded6e97c50bbdf94e","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        #   \u003e\u003e\u003e netaddr.IPAddress(str(int(\u00271\u0027 * 59) \u0026 0xffffffff))"},{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_7d86ff66","line":187,"in_reply_to":"1a930d6b_52de9212","updated":"2015-01-22 13:47:15.000000000","message":"right.\ni don\u0027t think apiimpact is appropriate for this change.","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37eefacfc0901d4c19bb2941c0b12671462242e4","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        #   \u003e\u003e\u003e netaddr.IPAddress(str(int(\u00271\u0027 * 59) \u0026 0xffffffff))"},{"line_number":185,"context_line":"        #   IPAddress(\u0027199.28.113.199\u0027)"},{"line_number":186,"context_line":"        #   \u003e\u003e\u003e"},{"line_number":187,"context_line":"        if \u0027:\u0027 not in data and data.count(\u0027.\u0027) !\u003d 3:"},{"line_number":188,"context_line":"            raise ValueError()"},{"line_number":189,"context_line":"    except Exception:"},{"line_number":190,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid IP address\") % data"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_5d906343","line":187,"in_reply_to":"1a930d6b_7d86ff66","updated":"2015-01-22 13:53:49.000000000","message":"I am not sure we need APIImpact tag. IMHO APIImpact tag should be added when there is a change in API spec OR bug fix includes a change in API behavior which is expected to use to some extent.\n\nIn this case, it is just a corner case and I think expecting neutron runs on linux servers is a reasonable assumption.","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"}],"neutron/tests/unit/test_attributes.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3e7b5b250cfa263f67de6093797990d9719f7f44","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        with mock.patch(\u0027netaddr.IPAddress\u0027) as ip_address_cls:"},{"line_number":252,"context_line":"            msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":253,"context_line":"        ip_address_cls.assert_called_once_with(ip_addr)"},{"line_number":254,"context_line":"        self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def test_validate_ip_pools(self):"},{"line_number":257,"context_line":"        pools \u003d [[{\u0027end\u0027: \u002710.0.0.254\u0027}],"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_02620e16","line":254,"updated":"2014-11-28 09:47:54.000000000","message":"it should be\n\n  self.assertEqual(expected,observed)","commit_id":"b6c2e5345ee1dbbb637474bf2fbad6d0227d68d6"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f3ee9d29fe8bd2bf4ea8fb2e7a4f844a80648e6f","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        with mock.patch(\u0027netaddr.IPAddress\u0027) as ip_address_cls:"},{"line_number":252,"context_line":"            msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":253,"context_line":"        ip_address_cls.assert_called_once_with(ip_addr)"},{"line_number":254,"context_line":"        self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def test_validate_ip_pools(self):"},{"line_number":257,"context_line":"        pools \u003d [[{\u0027end\u0027: \u002710.0.0.254\u0027}],"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_622e578e","line":254,"in_reply_to":"5a890539_02620e16","updated":"2014-12-01 02:35:50.000000000","message":"Done","commit_id":"b6c2e5345ee1dbbb637474bf2fbad6d0227d68d6"},{"author":{"_account_id":9423,"name":"Roey Chen","email":"roeyc@vmware.com","username":"roeyc"},"change_message_id":"74041b11640b5b0671c4056ff31adca48e4879b8","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":224,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":225,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":226,"context_line":"        self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":229,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_b90e0d39","line":226,"updated":"2014-12-15 12:39:04.000000000","message":"self.assertEqual(expected, actual) is prefered","commit_id":"e62e26a300ab4c464dd07caac8eebf641f527b30"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"707d8a7417a08a92d9844aec5aeb23bf87485792","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":224,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":225,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":226,"context_line":"        self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":229,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_ff7f95a8","line":226,"in_reply_to":"3a961159_b90e0d39","updated":"2014-12-15 13:32:23.000000000","message":"i know, but i chose to make it consistent with the nearby assertions.","commit_id":"e62e26a300ab4c464dd07caac8eebf641f527b30"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"200e965f31c92414cbba18e32438b6082df9445a","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":248,"context_line":"            self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def test_validate_ip_address_bsd(self):"},{"line_number":251,"context_line":"        # NOTE(yamamoto):  On NetBSD and OS X, netaddr.IPAddress() accepts"},{"line_number":252,"context_line":"        # \u00271\u0027 * 59 as a valid address.  The behaviour is inherited from"},{"line_number":253,"context_line":"        # libc behaviour there.  This test ensures that our validator reject"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_ece1ab2b","line":250,"updated":"2014-12-24 20:32:21.000000000","message":"is this test really necessary? I don\u0027t think it is, as what is supposed to validate? I think that the level of coverage provided is equivalent to test in line 222","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d293731a944b8ff2d7be68282c7004dccce65cd5","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":248,"context_line":"            self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def test_validate_ip_address_bsd(self):"},{"line_number":251,"context_line":"        # NOTE(yamamoto):  On NetBSD and OS X, netaddr.IPAddress() accepts"},{"line_number":252,"context_line":"        # \u00271\u0027 * 59 as a valid address.  The behaviour is inherited from"},{"line_number":253,"context_line":"        # libc behaviour there.  This test ensures that our validator reject"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_3a93735d","line":250,"in_reply_to":"3a961159_ece1ab2b","updated":"2015-01-14 03:02:08.000000000","message":"this case provides an easy way for linux-only folks to validate that their change doesn\u0027t break the code for other platforms.\nas the most of developers run UTs only on Linux, i think it\u0027s worth to have.\nif you feel strongly i can remove this case, though.","commit_id":"4e1062982468e5a23f8c93e6ed9bedf506ce8c7e"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"47c271fc1057abf35f4b21349855d62ef355ec47","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":224,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":225,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":226,"context_line":"        self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":229,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_d87eb7e2","line":226,"updated":"2015-01-15 15:18:50.000000000","message":"it should be:\n\n  self.assertEqual(expected, observed)","commit_id":"b48366b29bf37018f2454ce113dbc189d3a7dd38"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"8098485816e9b172d8f0eef4348267d7179fc3bb","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":224,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":225,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":226,"context_line":"        self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":229,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_e39bb4c6","line":226,"in_reply_to":"3a961159_d87eb7e2","updated":"2015-01-16 00:22:53.000000000","message":"right.\nbut i preferred consistency with the other assertions in this method.\nand i don\u0027t want to mix unrelated changes in a patch.","commit_id":"b48366b29bf37018f2454ce113dbc189d3a7dd38"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"7416c869aad46326855fb998bdfe0d2fe55b581f","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":224,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":225,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":226,"context_line":"        self.assertEqual(msg, \"\u0027%s\u0027 is not a valid IP address\" % ip_addr)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        ip_addr \u003d \u00271.1.1.1 has whitespace\u0027"},{"line_number":229,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_63542454","line":226,"in_reply_to":"3a961159_e39bb4c6","updated":"2015-01-16 00:44:55.000000000","message":"Done","commit_id":"b48366b29bf37018f2454ce113dbc189d3a7dd38"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"717fd0677fac5b90b16da39f84107057f33f2c45","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":218,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        # Depending a platform to run UTs, this case might or might not be"},{"line_number":221,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":222,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":223,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_8d746ad0","line":220,"updated":"2015-01-22 07:49:37.000000000","message":"s/a/on","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"eb2242c47348c958a4b480f8e939e4e926cc6a7d","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":218,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        # Depending a platform to run UTs, this case might or might not be"},{"line_number":221,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":222,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":223,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_2c3958f3","line":220,"in_reply_to":"1a930d6b_0c665c2a","updated":"2015-01-26 02:54:12.000000000","message":"the placement of this comment is intended.\nit\u0027s about the following \u00271\u0027 * 59 case.","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"79f024cc540bf2dd5c4c4bade8254eca779314dd","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":218,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        # Depending a platform to run UTs, this case might or might not be"},{"line_number":221,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":222,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":223,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_8f15de41","line":220,"in_reply_to":"1a930d6b_2c3958f3","updated":"2015-01-26 02:57:58.000000000","message":"oops i misunderstand Henry\u0027s comment.  anyway done.  thank you.","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"8033a2f1baa0d8647d055952330b4c6bdc729eab","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":218,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        # Depending a platform to run UTs, this case might or might not be"},{"line_number":221,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":222,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":223,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_ac0b8828","line":220,"in_reply_to":"1a930d6b_8d746ad0","updated":"2015-01-26 02:55:52.000000000","message":"Done","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e5c946d42894da4048e6460053631b741787c134","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"},{"line_number":218,"context_line":"        self.assertEqual(\"\u0027%s\u0027 is not a valid IP address\" % ip_addr, msg)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        # Depending a platform to run UTs, this case might or might not be"},{"line_number":221,"context_line":"        # an equivalent to test_validate_ip_address_bsd."},{"line_number":222,"context_line":"        ip_addr \u003d \u00271\u0027 * 59"},{"line_number":223,"context_line":"        msg \u003d attributes._validate_ip_address(ip_addr)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a930d6b_0c665c2a","line":220,"in_reply_to":"1a930d6b_8d746ad0","updated":"2015-01-26 02:50:57.000000000","message":"Looks like this comment fell between the cracks?","commit_id":"21a39b13d465730b6ef9cd56d94766830dc32054"}]}
