)]}'
{"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_maintenance.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e12a0b4b156e5739c9b4bf84f3deee3e43fa18dc","unresolved":false,"context_lines":[{"line_number":770,"context_line":"            type\u003d\u0027snat\u0027))"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def test_router_port(self):"},{"line_number":774,"context_line":"        neutron_net \u003d self._create_network(\u0027networktest\u0027, external\u003dTrue)"},{"line_number":775,"context_line":"        neutron_subnet \u003d self._create_subnet(\u0027subnettest\u0027, neutron_net[\u0027id\u0027])"},{"line_number":776,"context_line":"        neutron_router \u003d self._create_router(\u0027routertest\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_e421d8fe","line":773,"updated":"2020-07-18 03:48:49.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"c4c3d8ed8e0013b5cc349f7d9fdbcd9273ecccf4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"13584a1c2f0db7d170eeae009ffa44ce8afdb42a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        if ip_version \u003d\u003d 4:"},{"line_number":121,"context_line":"            cidr \u003d \u002710.0.0.0/24\u0027"},{"line_number":122,"context_line":"        else:"},{"line_number":123,"context_line":"            cidr \u003d \u0027eef0::/64\u0027"},{"line_number":124,"context_line":"        kwargs \u003d {\u0027name\u0027: name,"},{"line_number":125,"context_line":"                  \u0027ip_version\u0027: ip_version,"},{"line_number":126,"context_line":"                  \u0027cidr\u0027: cidr,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_68f89d7b","line":123,"range":{"start_line":123,"start_character":20,"end_line":123,"end_character":24},"updated":"2020-07-24 02:02:43.000000000","message":"I realize you\u0027re just updating what\u0027s here, but if it\u0027s easy enough we should use the IPv6 doc prefix here, 2001:db8:: (or any sub-prefix of that)","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"7927016e8ab76e577bb7b426e71e6b0e13eaae81","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        if ip_version \u003d\u003d 4:"},{"line_number":121,"context_line":"            cidr \u003d \u002710.0.0.0/24\u0027"},{"line_number":122,"context_line":"        else:"},{"line_number":123,"context_line":"            cidr \u003d \u0027eef0::/64\u0027"},{"line_number":124,"context_line":"        kwargs \u003d {\u0027name\u0027: name,"},{"line_number":125,"context_line":"                  \u0027ip_version\u0027: ip_version,"},{"line_number":126,"context_line":"                  \u0027cidr\u0027: cidr,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_d4cc4d63","line":123,"range":{"start_line":123,"start_character":20,"end_line":123,"end_character":24},"in_reply_to":"bf51134e_68f89d7b","updated":"2020-07-26 16:06:52.000000000","message":"np. Done","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"13584a1c2f0db7d170eeae009ffa44ce8afdb42a","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _create_subnet_kwargs(self, net_id, **kwargs):"},{"line_number":131,"context_line":"        data \u003d {\u0027subnet\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":132,"context_line":"                           \u0027ip_version\u0027: 4,"},{"line_number":133,"context_line":"                           \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":134,"context_line":"        for arg in (\u0027name\u0027, \u0027cidr\u0027, \u0027ip_version\u0027, \u0027tenant_id\u0027, \u0027subnetpool_id\u0027,"},{"line_number":135,"context_line":"                    \u0027gateway_ip\u0027, \u0027prefixlen\u0027, \u0027enable_dhcp\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_e8294df2","line":132,"updated":"2020-07-24 02:02:43.000000000","message":"Do you need this?  Caller is passing ip_version so below loop should fill it in.  Or maybe callers below aren\u0027t providing it?","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"7927016e8ab76e577bb7b426e71e6b0e13eaae81","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _create_subnet_kwargs(self, net_id, **kwargs):"},{"line_number":131,"context_line":"        data \u003d {\u0027subnet\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":132,"context_line":"                           \u0027ip_version\u0027: 4,"},{"line_number":133,"context_line":"                           \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":134,"context_line":"        for arg in (\u0027name\u0027, \u0027cidr\u0027, \u0027ip_version\u0027, \u0027tenant_id\u0027, \u0027subnetpool_id\u0027,"},{"line_number":135,"context_line":"                    \u0027gateway_ip\u0027, \u0027prefixlen\u0027, \u0027enable_dhcp\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_b498b96a","line":132,"in_reply_to":"bf51134e_e8294df2","updated":"2020-07-26 16:06:52.000000000","message":"That is right, callers below were not passing it in. But I can make them do it and remove line 132. Done.","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"13584a1c2f0db7d170eeae009ffa44ce8afdb42a","unresolved":false,"context_lines":[{"line_number":948,"context_line":"        # Assert the router snat rule is still there"},{"line_number":949,"context_line":"        self.assertIsNotNone(self._find_nat_rule("},{"line_number":950,"context_line":"            router[\u0027id\u0027], \u0027100.0.0.2\u0027, logical_ip\u003dsubnet1[\u0027cidr\u0027],"},{"line_number":951,"context_line":"            type\u003d\u0027snat\u0027))"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def test_port_forwarding(self):"},{"line_number":954,"context_line":"        fip_attrs \u003d lambda args: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_881b71c8","line":951,"updated":"2020-07-24 02:02:43.000000000","message":"Is it worth it to save the nat rule for comparison?  that way you know it\u0027s correct and not just NotNone?","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"7927016e8ab76e577bb7b426e71e6b0e13eaae81","unresolved":false,"context_lines":[{"line_number":948,"context_line":"        # Assert the router snat rule is still there"},{"line_number":949,"context_line":"        self.assertIsNotNone(self._find_nat_rule("},{"line_number":950,"context_line":"            router[\u0027id\u0027], \u0027100.0.0.2\u0027, logical_ip\u003dsubnet1[\u0027cidr\u0027],"},{"line_number":951,"context_line":"            type\u003d\u0027snat\u0027))"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def test_port_forwarding(self):"},{"line_number":954,"context_line":"        fip_attrs \u003d lambda args: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_d479ed2f","line":951,"in_reply_to":"bf51134e_881b71c8","updated":"2020-07-26 16:06:52.000000000","message":"Done. BUT... the find_nat_rule parameters are already doing that, so comparison is a little bit redundant.","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"13584a1c2f0db7d170eeae009ffa44ce8afdb42a","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"        fip_pf_args \u003d {pf_def.EXTERNAL_PORT: 5353,"},{"line_number":1022,"context_line":"                       pf_def.INTERNAL_PORT: 53,"},{"line_number":1023,"context_line":"                       pf_def.PROTOCOL: \u0027udp\u0027}"},{"line_number":1024,"context_line":"        with mock.patch(\u0027neutron_lib.callbacks.registry.notify\u0027) as m_notify:"},{"line_number":1025,"context_line":"            self.pf_plugin.update_floatingip_port_forwarding("},{"line_number":1026,"context_line":"                self.context, pf_obj[\u0027id\u0027], fip_id, **fip_attrs(fip_pf_args))"},{"line_number":1027,"context_line":"            m_notify.assert_called()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_a87595fc","line":1024,"updated":"2020-07-24 02:02:43.000000000","message":"You\u0027re mocking this three times.  If we truly don\u0027t care for the entire test we should use a decorator for the function, something like this on L953:\n\n@mock.patch.object(neutron_lib.callbacks.registry, \u0027notify\u0027)\ndef test_port_forwarding(self, m_notify):","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"7927016e8ab76e577bb7b426e71e6b0e13eaae81","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"        fip_pf_args \u003d {pf_def.EXTERNAL_PORT: 5353,"},{"line_number":1022,"context_line":"                       pf_def.INTERNAL_PORT: 53,"},{"line_number":1023,"context_line":"                       pf_def.PROTOCOL: \u0027udp\u0027}"},{"line_number":1024,"context_line":"        with mock.patch(\u0027neutron_lib.callbacks.registry.notify\u0027) as m_notify:"},{"line_number":1025,"context_line":"            self.pf_plugin.update_floatingip_port_forwarding("},{"line_number":1026,"context_line":"                self.context, pf_obj[\u0027id\u0027], fip_id, **fip_attrs(fip_pf_args))"},{"line_number":1027,"context_line":"            m_notify.assert_called()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_349e6963","line":1024,"in_reply_to":"bf51134e_a87595fc","updated":"2020-07-26 16:06:52.000000000","message":"Ack. Trouble is that \"I don\u0027t care\" only after FIP is created (line 999), so I cannot blanket add it for the whole test. I will move this up, so I create the mock only once.","commit_id":"95b6cea367273d1a68602c514e68b56447e4bb26"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c2d8f4503d6776b997c5be61499ce06506b79f76","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                  \u0027enable_dhcp\u0027: True}"},{"line_number":128,"context_line":"        return self._create_subnet_kwargs(net_id, **kwargs)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _create_subnet_kwargs(self, net_id, **kwargs):"},{"line_number":131,"context_line":"        data \u003d {\u0027subnet\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":132,"context_line":"                           \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":133,"context_line":"        for arg in (\u0027name\u0027, \u0027cidr\u0027, \u0027ip_version\u0027, \u0027tenant_id\u0027, \u0027subnetpool_id\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_de80958e","line":130,"updated":"2020-08-18 20:20:19.000000000","message":"Could we just add a **kwargs to _create_subnet() and just assume that people are passing in sane values to test and do something like:\n\ndef _create_subnet(self, name, net_id, ip_version\u003d4, **kwargs):\n ip ip_version \u003d\u003d 4:\n    data[\u0027subnet\u0027][\u0027cidr\u0027] \u003d ...\n ...\n data[\u0027subnet\u0027].update(kwargs)","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"13add7acccb92787d960a5685cd521652370fe2b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                  \u0027enable_dhcp\u0027: True}"},{"line_number":128,"context_line":"        return self._create_subnet_kwargs(net_id, **kwargs)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _create_subnet_kwargs(self, net_id, **kwargs):"},{"line_number":131,"context_line":"        data \u003d {\u0027subnet\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":132,"context_line":"                           \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":133,"context_line":"        for arg in (\u0027name\u0027, \u0027cidr\u0027, \u0027ip_version\u0027, \u0027tenant_id\u0027, \u0027subnetpool_id\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_0ae007cc","line":130,"in_reply_to":"9f560f44_de80958e","updated":"2020-08-19 01:29:49.000000000","message":"yes! Done.","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c2d8f4503d6776b997c5be61499ce06506b79f76","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                       type\u003d\u0027dnat_and_snat\u0027):"},{"line_number":228,"context_line":"        rules \u003d self.nb_api.get_lrouter_nat_rules(utils.ovn_name(router_id))"},{"line_number":229,"context_line":"        for rule in rules:"},{"line_number":230,"context_line":"            if all((rule.get(\u0027type\u0027) \u003d\u003d type,"},{"line_number":231,"context_line":"                    rule.get(\u0027external_ip\u0027) \u003d\u003d external_ip,"},{"line_number":232,"context_line":"                    not logical_ip or rule.get(\u0027logical_ip\u0027) \u003d\u003d logical_ip)):"},{"line_number":233,"context_line":"                return rule"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_410caa3a","line":230,"updated":"2020-08-18 20:20:19.000000000","message":"nit:\n\nall() feels a little superfluous when just using a hardcoded tuple to avoid writing \u0027and\u0027 in an if statement instead of something like\n\n all(thing.val \u003d\u003d 7 for thing in things).\n\nIf I\u0027m reading this right it\u0027s basically \"return the first rule where type, external_ip match and logical_ip matches or isn\u0027t set? \"Return the first\" always makes me think of \"next()\".\n\n return next(\n     (r for r in rules if r[\u0027type\u0027] \u003d\u003d type and\n      r[\u0027external_ip\u0027] \u003d\u003d external_ip and\n      (not logical_ip or rule[\u0027logical_ip\u0027] \u003d\u003d logical_ip)), None)\n\nThough to be honest, the loop/if might be easier to read. So feel free to ignore that rambling part. But I\u0027d probably still drop the call to all() since it implied something a little more complex was going on than actually was.","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"13add7acccb92787d960a5685cd521652370fe2b","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                       type\u003d\u0027dnat_and_snat\u0027):"},{"line_number":228,"context_line":"        rules \u003d self.nb_api.get_lrouter_nat_rules(utils.ovn_name(router_id))"},{"line_number":229,"context_line":"        for rule in rules:"},{"line_number":230,"context_line":"            if all((rule.get(\u0027type\u0027) \u003d\u003d type,"},{"line_number":231,"context_line":"                    rule.get(\u0027external_ip\u0027) \u003d\u003d external_ip,"},{"line_number":232,"context_line":"                    not logical_ip or rule.get(\u0027logical_ip\u0027) \u003d\u003d logical_ip)):"},{"line_number":233,"context_line":"                return rule"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_6a354346","line":230,"in_reply_to":"9f560f44_410caa3a","updated":"2020-08-19 01:29:49.000000000","message":"Yes! Done.","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c2d8f4503d6776b997c5be61499ce06506b79f76","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            ext_ids \u003d ovn_lb.external_ids"},{"line_number":240,"context_line":"            if not fip_id or fip_id \u003d\u003d ext_ids[ovn_const.OVN_FIP_EXT_ID_KEY]:"},{"line_number":241,"context_line":"                result.append(ovn_lb)"},{"line_number":242,"context_line":"        return result if result else None"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class TestMaintenance(_TestMaintenanceHelper):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_c1eb9ad9","line":242,"updated":"2020-08-18 20:20:19.000000000","message":"nit:\n\nPersonal preference, but on methods that return iterables, I generally don\u0027t like when None is returned. It makes it hard to just do something like:\n\n for lb in _matching_pf_lbs(router, fip):\n     ...\n\nbecause you always have to handle that lurking TypeError even though [] evaluates as False and so you can still use that for:\n\n if _matching_pf_lbs(router, fip):\n     ...\n\nand just use assertFalse() instead of assertIsNone().\n\nThough in this case, being test code, you always know exactly how it\u0027s going to be used and what the return values are supposed to be, so I realize it doesn\u0027t really matter as much here. :p","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"13add7acccb92787d960a5685cd521652370fe2b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            ext_ids \u003d ovn_lb.external_ids"},{"line_number":240,"context_line":"            if not fip_id or fip_id \u003d\u003d ext_ids[ovn_const.OVN_FIP_EXT_ID_KEY]:"},{"line_number":241,"context_line":"                result.append(ovn_lb)"},{"line_number":242,"context_line":"        return result if result else None"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class TestMaintenance(_TestMaintenanceHelper):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_6a8383cd","line":242,"in_reply_to":"9f560f44_c1eb9ad9","updated":"2020-08-19 01:29:49.000000000","message":"Yeah. I can also use a list comprehension here too.\nDone.","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c2d8f4503d6776b997c5be61499ce06506b79f76","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        ext_net \u003d self._create_network(\u0027ext_networktest\u0027, external\u003dTrue)"},{"line_number":858,"context_line":"        ext_subnet \u003d self._create_subnet_kwargs("},{"line_number":859,"context_line":"            ext_net[\u0027id\u0027],"},{"line_number":860,"context_line":"            **{\u0027name\u0027: \u0027ext_subnettest\u0027,"},{"line_number":861,"context_line":"               \u0027ip_version\u0027: 4,"},{"line_number":862,"context_line":"               \u0027cidr\u0027: \u0027100.0.0.0/24\u0027,"},{"line_number":863,"context_line":"               \u0027gateway_ip\u0027: \u0027100.0.0.254\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_61844e0d","line":860,"updated":"2020-08-18 20:20:19.000000000","message":"Same on these, seems like the arguments should just be passed normally _create_subnet(name\u003d\u0027ext_subnettest\u0027, ip_version\u003d4, ...) etc. instead of the redirection involved with taking a hardcoded dict and unpacking the arguments.","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"13add7acccb92787d960a5685cd521652370fe2b","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        ext_net \u003d self._create_network(\u0027ext_networktest\u0027, external\u003dTrue)"},{"line_number":858,"context_line":"        ext_subnet \u003d self._create_subnet_kwargs("},{"line_number":859,"context_line":"            ext_net[\u0027id\u0027],"},{"line_number":860,"context_line":"            **{\u0027name\u0027: \u0027ext_subnettest\u0027,"},{"line_number":861,"context_line":"               \u0027ip_version\u0027: 4,"},{"line_number":862,"context_line":"               \u0027cidr\u0027: \u0027100.0.0.0/24\u0027,"},{"line_number":863,"context_line":"               \u0027gateway_ip\u0027: \u0027100.0.0.254\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_4a867fdd","line":860,"in_reply_to":"9f560f44_61844e0d","updated":"2020-08-19 01:29:49.000000000","message":"Done","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c2d8f4503d6776b997c5be61499ce06506b79f76","unresolved":false,"context_lines":[{"line_number":964,"context_line":"                 \u0027{}:{}\u0027.format(p1_ip, vip_int_port)})"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        ext_net \u003d self._create_network(\u0027ext_networktest\u0027, external\u003dTrue)"},{"line_number":967,"context_line":"        ext_subnet \u003d self._create_subnet_kwargs("},{"line_number":968,"context_line":"            ext_net[\u0027id\u0027],"},{"line_number":969,"context_line":"            **{\u0027name\u0027: \u0027ext_subnettest\u0027,"},{"line_number":970,"context_line":"               \u0027ip_version\u0027: 4,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_01e0f2cb","line":967,"updated":"2020-08-18 20:20:19.000000000","message":"arguments vs dict unpacking","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"13add7acccb92787d960a5685cd521652370fe2b","unresolved":false,"context_lines":[{"line_number":964,"context_line":"                 \u0027{}:{}\u0027.format(p1_ip, vip_int_port)})"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"        ext_net \u003d self._create_network(\u0027ext_networktest\u0027, external\u003dTrue)"},{"line_number":967,"context_line":"        ext_subnet \u003d self._create_subnet_kwargs("},{"line_number":968,"context_line":"            ext_net[\u0027id\u0027],"},{"line_number":969,"context_line":"            **{\u0027name\u0027: \u0027ext_subnettest\u0027,"},{"line_number":970,"context_line":"               \u0027ip_version\u0027: 4,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_aa6c7b36","line":967,"in_reply_to":"9f560f44_01e0f2cb","updated":"2020-08-19 01:29:49.000000000","message":"Done","commit_id":"1a70ca95d59952cf75c431c0c2d866f3e706a0ce"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f93389299e8e4cc9127cc51424c8dbebe4831a25","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                                               group\u003d\u0027ovn\u0027)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_subnet(self, name, net_id, ip_version\u003d4, **kwargs):"},{"line_number":120,"context_line":"        if ip_version \u003d\u003d 4:"},{"line_number":121,"context_line":"            cidr \u003d \u002710.0.0.0/24\u0027"},{"line_number":122,"context_line":"        else:"},{"line_number":123,"context_line":"            cidr \u003d \u00272001:db8::/64\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_a7cd6d67","line":120,"range":{"start_line":120,"start_character":25,"end_line":120,"end_character":26},"updated":"2020-08-25 15:06:29.000000000","message":"we have constant https://github.com/openstack/neutron-lib/blob/master/neutron_lib/constants.py#L93 and we should use it everywhere","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"03e1f206c13c241cac92fc9d4b5fd684b9317666","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                                               group\u003d\u0027ovn\u0027)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_subnet(self, name, net_id, ip_version\u003d4, **kwargs):"},{"line_number":120,"context_line":"        if ip_version \u003d\u003d 4:"},{"line_number":121,"context_line":"            cidr \u003d \u002710.0.0.0/24\u0027"},{"line_number":122,"context_line":"        else:"},{"line_number":123,"context_line":"            cidr \u003d \u00272001:db8::/64\u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_72a9f522","line":120,"range":{"start_line":120,"start_character":25,"end_line":120,"end_character":26},"in_reply_to":"9f560f44_a7cd6d67","updated":"2020-08-31 15:56:53.000000000","message":"Done","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f93389299e8e4cc9127cc51424c8dbebe4831a25","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                       type\u003d\u0027dnat_and_snat\u0027):"},{"line_number":218,"context_line":"        rules \u003d self.nb_api.get_lrouter_nat_rules(utils.ovn_name(router_id))"},{"line_number":219,"context_line":"        return next((r for r in rules"},{"line_number":220,"context_line":"                     if r[\u0027type\u0027] \u003d\u003d type and"},{"line_number":221,"context_line":"                     r[\u0027external_ip\u0027] \u003d\u003d external_ip and"},{"line_number":222,"context_line":"                     (not logical_ip or r[\u0027logical_ip\u0027] \u003d\u003d logical_ip)),"},{"line_number":223,"context_line":"                    None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_47e8d1b1","line":220,"range":{"start_line":220,"start_character":37,"end_line":220,"end_character":41},"updated":"2020-08-25 15:06:29.000000000","message":"this is python\u0027s key word. Wouldn\u0027t it cause any problems?","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"03e1f206c13c241cac92fc9d4b5fd684b9317666","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                       type\u003d\u0027dnat_and_snat\u0027):"},{"line_number":218,"context_line":"        rules \u003d self.nb_api.get_lrouter_nat_rules(utils.ovn_name(router_id))"},{"line_number":219,"context_line":"        return next((r for r in rules"},{"line_number":220,"context_line":"                     if r[\u0027type\u0027] \u003d\u003d type and"},{"line_number":221,"context_line":"                     r[\u0027external_ip\u0027] \u003d\u003d external_ip and"},{"line_number":222,"context_line":"                     (not logical_ip or r[\u0027logical_ip\u0027] \u003d\u003d logical_ip)),"},{"line_number":223,"context_line":"                    None)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_b260ad0f","line":220,"range":{"start_line":220,"start_character":37,"end_line":220,"end_character":41},"in_reply_to":"9f560f44_47e8d1b1","updated":"2020-08-31 15:56:53.000000000","message":"Good point. It works, but not a good idea to use that.\n\nhttps://stackoverflow.com/questions/10568087/is-it-safe-to-use-the-python-word-type-in-my-code\n\n\nDone.","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f93389299e8e4cc9127cc51424c8dbebe4831a25","unresolved":false,"context_lines":[{"line_number":875,"context_line":"            fip \u003d self.l3_plugin.create_floatingip(self.context, fip_info)"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"        floating_ip_address \u003d fip[\u0027floating_ip_address\u0027]"},{"line_number":878,"context_line":"        self.assertEqual(fip[\u0027router_id\u0027], router[\u0027id\u0027])"},{"line_number":879,"context_line":"        self.assertEqual(fip[\u0027port_details\u0027][\u0027name\u0027], \u0027testp1\u0027)"},{"line_number":880,"context_line":"        self.assertIsNotNone(self.nb_api.get_lswitch_port(fip[\u0027port_id\u0027]))"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_c7ece1bc","line":878,"updated":"2020-08-25 15:06:29.000000000","message":"we are using always pattern like:\n\n    assertEqual(expected, actual)\n\nand here it seems for me that it\u0027s in opposite way now.","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"03e1f206c13c241cac92fc9d4b5fd684b9317666","unresolved":false,"context_lines":[{"line_number":875,"context_line":"            fip \u003d self.l3_plugin.create_floatingip(self.context, fip_info)"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"        floating_ip_address \u003d fip[\u0027floating_ip_address\u0027]"},{"line_number":878,"context_line":"        self.assertEqual(fip[\u0027router_id\u0027], router[\u0027id\u0027])"},{"line_number":879,"context_line":"        self.assertEqual(fip[\u0027port_details\u0027][\u0027name\u0027], \u0027testp1\u0027)"},{"line_number":880,"context_line":"        self.assertIsNotNone(self.nb_api.get_lswitch_port(fip[\u0027port_id\u0027]))"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_756b9f84","line":878,"in_reply_to":"9f560f44_c7ece1bc","updated":"2020-08-31 15:56:53.000000000","message":"Done","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f93389299e8e4cc9127cc51424c8dbebe4831a25","unresolved":false,"context_lines":[{"line_number":876,"context_line":""},{"line_number":877,"context_line":"        floating_ip_address \u003d fip[\u0027floating_ip_address\u0027]"},{"line_number":878,"context_line":"        self.assertEqual(fip[\u0027router_id\u0027], router[\u0027id\u0027])"},{"line_number":879,"context_line":"        self.assertEqual(fip[\u0027port_details\u0027][\u0027name\u0027], \u0027testp1\u0027)"},{"line_number":880,"context_line":"        self.assertIsNotNone(self.nb_api.get_lswitch_port(fip[\u0027port_id\u0027]))"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        # Assert the dnat_and_snat rule doesn\u0027t exist in OVN"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_67335563","line":879,"updated":"2020-08-25 15:06:29.000000000","message":"same here (and in other places in this patch also)","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"03e1f206c13c241cac92fc9d4b5fd684b9317666","unresolved":false,"context_lines":[{"line_number":876,"context_line":""},{"line_number":877,"context_line":"        floating_ip_address \u003d fip[\u0027floating_ip_address\u0027]"},{"line_number":878,"context_line":"        self.assertEqual(fip[\u0027router_id\u0027], router[\u0027id\u0027])"},{"line_number":879,"context_line":"        self.assertEqual(fip[\u0027port_details\u0027][\u0027name\u0027], \u0027testp1\u0027)"},{"line_number":880,"context_line":"        self.assertIsNotNone(self.nb_api.get_lswitch_port(fip[\u0027port_id\u0027]))"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        # Assert the dnat_and_snat rule doesn\u0027t exist in OVN"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_b50257b9","line":879,"in_reply_to":"9f560f44_67335563","updated":"2020-08-31 15:56:53.000000000","message":"Done","commit_id":"f5ec8bc7b9dc682a28eff8fa1a24efc3f3411638"}]}
