)]}'
{"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5d21e8aa0b7bc2ec482b9b33ede2957f3f231362","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    return False"},{"line_number":616,"context_line":"            return True"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        kwargs \u003d {}"},{"line_number":619,"context_line":"        if to:"},{"line_number":620,"context_line":"            cidr \u003d common_utils.ip_to_cidr(to)"},{"line_number":621,"context_line":"            kwargs \u003d {\u0027address\u0027: common_utils.cidr_to_ip(cidr)}"},{"line_number":622,"context_line":"            if not common_utils.is_cidr_host(cidr):"},{"line_number":623,"context_line":"                kwargs[\u0027mask\u0027] \u003d common_utils.cidr_mask_length(cidr)"},{"line_number":624,"context_line":"        if scope:"},{"line_number":625,"context_line":"            kwargs[\u0027scope\u0027] \u003d IP_ADDRESS_SCOPE_NAME[scope]"},{"line_number":626,"context_line":"        if ip_version:"},{"line_number":627,"context_line":"            kwargs[\u0027family\u0027] \u003d common_utils.get_socket_address_family("},{"line_number":628,"context_line":"                ip_version)"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        devices \u003d get_devices_with_ip(self._parent.namespace, name\u003dself.name,"},{"line_number":631,"context_line":"                                      **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_5fa247ae","line":628,"range":{"start_line":618,"start_character":0,"end_line":628,"end_character":27},"updated":"2018-12-03 09:20:17.000000000","message":"Those lines are very similar to L171-174 - maybe it could be moved to get_devices_with_ip() function?","commit_id":"ed94e43b55c803859d4387c31a23edea22073f96"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"66514643bad0858cdefb215609a6592267afc9c9","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    return False"},{"line_number":616,"context_line":"            return True"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        kwargs \u003d {}"},{"line_number":619,"context_line":"        if to:"},{"line_number":620,"context_line":"            cidr \u003d common_utils.ip_to_cidr(to)"},{"line_number":621,"context_line":"            kwargs \u003d {\u0027address\u0027: common_utils.cidr_to_ip(cidr)}"},{"line_number":622,"context_line":"            if not common_utils.is_cidr_host(cidr):"},{"line_number":623,"context_line":"                kwargs[\u0027mask\u0027] \u003d common_utils.cidr_mask_length(cidr)"},{"line_number":624,"context_line":"        if scope:"},{"line_number":625,"context_line":"            kwargs[\u0027scope\u0027] \u003d IP_ADDRESS_SCOPE_NAME[scope]"},{"line_number":626,"context_line":"        if ip_version:"},{"line_number":627,"context_line":"            kwargs[\u0027family\u0027] \u003d common_utils.get_socket_address_family("},{"line_number":628,"context_line":"                ip_version)"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        devices \u003d get_devices_with_ip(self._parent.namespace, name\u003dself.name,"},{"line_number":631,"context_line":"                                      **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_96217db5","line":628,"range":{"start_line":618,"start_character":0,"end_line":628,"end_character":27},"in_reply_to":"3f79a3b5_5fa247ae","updated":"2018-12-04 18:46:01.000000000","message":"Well, only L620-L623.\n\nAnd L171-174 belong to \"get_device_by_ip\", not \"get_devices_with_ip\". I can\u0027t move these lines.","commit_id":"ed94e43b55c803859d4387c31a23edea22073f96"}],"neutron/common/utils.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"027912700a396a0a766ec51ebfd5d45dca7d22ff","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"def get_socket_address_family(ip_version):"},{"line_number":296,"context_line":"    \"\"\"Returns the address family depending on the IP version\"\"\""},{"line_number":297,"context_line":"    return int(socket.AF_INET if ip_version \u003d\u003d 4 else socket.AF_INET6)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"class DelayedStringRenderer(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_57307505","line":297,"range":{"start_line":297,"start_character":47,"end_line":297,"end_character":48},"updated":"2018-11-26 09:26:28.000000000","message":"there is constant for that in neutron_lib.constants, please use it here","commit_id":"b172584622e234e382b6e0ab6f06b3215a597bec"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e18aa539e9c199064331e6ff4f85ef1be3d9e6d4","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"def get_socket_address_family(ip_version):"},{"line_number":296,"context_line":"    \"\"\"Returns the address family depending on the IP version\"\"\""},{"line_number":297,"context_line":"    return int(socket.AF_INET if ip_version \u003d\u003d 4 else socket.AF_INET6)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"class DelayedStringRenderer(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_d5a1dd94","line":297,"range":{"start_line":297,"start_character":47,"end_line":297,"end_character":48},"in_reply_to":"3f79a3b5_57307505","updated":"2018-11-26 10:46:27.000000000","message":"I always try to use defined constants. I missed that!","commit_id":"b172584622e234e382b6e0ab6f06b3215a597bec"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5d21e8aa0b7bc2ec482b9b33ede2957f3f231362","unresolved":false,"context_lines":[{"line_number":271,"context_line":"def cidr_broadcast_address(cidr):"},{"line_number":272,"context_line":"    \"\"\"Returns the broadcast address of a cidr"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    :param cidr: (string) either an ipv4 or ipv6 cidr or a host IP."},{"line_number":275,"context_line":"    :returns: (string) broadcast address of the cidr, None if the cidr has no"},{"line_number":276,"context_line":"              broadcast domain"},{"line_number":277,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_bfb27be6","line":274,"range":{"start_line":274,"start_character":17,"end_line":274,"end_character":25},"updated":"2018-12-03 09:20:17.000000000","message":"nitty nit: string or it can be also netaddr.IPNetwork module as well, right?","commit_id":"ed94e43b55c803859d4387c31a23edea22073f96"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"66514643bad0858cdefb215609a6592267afc9c9","unresolved":false,"context_lines":[{"line_number":271,"context_line":"def cidr_broadcast_address(cidr):"},{"line_number":272,"context_line":"    \"\"\"Returns the broadcast address of a cidr"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    :param cidr: (string) either an ipv4 or ipv6 cidr or a host IP."},{"line_number":275,"context_line":"    :returns: (string) broadcast address of the cidr, None if the cidr has no"},{"line_number":276,"context_line":"              broadcast domain"},{"line_number":277,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_7114eb42","line":274,"range":{"start_line":274,"start_character":17,"end_line":274,"end_character":25},"in_reply_to":"3f79a3b5_bfb27be6","updated":"2018-12-04 18:46:01.000000000","message":"Yes, this can be a netaddr.IPNetwork object","commit_id":"ed94e43b55c803859d4387c31a23edea22073f96"}],"neutron/tests/functional/privileged/agent/linux/test_ip_lib.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4605a26b8110a76e7c9177f2707c1c4b336d2715","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            priv_ip_lib.create_interface(interface, namespace, \u0027dummy\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        device_names \u003d priv_ip_lib.get_device_names(namespace)"},{"line_number":46,"context_line":"        self.assertIsNot(0, len(device_names))"},{"line_number":47,"context_line":"        for name in device_names:"},{"line_number":48,"context_line":"            self.assertIn(name, interfaces_to_check)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_d0f91981","line":46,"updated":"2018-12-05 20:53:38.000000000","message":"self.assertGreater(len(device_names), 0)\n\nalthough I guess len() can\u0027t return negative.","commit_id":"5a866dae9d23ef90c3d741af45c8fa52321f165c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6a08e552e68f49d2b73af64b8cfe57ba9c6a754","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            priv_ip_lib.create_interface(interface, namespace, \u0027dummy\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        device_names \u003d priv_ip_lib.get_device_names(namespace)"},{"line_number":46,"context_line":"        self.assertIsNot(0, len(device_names))"},{"line_number":47,"context_line":"        for name in device_names:"},{"line_number":48,"context_line":"            self.assertIn(name, interfaces_to_check)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_820d89dc","line":46,"in_reply_to":"3f79a3b5_d0f91981","updated":"2018-12-06 15:17:54.000000000","message":"Done","commit_id":"5a866dae9d23ef90c3d741af45c8fa52321f165c"}],"neutron/tests/unit/agent/linux/test_ip_lib.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4605a26b8110a76e7c9177f2707c1c4b336d2715","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        mock_get_dev_ip.assert_called_once_with(\u0027test_ns\u0027,"},{"line_number":848,"context_line":"                                                name\u003dself.addr_cmd.name,"},{"line_number":849,"context_line":"                                                address\u003d\u00271.2.3.4\u0027,"},{"line_number":850,"context_line":"                                                mask\u003d24)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    @mock.patch.object(ip_lib, \u0027get_devices_with_ip\u0027)"},{"line_number":853,"context_line":"    def test_list_ip_version(self, mock_get_dev_ip):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b0deddd4","line":850,"updated":"2018-12-05 20:53:38.000000000","message":"Can you add tests for IPv6 like the above two tests?","commit_id":"5a866dae9d23ef90c3d741af45c8fa52321f165c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6a08e552e68f49d2b73af64b8cfe57ba9c6a754","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        mock_get_dev_ip.assert_called_once_with(\u0027test_ns\u0027,"},{"line_number":848,"context_line":"                                                name\u003dself.addr_cmd.name,"},{"line_number":849,"context_line":"                                                address\u003d\u00271.2.3.4\u0027,"},{"line_number":850,"context_line":"                                                mask\u003d24)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    @mock.patch.object(ip_lib, \u0027get_devices_with_ip\u0027)"},{"line_number":853,"context_line":"    def test_list_ip_version(self, mock_get_dev_ip):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_8834cbac","line":850,"in_reply_to":"3f79a3b5_b0deddd4","updated":"2018-12-06 15:17:54.000000000","message":"Done","commit_id":"5a866dae9d23ef90c3d741af45c8fa52321f165c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4605a26b8110a76e7c9177f2707c1c4b336d2715","unresolved":false,"context_lines":[{"line_number":1933,"context_line":"        self.mock_get_ip_addresses.return_value \u003d ["},{"line_number":1934,"context_line":"            {\u0027prefixlen\u0027: 24, \u0027scope\u0027: 200, \u0027attrs\u0027: ["},{"line_number":1935,"context_line":"                [\u0027IFA_ADDRESS\u0027, \u0027192.168.10.20\u0027],"},{"line_number":1936,"context_line":"                [\u0027IFA_FLAGS\u0027, ifaddrmsg.IFA_F_PERMANENT]]}]"},{"line_number":1937,"context_line":""},{"line_number":1938,"context_line":"        retval \u003d ip_lib._parse_link_device(\u0027namespace\u0027, device)"},{"line_number":1939,"context_line":"        expected \u003d [{\u0027scope\u0027: \u0027site\u0027, \u0027cidr\u0027: \u0027192.168.10.20/24\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_70fcc53f","line":1936,"updated":"2018-12-05 20:53:38.000000000","message":"IPv6 ? :)","commit_id":"5a866dae9d23ef90c3d741af45c8fa52321f165c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6a08e552e68f49d2b73af64b8cfe57ba9c6a754","unresolved":false,"context_lines":[{"line_number":1933,"context_line":"        self.mock_get_ip_addresses.return_value \u003d ["},{"line_number":1934,"context_line":"            {\u0027prefixlen\u0027: 24, \u0027scope\u0027: 200, \u0027attrs\u0027: ["},{"line_number":1935,"context_line":"                [\u0027IFA_ADDRESS\u0027, \u0027192.168.10.20\u0027],"},{"line_number":1936,"context_line":"                [\u0027IFA_FLAGS\u0027, ifaddrmsg.IFA_F_PERMANENT]]}]"},{"line_number":1937,"context_line":""},{"line_number":1938,"context_line":"        retval \u003d ip_lib._parse_link_device(\u0027namespace\u0027, device)"},{"line_number":1939,"context_line":"        expected \u003d [{\u0027scope\u0027: \u0027site\u0027, \u0027cidr\u0027: \u0027192.168.10.20/24\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_4892334b","line":1936,"in_reply_to":"3f79a3b5_70fcc53f","updated":"2018-12-06 15:17:54.000000000","message":"Done","commit_id":"5a866dae9d23ef90c3d741af45c8fa52321f165c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1dc69142ca169b46f6a38db2f6d6dcde4514315b","unresolved":false,"context_lines":[{"line_number":816,"context_line":"    def test_list_ip_version(self, mock_get_dev_ip):"},{"line_number":817,"context_line":"        self.addr_cmd._parent.namespace \u003d \u0027test_ns\u0027"},{"line_number":818,"context_line":"        ip_versions \u003d [{\u0027ip_version\u0027: 4, \u0027family\u0027: 2},"},{"line_number":819,"context_line":"                       {\u0027ip_version\u0027: 6, \u0027family\u0027: 10}]"},{"line_number":820,"context_line":"        for ip_version in ip_versions:"},{"line_number":821,"context_line":"            self.addr_cmd.list(ip_version\u003dip_version[\u0027ip_version\u0027])"},{"line_number":822,"context_line":"            mock_get_dev_ip.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_61fdb304","line":819,"updated":"2018-12-07 15:40:53.000000000","message":"I was going to send a follow-on, but might as well just fix this to use the constant values here:\n\n-        ip_versions \u003d [{\u0027ip_version\u0027: 4, \u0027family\u0027: 2},\n-                       {\u0027ip_version\u0027: 6, \u0027family\u0027: 10}]\n+        ip_versions \u003d [{\u0027ip_version\u0027: constants.IP_VERSION_4,\n+                        \u0027family\u0027: socket.AF_INET},\n+                       {\u0027ip_version\u0027: constants.IP_VERSION_6,\n+                        \u0027family\u0027: socket.AF_INET6}]","commit_id":"c9ba878df286ac80d0acdb14badfe42763844cb8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ddcba476ecaebb9ab14a9b15d0dca71683ee7b2d","unresolved":false,"context_lines":[{"line_number":816,"context_line":"    def test_list_ip_version(self, mock_get_dev_ip):"},{"line_number":817,"context_line":"        self.addr_cmd._parent.namespace \u003d \u0027test_ns\u0027"},{"line_number":818,"context_line":"        ip_versions \u003d [{\u0027ip_version\u0027: 4, \u0027family\u0027: 2},"},{"line_number":819,"context_line":"                       {\u0027ip_version\u0027: 6, \u0027family\u0027: 10}]"},{"line_number":820,"context_line":"        for ip_version in ip_versions:"},{"line_number":821,"context_line":"            self.addr_cmd.list(ip_version\u003dip_version[\u0027ip_version\u0027])"},{"line_number":822,"context_line":"            mock_get_dev_ip.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_30361fe1","line":819,"in_reply_to":"3f79a3b5_61fdb304","updated":"2018-12-07 19:08:11.000000000","message":"Yes, it\u0027s always better to use constant (as I always say and I usually never do!!)","commit_id":"c9ba878df286ac80d0acdb14badfe42763844cb8"}]}
