)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"46303f528e1e0ce21c8d2c690f3076d19f180532","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d4aa7f57_1d2d702a","updated":"2024-07-10 17:02:34.000000000","message":"recheck, jobs are fixed","commit_id":"d357bbcb8accffbd7a34756503b218f11617622a"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"b660c51c6ac7ced7835340072c5a4522865cf354","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f70784da_5f57cc40","updated":"2024-08-08 15:28:21.000000000","message":"LGTM, thanks!","commit_id":"f43ae268b8cb091605261b5f1c9e401ebb2933d6"}],"openstack_dashboard/api/neutron.py":[{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"efcc9bcd735703125f50183149cacec82d0e0f48","unresolved":true,"context_lines":[{"line_number":1869,"context_line":"    trunk_filters \u003d {}"},{"line_number":1870,"context_line":"    if \u0027tenant_id\u0027 in params:"},{"line_number":1871,"context_line":"        trunk_filters[\u0027tenant_id\u0027] \u003d params[\u0027tenant_id\u0027]"},{"line_number":1872,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**trunk_filters)[\u0027trunks\u0027]"},{"line_number":1873,"context_line":"    parent_ports \u003d set(t[\u0027port_id\u0027] for t in trunks)"},{"line_number":1874,"context_line":"    # Create a dict map for child ports (port ID to trunk info)"},{"line_number":1875,"context_line":"    child_ports \u003d dict((s[\u0027port_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"480e9086_33afc895","line":1872,"range":{"start_line":1872,"start_character":4,"end_line":1872,"end_character":74},"updated":"2024-08-02 20:32:02.000000000","message":"Would be good to merge patch\n924336: SDK for Neutron Trunks | https://review.opendev.org/c/openstack/horizon/+/924336\nas first and change this line to networkclient to have it all at once.","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cd6bbb83672bcb6768f974868ae528caaae01c61","unresolved":true,"context_lines":[{"line_number":1869,"context_line":"    trunk_filters \u003d {}"},{"line_number":1870,"context_line":"    if \u0027tenant_id\u0027 in params:"},{"line_number":1871,"context_line":"        trunk_filters[\u0027tenant_id\u0027] \u003d params[\u0027tenant_id\u0027]"},{"line_number":1872,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**trunk_filters)[\u0027trunks\u0027]"},{"line_number":1873,"context_line":"    parent_ports \u003d set(t[\u0027port_id\u0027] for t in trunks)"},{"line_number":1874,"context_line":"    # Create a dict map for child ports (port ID to trunk info)"},{"line_number":1875,"context_line":"    child_ports \u003d dict((s[\u0027port_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"8392364c_295e9ad2","line":1872,"range":{"start_line":1872,"start_character":4,"end_line":1872,"end_character":74},"in_reply_to":"480e9086_33afc895","updated":"2024-08-05 12:34:25.000000000","message":"ok, so your proposal is to change the order of my patches from \n\nhttps://review.opendev.org/c/openstack/horizon/+/922917 -\u003e https://review.opendev.org/c/openstack/horizon/+/924336\n\nto \n\nhttps://review.opendev.org/c/openstack/horizon/+/924336 -\u003e https://review.opendev.org/c/openstack/horizon/+/922917 ?","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"ed361802ca9c7a5da674025ab6266c9ca8e4be4e","unresolved":true,"context_lines":[{"line_number":1869,"context_line":"    trunk_filters \u003d {}"},{"line_number":1870,"context_line":"    if \u0027tenant_id\u0027 in params:"},{"line_number":1871,"context_line":"        trunk_filters[\u0027tenant_id\u0027] \u003d params[\u0027tenant_id\u0027]"},{"line_number":1872,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**trunk_filters)[\u0027trunks\u0027]"},{"line_number":1873,"context_line":"    parent_ports \u003d set(t[\u0027port_id\u0027] for t in trunks)"},{"line_number":1874,"context_line":"    # Create a dict map for child ports (port ID to trunk info)"},{"line_number":1875,"context_line":"    child_ports \u003d dict((s[\u0027port_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"f75dc5ea_d385d9c7","line":1872,"range":{"start_line":1872,"start_character":4,"end_line":1872,"end_character":74},"in_reply_to":"8392364c_295e9ad2","updated":"2024-08-05 13:37:24.000000000","message":"Yes, change the order and also rewrite the trunk calls here.\n\nIf I did not miss something then I can see that the functions in Trunks patch do not use any function from Ports patch but the functions in Ports patch using functions from Trunks which you left in the old version (neutronclient calls).\n\nSo I think it would be better to merge Trunks patch first, then finish Port patch (use new Trunks functions based on networkclient also here) and then merge Port patch completely done.\nIf we do it the other way, we would still have to create another patch for Ports and edit the Trunk calls here in Port patch (which I marked).","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"b660c51c6ac7ced7835340072c5a4522865cf354","unresolved":false,"context_lines":[{"line_number":1869,"context_line":"    trunk_filters \u003d {}"},{"line_number":1870,"context_line":"    if \u0027tenant_id\u0027 in params:"},{"line_number":1871,"context_line":"        trunk_filters[\u0027tenant_id\u0027] \u003d params[\u0027tenant_id\u0027]"},{"line_number":1872,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**trunk_filters)[\u0027trunks\u0027]"},{"line_number":1873,"context_line":"    parent_ports \u003d set(t[\u0027port_id\u0027] for t in trunks)"},{"line_number":1874,"context_line":"    # Create a dict map for child ports (port ID to trunk info)"},{"line_number":1875,"context_line":"    child_ports \u003d dict((s[\u0027port_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"812ee3a3_2a3f9e82","line":1872,"range":{"start_line":1872,"start_character":4,"end_line":1872,"end_character":74},"in_reply_to":"f75dc5ea_d385d9c7","updated":"2024-08-08 15:28:21.000000000","message":"Done","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"675028bba5aa788fddc8cf82ee96824994e5023c","unresolved":true,"context_lines":[{"line_number":1879,"context_line":""},{"line_number":1880,"context_line":""},{"line_number":1881,"context_line":"@profiler.trace"},{"line_number":1882,"context_line":"def port_get(request, port_id, **params):"},{"line_number":1883,"context_line":"    LOG.debug(\"port_get(): portid\u003d%(port_id)s, params\u003d%(params)s\","},{"line_number":1884,"context_line":"              {\u0027port_id\u0027: port_id, \u0027params\u0027: params})"},{"line_number":1885,"context_line":"    port \u003d networkclient(request).get_port(port_id, **params)"},{"line_number":1886,"context_line":"    return Port(port.to_dict())"},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":""},{"line_number":1889,"context_line":"def unescape_port_kwargs(**kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"354b4755_e7fb7050","line":1886,"range":{"start_line":1882,"start_character":0,"end_line":1886,"end_character":31},"updated":"2024-08-07 11:48:20.000000000","message":"Why port_get/get_port contains two parameters \"port_id\" and \"**params\"? Based on the documentation, there is only one required parameter for get_port and it is \"port\" (which can be ID of a port or an instance of Class Port).\n\nIt should be like that:\n\n@profiler.trace\ndef port_get(request, port_id):\n    LOG.debug(\"port_get(): portid\u003d%s\", port_id)\n    port \u003d networkclient(request).get_port(port_id)\n    return Port(port.to_dict())\n\nOr am I missing something?","commit_id":"9fb27da1976ebdb61e1bafa23008d429eed41e83"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c47cbeb9d2baea724cef1be694684ea6cca2b3f4","unresolved":false,"context_lines":[{"line_number":1879,"context_line":""},{"line_number":1880,"context_line":""},{"line_number":1881,"context_line":"@profiler.trace"},{"line_number":1882,"context_line":"def port_get(request, port_id, **params):"},{"line_number":1883,"context_line":"    LOG.debug(\"port_get(): portid\u003d%(port_id)s, params\u003d%(params)s\","},{"line_number":1884,"context_line":"              {\u0027port_id\u0027: port_id, \u0027params\u0027: params})"},{"line_number":1885,"context_line":"    port \u003d networkclient(request).get_port(port_id, **params)"},{"line_number":1886,"context_line":"    return Port(port.to_dict())"},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":""},{"line_number":1889,"context_line":"def unescape_port_kwargs(**kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3c372f88_fad145c9","line":1886,"range":{"start_line":1882,"start_character":0,"end_line":1886,"end_character":31},"in_reply_to":"354b4755_e7fb7050","updated":"2024-08-08 14:18:39.000000000","message":"thanks, you are right.","commit_id":"9fb27da1976ebdb61e1bafa23008d429eed41e83"}],"openstack_dashboard/dashboards/project/networks/ports/tests.py":[{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"efcc9bcd735703125f50183149cacec82d0e0f48","unresolved":true,"context_lines":[{"line_number":79,"context_line":"                                                   port.id)"},{"line_number":80,"context_line":"        self.mock_security_group_list.assert_called_once_with("},{"line_number":81,"context_line":"            test.IsHttpRequest(),"},{"line_number":82,"context_line":"            id\u003dtuple(sg for sg in port.security_group_ids))"},{"line_number":83,"context_line":"        self._check_is_extension_supported({\u0027mac-learning\u0027: 2,"},{"line_number":84,"context_line":"                                            \u0027allowed-address-pairs\u0027: 2})"},{"line_number":85,"context_line":"        self.mock_network_get.assert_called_once_with(test.IsHttpRequest(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"27fdde51_801bace3","line":82,"range":{"start_line":82,"start_character":12,"end_line":82,"end_character":59},"updated":"2024-08-02 20:32:02.000000000","message":"Is there any reason to do it like \"x for x in yyy\"? There is not any condition, so simpler\nid\u003dtuple(port.security_group_ids)) or id\u003dtuple(port[\u0027security_group_ids\u0027])\nshould return the same result.","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"70e9fa2d02ea97775d4a980e7050fd839e8a5302","unresolved":true,"context_lines":[{"line_number":79,"context_line":"                                                   port.id)"},{"line_number":80,"context_line":"        self.mock_security_group_list.assert_called_once_with("},{"line_number":81,"context_line":"            test.IsHttpRequest(),"},{"line_number":82,"context_line":"            id\u003dtuple(sg for sg in port.security_group_ids))"},{"line_number":83,"context_line":"        self._check_is_extension_supported({\u0027mac-learning\u0027: 2,"},{"line_number":84,"context_line":"                                            \u0027allowed-address-pairs\u0027: 2})"},{"line_number":85,"context_line":"        self.mock_network_get.assert_called_once_with(test.IsHttpRequest(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"f88473e1_2292c559","line":82,"range":{"start_line":82,"start_character":12,"end_line":82,"end_character":59},"in_reply_to":"27fdde51_801bace3","updated":"2024-08-06 12:45:07.000000000","message":"good idea, thanks, I changed.","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"b660c51c6ac7ced7835340072c5a4522865cf354","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                                   port.id)"},{"line_number":80,"context_line":"        self.mock_security_group_list.assert_called_once_with("},{"line_number":81,"context_line":"            test.IsHttpRequest(),"},{"line_number":82,"context_line":"            id\u003dtuple(sg for sg in port.security_group_ids))"},{"line_number":83,"context_line":"        self._check_is_extension_supported({\u0027mac-learning\u0027: 2,"},{"line_number":84,"context_line":"                                            \u0027allowed-address-pairs\u0027: 2})"},{"line_number":85,"context_line":"        self.mock_network_get.assert_called_once_with(test.IsHttpRequest(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"fadae8bf_9630117f","line":82,"range":{"start_line":82,"start_character":12,"end_line":82,"end_character":59},"in_reply_to":"f88473e1_2292c559","updated":"2024-08-08 15:28:21.000000000","message":"Done","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"}],"openstack_dashboard/test/unit/api/test_neutron.py":[{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"efcc9bcd735703125f50183149cacec82d0e0f48","unresolved":true,"context_lines":[{"line_number":1180,"context_line":"        neutronclient.ports.assert_called_once_with()"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"    @mock.patch.object(api.neutron, \u0027is_extension_supported\u0027)"},{"line_number":1183,"context_line":"    @mock.patch.object(api.neutron, \u0027neutronclient\u0027)"},{"line_number":1184,"context_line":"    @mock.patch.object(api.neutron, \u0027networkclient\u0027)"},{"line_number":1185,"context_line":"    def test_port_list_with_trunk_types("},{"line_number":1186,"context_line":"            self, mock_networkclient, mock_neutronclient,"}],"source_content_type":"text/x-python","patch_set":4,"id":"06b275ce_6df67e0a","line":1183,"range":{"start_line":1183,"start_character":4,"end_line":1183,"end_character":52},"updated":"2024-08-02 20:32:02.000000000","message":"ditto as in /api/neutron.py","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"70e9fa2d02ea97775d4a980e7050fd839e8a5302","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"        neutronclient.ports.assert_called_once_with()"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"    @mock.patch.object(api.neutron, \u0027is_extension_supported\u0027)"},{"line_number":1183,"context_line":"    @mock.patch.object(api.neutron, \u0027neutronclient\u0027)"},{"line_number":1184,"context_line":"    @mock.patch.object(api.neutron, \u0027networkclient\u0027)"},{"line_number":1185,"context_line":"    def test_port_list_with_trunk_types("},{"line_number":1186,"context_line":"            self, mock_networkclient, mock_neutronclient,"}],"source_content_type":"text/x-python","patch_set":4,"id":"02a10803_e308daaa","line":1183,"range":{"start_line":1183,"start_character":4,"end_line":1183,"end_character":52},"in_reply_to":"06b275ce_6df67e0a","updated":"2024-08-06 12:45:07.000000000","message":"Done","commit_id":"966c230964498254e020b3d9023f31a7dc5aaed2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"675028bba5aa788fddc8cf82ee96824994e5023c","unresolved":true,"context_lines":[{"line_number":1171,"context_line":"    def test_port_list(self, mock_networkclient):"},{"line_number":1172,"context_line":"        ports \u003d self.api_ports_sdk"},{"line_number":1173,"context_line":""},{"line_number":1174,"context_line":"        neutronclient \u003d mock_networkclient.return_value"},{"line_number":1175,"context_line":"        neutronclient.ports.return_value \u003d ports"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        ret_val \u003d api.neutron.port_list(self.request)"},{"line_number":1178,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"79486e6a_1e7ba846","line":1175,"range":{"start_line":1174,"start_character":0,"end_line":1175,"end_character":48},"updated":"2024-08-07 11:48:20.000000000","message":"Still wrong naming neutronclient instead of networkclient on a few places.","commit_id":"9fb27da1976ebdb61e1bafa23008d429eed41e83"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"b660c51c6ac7ced7835340072c5a4522865cf354","unresolved":false,"context_lines":[{"line_number":1171,"context_line":"    def test_port_list(self, mock_networkclient):"},{"line_number":1172,"context_line":"        ports \u003d self.api_ports_sdk"},{"line_number":1173,"context_line":""},{"line_number":1174,"context_line":"        neutronclient \u003d mock_networkclient.return_value"},{"line_number":1175,"context_line":"        neutronclient.ports.return_value \u003d ports"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        ret_val \u003d api.neutron.port_list(self.request)"},{"line_number":1178,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fab75e0a_8010ea20","line":1175,"range":{"start_line":1174,"start_character":0,"end_line":1175,"end_character":48},"in_reply_to":"1f06bb96_5aaf1aa4","updated":"2024-08-08 15:28:21.000000000","message":"Done","commit_id":"9fb27da1976ebdb61e1bafa23008d429eed41e83"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c47cbeb9d2baea724cef1be694684ea6cca2b3f4","unresolved":true,"context_lines":[{"line_number":1171,"context_line":"    def test_port_list(self, mock_networkclient):"},{"line_number":1172,"context_line":"        ports \u003d self.api_ports_sdk"},{"line_number":1173,"context_line":""},{"line_number":1174,"context_line":"        neutronclient \u003d mock_networkclient.return_value"},{"line_number":1175,"context_line":"        neutronclient.ports.return_value \u003d ports"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        ret_val \u003d api.neutron.port_list(self.request)"},{"line_number":1178,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f06bb96_5aaf1aa4","line":1175,"range":{"start_line":1174,"start_character":0,"end_line":1175,"end_character":48},"in_reply_to":"79486e6a_1e7ba846","updated":"2024-08-08 14:18:39.000000000","message":"Thanks I hope I changed all neutronclient to networkclient","commit_id":"9fb27da1976ebdb61e1bafa23008d429eed41e83"}]}
