)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d407671c_a1419b9f","updated":"2026-03-24 16:28:49.000000000","message":"No serious complaints with the actual client code, but the tests need quite a large refactoring to match the rest of the code in OSC. Please let know if anything is unclear.","commit_id":"66c761f5ce18dab30b003cc1c5dc869c60a012ce"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a03d21c792b740b692f267161ab7696e8ad2f928","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1c87e133_72637b56","updated":"2026-04-08 11:04:16.000000000","message":"Couple of other nits to do in the follow-up","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cc6a748c85df0447f57877d1f79f9ae06b261c38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9b5738f0_65333388","updated":"2026-04-08 10:47:04.000000000","message":"There are a few follow-ups here, but I believe this is good enough to merge now","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b1f5baae698d395562b4740ceafce8d8fd3b975c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b4490535_1e6d831a","updated":"2026-04-09 16:32:16.000000000","message":"Per review feedback","commit_id":"56c3f123648987d864bc48eedbc4ca899cc270ad"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fc3d982d51c0a22e740ff685ce3947cdf8cfe8ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5dce026b_26ce8c96","updated":"2026-04-14 09:47:12.000000000","message":"This will fail CI until the issues introduced by openstacksdk 4.11.0 are addressed, but my only nit from PS5 is addressed so this looks good now.","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"596f0672132882313f995e52e9af987193db1ecf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c3e645dd_5818a05a","updated":"2026-04-14 15:22:47.000000000","message":"looks like the failure (openstackclient.tests.unit.network.v2.fwaas.test_group.TestCreateFirewallGroup.test_create_with_all_params) is related","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"530453e8225beeac4e751e908d8a8901bea513c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3635d839_6a5d9e09","updated":"2026-04-14 10:13:02.000000000","message":"looks ok and works as expected after my quick test, thanks","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"16d987bb9b03e98c7441ed23a1858eeabaaaa7ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fc99ce15_c643489a","in_reply_to":"c3e645dd_5818a05a","updated":"2026-04-15 12:13:25.000000000","message":"yeah, should be fixed now. Sorry that I missed it earlier","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"278f241fbb67b7a3cc6d21f53583d623fd56180f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a0d20c5e_c88e2617","updated":"2026-04-15 11:46:22.000000000","message":"Dropping +2 until we see the passing CI result. The gate should be fixed now so any failures will be legit","commit_id":"cba6761e027e309057a9f1bca67e81cdfa1c2582"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cdac93ff0bffa5e6635374c74b53953493d1572e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b1458fd0_42a48481","updated":"2026-04-15 12:34:53.000000000","message":"still have two TODOs from @ralonsoh@redhat.com","commit_id":"74a017e6369b909e3841f243cd253648909525da"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1c5e65a8092b182f2872be803c88d2c419b805a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"652b7cc9_f8495efb","in_reply_to":"b1458fd0_42a48481","updated":"2026-04-15 12:58:15.000000000","message":"ups, I missed them. Now should all be addressed","commit_id":"74a017e6369b909e3841f243cd253648909525da"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1ff357cb2fc7f27d513e510e4257916c378631d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"28080abf_7ceef545","updated":"2026-04-15 14:55:33.000000000","message":"Thanks!","commit_id":"08b1e6a83ca212cf69d985364291c7192c5284cb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bd784686007223041bdd320e116e342cb2738e30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"572934f4_49673411","updated":"2026-04-15 13:13:18.000000000","message":"Will wait for Lajos and Rodolfo to re-review this but this lgtm now","commit_id":"08b1e6a83ca212cf69d985364291c7192c5284cb"}],"openstackclient/network/v2/fwaas/firewallgroup.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0b1a44fa_5e0f8312","updated":"2026-03-24 16:28:49.000000000","message":"Does it make sense to rename this file to `group`? The `firewall` prefix feels redundant. Ditto for the rest of the files","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a412988c_23f7bac4","in_reply_to":"0b1a44fa_5e0f8312","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    \u0027admin_state_up\u0027: AdminStateColumn,"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_attr_map_dict \u003d {"},{"line_number":44,"context_line":"    \u0027id\u0027: \u0027ID\u0027,"},{"line_number":45,"context_line":"    \u0027name\u0027: \u0027Name\u0027,"},{"line_number":46,"context_line":"    \u0027ingress_firewall_policy_id\u0027: \u0027Ingress Policy ID\u0027,"},{"line_number":47,"context_line":"    \u0027egress_firewall_policy_id\u0027: \u0027Egress Policy ID\u0027,"},{"line_number":48,"context_line":"    \u0027description\u0027: \u0027Description\u0027,"},{"line_number":49,"context_line":"    \u0027status\u0027: \u0027Status\u0027,"},{"line_number":50,"context_line":"    \u0027ports\u0027: \u0027Ports\u0027,"},{"line_number":51,"context_line":"    \u0027admin_state_up\u0027: \u0027State\u0027,"},{"line_number":52,"context_line":"    \u0027shared\u0027: \u0027Shared\u0027,"},{"line_number":53,"context_line":"    \u0027tenant_id\u0027: \u0027Project\u0027,"},{"line_number":54,"context_line":"    \u0027project_id\u0027: \u0027Project\u0027,"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"_attr_map \u003d ("},{"line_number":58,"context_line":"    (\u0027id\u0027, \u0027ID\u0027, column_util.LIST_BOTH),"},{"line_number":59,"context_line":"    (\u0027name\u0027, \u0027Name\u0027, column_util.LIST_BOTH),"},{"line_number":60,"context_line":"    (\u0027ingress_firewall_policy_id\u0027, \u0027Ingress Policy ID\u0027, column_util.LIST_BOTH),"},{"line_number":61,"context_line":"    (\u0027egress_firewall_policy_id\u0027, \u0027Egress Policy ID\u0027, column_util.LIST_BOTH),"},{"line_number":62,"context_line":"    (\u0027description\u0027, \u0027Description\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":63,"context_line":"    (\u0027status\u0027, \u0027Status\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":64,"context_line":"    (\u0027ports\u0027, \u0027Ports\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":65,"context_line":"    (\u0027admin_state_up\u0027, \u0027State\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":66,"context_line":"    (\u0027shared\u0027, \u0027Shared\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":67,"context_line":"    (\u0027tenant_id\u0027, \u0027Project\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":68,"context_line":")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def _get_common_parser(parser):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e273c1ff_1e2b9d55","line":68,"range":{"start_line":43,"start_character":1,"end_line":68,"end_character":1},"updated":"2026-03-24 16:28:49.000000000","message":"These look very similar?\n\n```suggestion\n_attr_map \u003d (\n    (\u0027id\u0027, \u0027ID\u0027, column_util.LIST_BOTH),\n    (\u0027name\u0027, \u0027Name\u0027, column_util.LIST_BOTH),\n    (\u0027ingress_firewall_policy_id\u0027, \u0027Ingress Policy ID\u0027, column_util.LIST_BOTH),\n    (\u0027egress_firewall_policy_id\u0027, \u0027Egress Policy ID\u0027, column_util.LIST_BOTH),\n    (\u0027description\u0027, \u0027Description\u0027, column_util.LIST_LONG_ONLY),\n    (\u0027status\u0027, \u0027Status\u0027, column_util.LIST_LONG_ONLY),\n    (\u0027ports\u0027, \u0027Ports\u0027, column_util.LIST_LONG_ONLY),\n    (\u0027admin_state_up\u0027, \u0027State\u0027, column_util.LIST_LONG_ONLY),\n    (\u0027shared\u0027, \u0027Shared\u0027, column_util.LIST_LONG_ONLY),\n    (\u0027tenant_id\u0027, \u0027Project\u0027, column_util.LIST_LONG_ONLY),\n)\n\n_attr_map_dict \u003d {x[0]: x[1] for x in _attr_map}\n```\n\nAlso, should `project_id` be in `attr_map`?","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \u0027admin_state_up\u0027: AdminStateColumn,"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_attr_map_dict \u003d {"},{"line_number":44,"context_line":"    \u0027id\u0027: \u0027ID\u0027,"},{"line_number":45,"context_line":"    \u0027name\u0027: \u0027Name\u0027,"},{"line_number":46,"context_line":"    \u0027ingress_firewall_policy_id\u0027: \u0027Ingress Policy ID\u0027,"},{"line_number":47,"context_line":"    \u0027egress_firewall_policy_id\u0027: \u0027Egress Policy ID\u0027,"},{"line_number":48,"context_line":"    \u0027description\u0027: \u0027Description\u0027,"},{"line_number":49,"context_line":"    \u0027status\u0027: \u0027Status\u0027,"},{"line_number":50,"context_line":"    \u0027ports\u0027: \u0027Ports\u0027,"},{"line_number":51,"context_line":"    \u0027admin_state_up\u0027: \u0027State\u0027,"},{"line_number":52,"context_line":"    \u0027shared\u0027: \u0027Shared\u0027,"},{"line_number":53,"context_line":"    \u0027tenant_id\u0027: \u0027Project\u0027,"},{"line_number":54,"context_line":"    \u0027project_id\u0027: \u0027Project\u0027,"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"_attr_map \u003d ("},{"line_number":58,"context_line":"    (\u0027id\u0027, \u0027ID\u0027, column_util.LIST_BOTH),"},{"line_number":59,"context_line":"    (\u0027name\u0027, \u0027Name\u0027, column_util.LIST_BOTH),"},{"line_number":60,"context_line":"    (\u0027ingress_firewall_policy_id\u0027, \u0027Ingress Policy ID\u0027, column_util.LIST_BOTH),"},{"line_number":61,"context_line":"    (\u0027egress_firewall_policy_id\u0027, \u0027Egress Policy ID\u0027, column_util.LIST_BOTH),"},{"line_number":62,"context_line":"    (\u0027description\u0027, \u0027Description\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":63,"context_line":"    (\u0027status\u0027, \u0027Status\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":64,"context_line":"    (\u0027ports\u0027, \u0027Ports\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":65,"context_line":"    (\u0027admin_state_up\u0027, \u0027State\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":66,"context_line":"    (\u0027shared\u0027, \u0027Shared\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":67,"context_line":"    (\u0027tenant_id\u0027, \u0027Project\u0027, column_util.LIST_LONG_ONLY),"},{"line_number":68,"context_line":")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def _get_common_parser(parser):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e28cc989_4c77e684","line":68,"range":{"start_line":43,"start_character":1,"end_line":68,"end_character":1},"in_reply_to":"e273c1ff_1e2b9d55","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    )"},{"line_number":104,"context_line":"    shared_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    shared_group.add_argument("},{"line_number":107,"context_line":"        \u0027--share\u0027,"},{"line_number":108,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":109,"context_line":"        help\u003d_("},{"line_number":110,"context_line":"            \u0027Share the firewall group to be used in all projects \u0027"},{"line_number":111,"context_line":"            \u0027(by default, it is restricted to be used by the \u0027"},{"line_number":112,"context_line":"            \u0027current project).\u0027"},{"line_number":113,"context_line":"        ),"},{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":"    shared_group.add_argument("},{"line_number":116,"context_line":"        \u0027--no-share\u0027,"},{"line_number":117,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":118,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current project\u0027),"},{"line_number":119,"context_line":"    )"},{"line_number":120,"context_line":"    admin_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":121,"context_line":"    admin_group.add_argument("},{"line_number":122,"context_line":"        \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Enable firewall group\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3155fe5_473c0276","line":119,"range":{"start_line":106,"start_character":0,"end_line":119,"end_character":5},"updated":"2026-03-24 16:28:49.000000000","message":"Let\u0027s try to use a common dest for flag pairs (`--foo / --no-foo`)\n\n```suggestion\n    shared_group.add_argument(\n        \u0027--share\u0027,\n        action\u003d\u0027store_true\u0027,\n        dest\u003d\u0027shared\u0027,\n        help\u003d_(\n            \u0027Share the firewall group to be used in all projects \u0027\n            \u0027(by default, it is restricted to be used by the \u0027\n            \u0027current project).\u0027\n        ),\n    )\n    shared_group.add_argument(\n        \u0027--no-share\u0027,\n        action\u003d\u0027store_false\u0027,\n        dest\u003d\u0027shared\u0027,\n        help\u003d_(\u0027Restrict use of the firewall group to the current project\u0027),\n    )\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    )"},{"line_number":104,"context_line":"    shared_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    shared_group.add_argument("},{"line_number":107,"context_line":"        \u0027--share\u0027,"},{"line_number":108,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":109,"context_line":"        help\u003d_("},{"line_number":110,"context_line":"            \u0027Share the firewall group to be used in all projects \u0027"},{"line_number":111,"context_line":"            \u0027(by default, it is restricted to be used by the \u0027"},{"line_number":112,"context_line":"            \u0027current project).\u0027"},{"line_number":113,"context_line":"        ),"},{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":"    shared_group.add_argument("},{"line_number":116,"context_line":"        \u0027--no-share\u0027,"},{"line_number":117,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":118,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current project\u0027),"},{"line_number":119,"context_line":"    )"},{"line_number":120,"context_line":"    admin_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":121,"context_line":"    admin_group.add_argument("},{"line_number":122,"context_line":"        \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Enable firewall group\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ee5fa790_ff6f2702","line":119,"range":{"start_line":106,"start_character":0,"end_line":119,"end_character":5},"in_reply_to":"e3155fe5_473c0276","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":119,"context_line":"    )"},{"line_number":120,"context_line":"    admin_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":121,"context_line":"    admin_group.add_argument("},{"line_number":122,"context_line":"        \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Enable firewall group\u0027)"},{"line_number":123,"context_line":"    )"},{"line_number":124,"context_line":"    admin_group.add_argument("},{"line_number":125,"context_line":"        \u0027--disable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ace2cb7c_d166a135","line":122,"updated":"2026-03-24 16:28:49.000000000","message":"```suggestion\n        \u0027--enable\u0027,\n        action\u003d\u0027store_true\u0027,\n        dest\u003d\u0027admin_state_up\u0027,\n        help\u003d_(\u0027Enable firewall group\u0027),\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    )"},{"line_number":120,"context_line":"    admin_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":121,"context_line":"    admin_group.add_argument("},{"line_number":122,"context_line":"        \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Enable firewall group\u0027)"},{"line_number":123,"context_line":"    )"},{"line_number":124,"context_line":"    admin_group.add_argument("},{"line_number":125,"context_line":"        \u0027--disable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fe2161a_c1658b6a","line":122,"in_reply_to":"ace2cb7c_d166a135","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Enable firewall group\u0027)"},{"line_number":123,"context_line":"    )"},{"line_number":124,"context_line":"    admin_group.add_argument("},{"line_number":125,"context_line":"        \u0027--disable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"},{"line_number":126,"context_line":"    )"},{"line_number":127,"context_line":"    return parser"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d9c34ad3_31de3189","line":125,"updated":"2026-03-24 16:28:49.000000000","message":"```suggestion\n        \u0027--disable\u0027,\n        action\u003d\u0027store_false\u0027,\n        dest\u003d\u0027admin_state_up\u0027,\n        help\u003d_(\u0027Disable firewall group\u0027),\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Enable firewall group\u0027)"},{"line_number":123,"context_line":"    )"},{"line_number":124,"context_line":"    admin_group.add_argument("},{"line_number":125,"context_line":"        \u0027--disable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"},{"line_number":126,"context_line":"    )"},{"line_number":127,"context_line":"    return parser"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"deea72be_f1067f45","line":125,"in_reply_to":"d9c34ad3_31de3189","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":131,"context_line":"    attrs \u003d {}"},{"line_number":132,"context_line":"    client \u003d client_manager.network"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    if is_create:"},{"line_number":135,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":136,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d identity_common.find_project("},{"line_number":137,"context_line":"                client_manager.identity,"},{"line_number":138,"context_line":"                parsed_args.project,"},{"line_number":139,"context_line":"                parsed_args.project_domain,"},{"line_number":140,"context_line":"            ).id"},{"line_number":141,"context_line":"    if ("},{"line_number":142,"context_line":"        parsed_args.ingress_firewall_policy"},{"line_number":143,"context_line":"        and parsed_args.no_ingress_firewall_policy"}],"source_content_type":"text/x-python","patch_set":1,"id":"97b03e81_7846f399","line":140,"range":{"start_line":134,"start_character":0,"end_line":140,"end_character":16},"updated":"2026-03-24 16:28:49.000000000","message":"This is only used in `CreateFirewallGroup`. Could we just move the logic there?","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    attrs \u003d {}"},{"line_number":132,"context_line":"    client \u003d client_manager.network"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    if is_create:"},{"line_number":135,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":136,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d identity_common.find_project("},{"line_number":137,"context_line":"                client_manager.identity,"},{"line_number":138,"context_line":"                parsed_args.project,"},{"line_number":139,"context_line":"                parsed_args.project_domain,"},{"line_number":140,"context_line":"            ).id"},{"line_number":141,"context_line":"    if ("},{"line_number":142,"context_line":"        parsed_args.ingress_firewall_policy"},{"line_number":143,"context_line":"        and parsed_args.no_ingress_firewall_policy"}],"source_content_type":"text/x-python","patch_set":1,"id":"3be74f78_8cd28133","line":140,"range":{"start_line":134,"start_character":0,"end_line":140,"end_character":16},"in_reply_to":"97b03e81_7846f399","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":150,"context_line":"            parsed_args.ingress_firewall_policy, ignore_missing\u003dFalse"},{"line_number":151,"context_line":"        )[\u0027id\u0027]"},{"line_number":152,"context_line":"    elif parsed_args.no_ingress_firewall_policy:"},{"line_number":153,"context_line":"        attrs[\u0027ingress_firewall_policy_id\u0027] \u003d None"},{"line_number":154,"context_line":"    if ("},{"line_number":155,"context_line":"        parsed_args.egress_firewall_policy"},{"line_number":156,"context_line":"        and parsed_args.no_egress_firewall_policy"}],"source_content_type":"text/x-python","patch_set":1,"id":"62d94533_97354e66","line":153,"updated":"2026-03-24 16:28:49.000000000","message":"```suggestion\n        attrs[\u0027ingress_firewall_policy_id\u0027] \u003d None\n\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            parsed_args.ingress_firewall_policy, ignore_missing\u003dFalse"},{"line_number":151,"context_line":"        )[\u0027id\u0027]"},{"line_number":152,"context_line":"    elif parsed_args.no_ingress_firewall_policy:"},{"line_number":153,"context_line":"        attrs[\u0027ingress_firewall_policy_id\u0027] \u003d None"},{"line_number":154,"context_line":"    if ("},{"line_number":155,"context_line":"        parsed_args.egress_firewall_policy"},{"line_number":156,"context_line":"        and parsed_args.no_egress_firewall_policy"}],"source_content_type":"text/x-python","patch_set":1,"id":"9272fef5_642c434f","line":153,"in_reply_to":"62d94533_97354e66","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":163,"context_line":"            parsed_args.egress_firewall_policy, ignore_missing\u003dFalse"},{"line_number":164,"context_line":"        )[\u0027id\u0027]"},{"line_number":165,"context_line":"    elif parsed_args.no_egress_firewall_policy:"},{"line_number":166,"context_line":"        attrs[\u0027egress_firewall_policy_id\u0027] \u003d None"},{"line_number":167,"context_line":"    if parsed_args.share:"},{"line_number":168,"context_line":"        attrs[\u0027shared\u0027] \u003d True"},{"line_number":169,"context_line":"    if parsed_args.no_share:"}],"source_content_type":"text/x-python","patch_set":1,"id":"79996dc7_57f17c15","line":166,"updated":"2026-03-24 16:28:49.000000000","message":"```suggestion\n        attrs[\u0027egress_firewall_policy_id\u0027] \u003d None\n\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            parsed_args.egress_firewall_policy, ignore_missing\u003dFalse"},{"line_number":164,"context_line":"        )[\u0027id\u0027]"},{"line_number":165,"context_line":"    elif parsed_args.no_egress_firewall_policy:"},{"line_number":166,"context_line":"        attrs[\u0027egress_firewall_policy_id\u0027] \u003d None"},{"line_number":167,"context_line":"    if parsed_args.share:"},{"line_number":168,"context_line":"        attrs[\u0027shared\u0027] \u003d True"},{"line_number":169,"context_line":"    if parsed_args.no_share:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9170e3e1_ae15663d","line":166,"in_reply_to":"79996dc7_57f17c15","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":172,"context_line":"        attrs[\u0027admin_state_up\u0027] \u003d True"},{"line_number":173,"context_line":"    if parsed_args.disable:"},{"line_number":174,"context_line":"        attrs[\u0027admin_state_up\u0027] \u003d False"},{"line_number":175,"context_line":"    if parsed_args.name:"},{"line_number":176,"context_line":"        attrs[\u0027name\u0027] \u003d str(parsed_args.name)"},{"line_number":177,"context_line":"    if parsed_args.description:"},{"line_number":178,"context_line":"        attrs[\u0027description\u0027] \u003d str(parsed_args.description)"},{"line_number":179,"context_line":"    if parsed_args.port and parsed_args.no_port:"},{"line_number":180,"context_line":"        attrs[\u0027ports\u0027] \u003d sorted("},{"line_number":181,"context_line":"            ["}],"source_content_type":"text/x-python","patch_set":1,"id":"a98e35ef_b9d485e5","line":178,"range":{"start_line":175,"start_character":0,"end_line":178,"end_character":59},"updated":"2026-03-24 16:28:49.000000000","message":"These can\u0027t be anything but strings?\n\n```suggestion\n    if parsed_args.name:\n        attrs[\u0027name\u0027] \u003d parsed_args.name\n    if parsed_args.description:\n        attrs[\u0027description\u0027] \u003d parsed_args.description\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        attrs[\u0027admin_state_up\u0027] \u003d True"},{"line_number":173,"context_line":"    if parsed_args.disable:"},{"line_number":174,"context_line":"        attrs[\u0027admin_state_up\u0027] \u003d False"},{"line_number":175,"context_line":"    if parsed_args.name:"},{"line_number":176,"context_line":"        attrs[\u0027name\u0027] \u003d str(parsed_args.name)"},{"line_number":177,"context_line":"    if parsed_args.description:"},{"line_number":178,"context_line":"        attrs[\u0027description\u0027] \u003d str(parsed_args.description)"},{"line_number":179,"context_line":"    if parsed_args.port and parsed_args.no_port:"},{"line_number":180,"context_line":"        attrs[\u0027ports\u0027] \u003d sorted("},{"line_number":181,"context_line":"            ["}],"source_content_type":"text/x-python","patch_set":1,"id":"1393edee_e530463d","line":178,"range":{"start_line":175,"start_character":0,"end_line":178,"end_character":59},"in_reply_to":"a98e35ef_b9d485e5","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":250,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":251,"context_line":"        result \u003d 0"},{"line_number":252,"context_line":"        for fwg in parsed_args.firewall_group:"},{"line_number":253,"context_line":"            try:"},{"line_number":254,"context_line":"                fwg_id \u003d client.find_firewall_group(fwg, ignore_missing\u003dFalse)["},{"line_number":255,"context_line":"                    \u0027id\u0027"},{"line_number":256,"context_line":"                ]"},{"line_number":257,"context_line":"                client.delete_firewall_group(fwg_id)"},{"line_number":258,"context_line":"            except Exception as e:"},{"line_number":259,"context_line":"                result +\u003d 1"},{"line_number":260,"context_line":"                LOG.error("}],"source_content_type":"text/x-python","patch_set":1,"id":"d81decd6_d6b25190","line":257,"range":{"start_line":253,"start_character":16,"end_line":257,"end_character":52},"updated":"2026-03-24 16:28:49.000000000","message":"```suggestion\n            try:\n                fwg \u003d client.find_firewall_group(fwg, ignore_missing\u003dFalse)\n                client.delete_firewall_group(fwg.id)\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":251,"context_line":"        result \u003d 0"},{"line_number":252,"context_line":"        for fwg in parsed_args.firewall_group:"},{"line_number":253,"context_line":"            try:"},{"line_number":254,"context_line":"                fwg_id \u003d client.find_firewall_group(fwg, ignore_missing\u003dFalse)["},{"line_number":255,"context_line":"                    \u0027id\u0027"},{"line_number":256,"context_line":"                ]"},{"line_number":257,"context_line":"                client.delete_firewall_group(fwg_id)"},{"line_number":258,"context_line":"            except Exception as e:"},{"line_number":259,"context_line":"                result +\u003d 1"},{"line_number":260,"context_line":"                LOG.error("}],"source_content_type":"text/x-python","patch_set":1,"id":"0908a58c_5029e044","line":257,"range":{"start_line":253,"start_character":16,"end_line":257,"end_character":52},"in_reply_to":"d81decd6_d6b25190","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":362,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":363,"context_line":"        fwg_id \u003d client.find_firewall_group("},{"line_number":364,"context_line":"            parsed_args.firewall_group, ignore_missing\u003dFalse"},{"line_number":365,"context_line":"        )[\u0027id\u0027]"},{"line_number":366,"context_line":"        obj \u003d client.get_firewall_group(fwg_id)"},{"line_number":367,"context_line":"        display_columns, columns \u003d utils.get_osc_show_columns_for_sdk_resource("},{"line_number":368,"context_line":"            obj, _attr_map_dict, [\u0027location\u0027, \u0027tenant_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1764d327_a2bbad60","line":365,"updated":"2026-03-24 16:28:49.000000000","message":"Can you use attr access? It will highlight a few places in tests where we\u0027re not using \"real fakes\" (instances of SDK resource classes)\n\n```suggestion\n        ).id\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":363,"context_line":"        fwg_id \u003d client.find_firewall_group("},{"line_number":364,"context_line":"            parsed_args.firewall_group, ignore_missing\u003dFalse"},{"line_number":365,"context_line":"        )[\u0027id\u0027]"},{"line_number":366,"context_line":"        obj \u003d client.get_firewall_group(fwg_id)"},{"line_number":367,"context_line":"        display_columns, columns \u003d utils.get_osc_show_columns_for_sdk_resource("},{"line_number":368,"context_line":"            obj, _attr_map_dict, [\u0027location\u0027, \u0027tenant_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"4fa4b22f_5e1edb38","line":365,"in_reply_to":"1764d327_a2bbad60","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":407,"context_line":"            dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":408,"context_line":"            help\u003d_(\u0027Egress firewall policy (name or ID) to delete\u0027),"},{"line_number":409,"context_line":"        )"},{"line_number":410,"context_line":"        shared_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":411,"context_line":"        shared_group.add_argument("},{"line_number":412,"context_line":"            \u0027--share\u0027,"},{"line_number":413,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":414,"context_line":"            help\u003d_("},{"line_number":415,"context_line":"                \u0027Restrict use of the firewall group to the current project\u0027"},{"line_number":416,"context_line":"            ),"},{"line_number":417,"context_line":"        )"},{"line_number":418,"context_line":"        parser.add_argument("},{"line_number":419,"context_line":"            \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"},{"line_number":420,"context_line":"        )"},{"line_number":421,"context_line":"        return parser"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _get_attrs(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":1,"id":"aec7bfaa_d9e24852","line":420,"range":{"start_line":410,"start_character":0,"end_line":420,"end_character":9},"updated":"2026-03-24 16:28:49.000000000","message":"I realise we need to carry across support for these, but IMO these options should probably be deprecated. They duplicates `set --no-share` / `set --disable` which IMO both have clearer UX and more consistent with other commands","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92cfefc1374786cf2067b80fb3b9e43be82000eb","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":408,"context_line":"            help\u003d_(\u0027Egress firewall policy (name or ID) to delete\u0027),"},{"line_number":409,"context_line":"        )"},{"line_number":410,"context_line":"        shared_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":411,"context_line":"        shared_group.add_argument("},{"line_number":412,"context_line":"            \u0027--share\u0027,"},{"line_number":413,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":414,"context_line":"            help\u003d_("},{"line_number":415,"context_line":"                \u0027Restrict use of the firewall group to the current project\u0027"},{"line_number":416,"context_line":"            ),"},{"line_number":417,"context_line":"        )"},{"line_number":418,"context_line":"        parser.add_argument("},{"line_number":419,"context_line":"            \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"},{"line_number":420,"context_line":"        )"},{"line_number":421,"context_line":"        return parser"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _get_attrs(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ef286e4d_7cb247b8","line":420,"range":{"start_line":410,"start_character":0,"end_line":420,"end_character":9},"in_reply_to":"98b08745_c070e661","updated":"2026-04-22 07:33:47.000000000","message":"Follow up proposed https://review.opendev.org/c/openstack/python-openstackclient/+/985765","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":true,"context_lines":[{"line_number":407,"context_line":"            dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":408,"context_line":"            help\u003d_(\u0027Egress firewall policy (name or ID) to delete\u0027),"},{"line_number":409,"context_line":"        )"},{"line_number":410,"context_line":"        shared_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":411,"context_line":"        shared_group.add_argument("},{"line_number":412,"context_line":"            \u0027--share\u0027,"},{"line_number":413,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":414,"context_line":"            help\u003d_("},{"line_number":415,"context_line":"                \u0027Restrict use of the firewall group to the current project\u0027"},{"line_number":416,"context_line":"            ),"},{"line_number":417,"context_line":"        )"},{"line_number":418,"context_line":"        parser.add_argument("},{"line_number":419,"context_line":"            \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"},{"line_number":420,"context_line":"        )"},{"line_number":421,"context_line":"        return parser"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _get_attrs(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":1,"id":"be1cfc6e_83b4c92c","line":420,"range":{"start_line":410,"start_character":0,"end_line":420,"end_character":9},"in_reply_to":"aec7bfaa_d9e24852","updated":"2026-03-30 14:28:21.000000000","message":"I will do that in follow up patch to have cleaner git history. I hope it is ok for you","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cc6a748c85df0447f57877d1f79f9ae06b261c38","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":408,"context_line":"            help\u003d_(\u0027Egress firewall policy (name or ID) to delete\u0027),"},{"line_number":409,"context_line":"        )"},{"line_number":410,"context_line":"        shared_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":411,"context_line":"        shared_group.add_argument("},{"line_number":412,"context_line":"            \u0027--share\u0027,"},{"line_number":413,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":414,"context_line":"            help\u003d_("},{"line_number":415,"context_line":"                \u0027Restrict use of the firewall group to the current project\u0027"},{"line_number":416,"context_line":"            ),"},{"line_number":417,"context_line":"        )"},{"line_number":418,"context_line":"        parser.add_argument("},{"line_number":419,"context_line":"            \u0027--enable\u0027, action\u003d\u0027store_true\u0027, help\u003d_(\u0027Disable firewall group\u0027)"},{"line_number":420,"context_line":"        )"},{"line_number":421,"context_line":"        return parser"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _get_attrs(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":1,"id":"98b08745_c070e661","line":420,"range":{"start_line":410,"start_character":0,"end_line":420,"end_character":9},"in_reply_to":"be1cfc6e_83b4c92c","updated":"2026-04-08 10:47:04.000000000","message":"Acknowledged","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":447,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":448,"context_line":"        fwg_id \u003d client.find_firewall_group("},{"line_number":449,"context_line":"            parsed_args.firewall_group, ignore_missing\u003dFalse"},{"line_number":450,"context_line":"        )[\u0027id\u0027]"},{"line_number":451,"context_line":"        attrs \u003d self._get_attrs(client, parsed_args)"},{"line_number":452,"context_line":"        try:"},{"line_number":453,"context_line":"            client.update_firewall_group(fwg_id, **attrs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"64505afa_1efff71b","line":450,"updated":"2026-03-24 16:28:49.000000000","message":"```suggestion\n        ).id\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":448,"context_line":"        fwg_id \u003d client.find_firewall_group("},{"line_number":449,"context_line":"            parsed_args.firewall_group, ignore_missing\u003dFalse"},{"line_number":450,"context_line":"        )[\u0027id\u0027]"},{"line_number":451,"context_line":"        attrs \u003d self._get_attrs(client, parsed_args)"},{"line_number":452,"context_line":"        try:"},{"line_number":453,"context_line":"            client.update_firewall_group(fwg_id, **attrs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3b3f122e_920404b8","line":450,"in_reply_to":"64505afa_1efff71b","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"}],"openstackclient/network/v2/fwaas/firewallpolicy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6b17d5ee_30064e14","updated":"2026-03-24 16:28:49.000000000","message":"Pretty much all the same comments from the previous file also apply here","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0a591966136b7cae551c55a314ee2bfec3a52e91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5625bd47_ae86fd9f","in_reply_to":"6b17d5ee_30064e14","updated":"2026-04-09 13:43:16.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"}],"openstackclient/network/v2/fwaas/firewallrule.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"89dab3ef_c7c0f7cf","updated":"2026-03-24 16:28:49.000000000","message":"Ditto","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0a591966136b7cae551c55a314ee2bfec3a52e91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0f7b0fc2_24ff454a","in_reply_to":"89dab3ef_c7c0f7cf","updated":"2026-04-09 13:43:16.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"}],"openstackclient/network/v2/fwaas/group.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a03d21c792b740b692f267161ab7696e8ad2f928","unresolved":true,"context_lines":[{"line_number":219,"context_line":"    def get_parser(self, prog_name):"},{"line_number":220,"context_line":"        parser \u003d super().get_parser(prog_name)"},{"line_number":221,"context_line":"        parser.add_argument("},{"line_number":222,"context_line":"            const.FWG,"},{"line_number":223,"context_line":"            metavar\u003d\u0027\u003cfirewall-group\u003e\u0027,"},{"line_number":224,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":225,"context_line":"            help\u003d_(\u0027Firewall group(s) to delete (name or ID)\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"a3aeb4de_9b68d600","line":222,"updated":"2026-04-08 11:04:16.000000000","message":"nit: I\u0027d probably hardcode this\n\n```suggestion\n            \u0027firewall_group\u0027,\n```\n\nDitto for the other users below.","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"13f0699d610f92b89954d376332b3be72c406a3f","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    def get_parser(self, prog_name):"},{"line_number":220,"context_line":"        parser \u003d super().get_parser(prog_name)"},{"line_number":221,"context_line":"        parser.add_argument("},{"line_number":222,"context_line":"            const.FWG,"},{"line_number":223,"context_line":"            metavar\u003d\u0027\u003cfirewall-group\u003e\u0027,"},{"line_number":224,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":225,"context_line":"            help\u003d_(\u0027Firewall group(s) to delete (name or ID)\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"64b49a11_abded40c","line":222,"in_reply_to":"a3aeb4de_9b68d600","updated":"2026-04-09 09:01:44.000000000","message":"Done","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a03d21c792b740b692f267161ab7696e8ad2f928","unresolved":true,"context_lines":[{"line_number":237,"context_line":"                result +\u003d 1"},{"line_number":238,"context_line":"                LOG.error("},{"line_number":239,"context_line":"                    _("},{"line_number":240,"context_line":"                        \"Failed to delete firewall group with \""},{"line_number":241,"context_line":"                        \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\""},{"line_number":242,"context_line":"                    ),"},{"line_number":243,"context_line":"                    {const.FWG: fwg, \u0027e\u0027: e},"},{"line_number":244,"context_line":"                )"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"2754cc26_6abfcb16","line":243,"range":{"start_line":240,"start_character":63,"end_line":243,"end_character":45},"updated":"2026-04-08 11:04:16.000000000","message":"This mix of a constant and hardcoded value is a bit confusing and will break if the constant ever changes. Better to hardcode here.\n\n```suggestion\n                        \"Failed to delete firewall group with \"\n                        \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\"\n                    ),\n                    {\u0027firewall_group\u0027: fwg, \u0027e\u0027: e},\n```","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"13f0699d610f92b89954d376332b3be72c406a3f","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                result +\u003d 1"},{"line_number":238,"context_line":"                LOG.error("},{"line_number":239,"context_line":"                    _("},{"line_number":240,"context_line":"                        \"Failed to delete firewall group with \""},{"line_number":241,"context_line":"                        \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\""},{"line_number":242,"context_line":"                    ),"},{"line_number":243,"context_line":"                    {const.FWG: fwg, \u0027e\u0027: e},"},{"line_number":244,"context_line":"                )"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7b9b47d9_3947596e","line":243,"range":{"start_line":240,"start_character":63,"end_line":243,"end_character":45},"in_reply_to":"2754cc26_6abfcb16","updated":"2026-04-09 09:01:44.000000000","message":"Done","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"35924c0828ac58b8dab45275f5a84b50935b6deb","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":200,"context_line":"        attrs \u003d _get_common_attrs(self.app.client_manager, parsed_args)"},{"line_number":201,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":202,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d identity_common.find_project("},{"line_number":203,"context_line":"                self.app.client_manager.identity,"},{"line_number":204,"context_line":"                parsed_args.project,"},{"line_number":205,"context_line":"                parsed_args.project_domain,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9afa1399_a35c82eb","line":202,"updated":"2026-04-09 13:42:41.000000000","message":"nit: shouldn\u0027t this be `project_id` or is that a fwaas limitation?","commit_id":"56c3f123648987d864bc48eedbc4ca899cc270ad"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ab393bf3cf6e3aae680dcc1328d728a2aff8c276","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":200,"context_line":"        attrs \u003d _get_common_attrs(self.app.client_manager, parsed_args)"},{"line_number":201,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":202,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d identity_common.find_project("},{"line_number":203,"context_line":"                self.app.client_manager.identity,"},{"line_number":204,"context_line":"                parsed_args.project,"},{"line_number":205,"context_line":"                parsed_args.project_domain,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ee76d4a_e927dc18","line":202,"in_reply_to":"38fecee1_1633b427","updated":"2026-04-14 08:51:33.000000000","message":"Done","commit_id":"56c3f123648987d864bc48eedbc4ca899cc270ad"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b1f5baae698d395562b4740ceafce8d8fd3b975c","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":200,"context_line":"        attrs \u003d _get_common_attrs(self.app.client_manager, parsed_args)"},{"line_number":201,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":202,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d identity_common.find_project("},{"line_number":203,"context_line":"                self.app.client_manager.identity,"},{"line_number":204,"context_line":"                parsed_args.project,"},{"line_number":205,"context_line":"                parsed_args.project_domain,"}],"source_content_type":"text/x-python","patch_set":5,"id":"38fecee1_1633b427","line":202,"in_reply_to":"42d93e6d_805e8e2a","updated":"2026-04-09 16:32:16.000000000","message":"Okay, I\u0027m assuming I should drop my -2 until that\u0027s addressed so","commit_id":"56c3f123648987d864bc48eedbc4ca899cc270ad"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"94844555d384940d081e9e34728b12fa75e3933a","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":200,"context_line":"        attrs \u003d _get_common_attrs(self.app.client_manager, parsed_args)"},{"line_number":201,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":202,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d identity_common.find_project("},{"line_number":203,"context_line":"                self.app.client_manager.identity,"},{"line_number":204,"context_line":"                parsed_args.project,"},{"line_number":205,"context_line":"                parsed_args.project_domain,"}],"source_content_type":"text/x-python","patch_set":5,"id":"42d93e6d_805e8e2a","line":202,"in_reply_to":"9afa1399_a35c82eb","updated":"2026-04-09 14:58:28.000000000","message":"Yes, we should be using project_id everywhere, two places below as well. If it doesn\u0027t we should file a bug and fix it. I supposed it could be in a follow-on as there are other occurrences in this patch.\n\nhttps://review.opendev.org/c/openstack/python-openstackclient/+/981669 is cleaning the rest of the neutron code.","commit_id":"56c3f123648987d864bc48eedbc4ca899cc270ad"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"412f743e1493565b3a6e52dd27ac8d5932994302","unresolved":true,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"import typing"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cliff import columns as cliff_columns"},{"line_number":20,"context_line":"from osc_lib.cli import identity as identity_utils"}],"source_content_type":"text/x-python","patch_set":9,"id":"639ce62b_73727c68","line":17,"updated":"2026-04-15 17:04:06.000000000","message":"I have a patch to replace with direct object imports (`from typing import Any`) but that shouldn\u0027t block this. We can fix after.","commit_id":"08b1e6a83ca212cf69d985364291c7192c5284cb"}],"openstackclient/network/v2/fwaas/policy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a03d21c792b740b692f267161ab7696e8ad2f928","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    def get_parser(self, prog_name):"},{"line_number":166,"context_line":"        parser \u003d super().get_parser(prog_name)"},{"line_number":167,"context_line":"        parser.add_argument("},{"line_number":168,"context_line":"            const.FWP,"},{"line_number":169,"context_line":"            metavar\u003d\u0027\u003cfirewall-policy\u003e\u0027,"},{"line_number":170,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":171,"context_line":"            help\u003d_(\u0027Firewall policy(s) to delete (name or ID)\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"608f7767_2324fd33","line":168,"updated":"2026-04-08 11:04:16.000000000","message":"Same comments as previous file. Below also","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"13f0699d610f92b89954d376332b3be72c406a3f","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def get_parser(self, prog_name):"},{"line_number":166,"context_line":"        parser \u003d super().get_parser(prog_name)"},{"line_number":167,"context_line":"        parser.add_argument("},{"line_number":168,"context_line":"            const.FWP,"},{"line_number":169,"context_line":"            metavar\u003d\u0027\u003cfirewall-policy\u003e\u0027,"},{"line_number":170,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":171,"context_line":"            help\u003d_(\u0027Firewall policy(s) to delete (name or ID)\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"8c87593b_44a2da61","line":168,"in_reply_to":"608f7767_2324fd33","updated":"2026-04-09 09:01:44.000000000","message":"Done","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a03d21c792b740b692f267161ab7696e8ad2f928","unresolved":true,"context_lines":[{"line_number":188,"context_line":"                        \"Failed to delete Firewall policy with \""},{"line_number":189,"context_line":"                        \"name or ID \u0027%(firewall_policy)s\u0027: %(e)s\""},{"line_number":190,"context_line":"                    ),"},{"line_number":191,"context_line":"                    {const.FWP: fwp, \u0027e\u0027: e},"},{"line_number":192,"context_line":"                )"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1fbce51a_7d1fab5e","line":191,"updated":"2026-04-08 11:04:16.000000000","message":"Here too","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"13f0699d610f92b89954d376332b3be72c406a3f","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                        \"Failed to delete Firewall policy with \""},{"line_number":189,"context_line":"                        \"name or ID \u0027%(firewall_policy)s\u0027: %(e)s\""},{"line_number":190,"context_line":"                    ),"},{"line_number":191,"context_line":"                    {const.FWP: fwp, \u0027e\u0027: e},"},{"line_number":192,"context_line":"                )"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"935a1963_748422a9","line":191,"in_reply_to":"1fbce51a_7d1fab5e","updated":"2026-04-09 09:01:44.000000000","message":"Done","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"}],"openstackclient/network/v2/fwaas/rule.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a03d21c792b740b692f267161ab7696e8ad2f928","unresolved":true,"context_lines":[{"line_number":307,"context_line":"    def get_parser(self, prog_name):"},{"line_number":308,"context_line":"        parser \u003d super().get_parser(prog_name)"},{"line_number":309,"context_line":"        parser.add_argument("},{"line_number":310,"context_line":"            const.FWR,"},{"line_number":311,"context_line":"            metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":312,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":313,"context_line":"            help\u003d_(\u0027Firewall rule(s) to delete (name or ID)\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3e52fbc6_356c16f9","line":310,"updated":"2026-04-08 11:04:16.000000000","message":"And here","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"13f0699d610f92b89954d376332b3be72c406a3f","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    def get_parser(self, prog_name):"},{"line_number":308,"context_line":"        parser \u003d super().get_parser(prog_name)"},{"line_number":309,"context_line":"        parser.add_argument("},{"line_number":310,"context_line":"            const.FWR,"},{"line_number":311,"context_line":"            metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":312,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":313,"context_line":"            help\u003d_(\u0027Firewall rule(s) to delete (name or ID)\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"b40469f9_4ae8f4a2","line":310,"in_reply_to":"3e52fbc6_356c16f9","updated":"2026-04-09 09:01:44.000000000","message":"Done","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a03d21c792b740b692f267161ab7696e8ad2f928","unresolved":true,"context_lines":[{"line_number":328,"context_line":"                        \"Failed to delete Firewall rule with \""},{"line_number":329,"context_line":"                        \"name or ID \u0027%(firewall_rule)s\u0027: %(e)s\""},{"line_number":330,"context_line":"                    ),"},{"line_number":331,"context_line":"                    {const.FWR: fwr, \u0027e\u0027: e},"},{"line_number":332,"context_line":"                )"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6b130faa_de23385d","line":331,"updated":"2026-04-08 11:04:16.000000000","message":"And here","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"13f0699d610f92b89954d376332b3be72c406a3f","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                        \"Failed to delete Firewall rule with \""},{"line_number":329,"context_line":"                        \"name or ID \u0027%(firewall_rule)s\u0027: %(e)s\""},{"line_number":330,"context_line":"                    ),"},{"line_number":331,"context_line":"                    {const.FWR: fwr, \u0027e\u0027: e},"},{"line_number":332,"context_line":"                )"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1e4d16e1_db1b9107","line":331,"in_reply_to":"6b130faa_de23385d","updated":"2026-04-09 09:01:44.000000000","message":"Done","commit_id":"9993de23f2af6cf6cadee0bd628bf3fd7dfd1c4b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d29d2794ffdc4152664a1ef2154a8bd9e89fff58","unresolved":true,"context_lines":[{"line_number":128,"context_line":"        \u0027--source-port\u0027,"},{"line_number":129,"context_line":"        metavar\u003d\u0027\u003csource-port\u003e\u0027,"},{"line_number":130,"context_line":"        help\u003d_("},{"line_number":131,"context_line":"            \u0027Source port number or range\u0027"},{"line_number":132,"context_line":"            \u0027(integer in [1, 65535] or range like 123:456)\u0027"},{"line_number":133,"context_line":"        ),"},{"line_number":134,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":6,"id":"be57b582_c16f8d63","line":131,"range":{"start_line":131,"start_character":40,"end_line":131,"end_character":41},"updated":"2026-04-14 09:48:03.000000000","message":"missing space","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1c5e65a8092b182f2872be803c88d2c419b805a7","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \u0027--source-port\u0027,"},{"line_number":129,"context_line":"        metavar\u003d\u0027\u003csource-port\u003e\u0027,"},{"line_number":130,"context_line":"        help\u003d_("},{"line_number":131,"context_line":"            \u0027Source port number or range\u0027"},{"line_number":132,"context_line":"            \u0027(integer in [1, 65535] or range like 123:456)\u0027"},{"line_number":133,"context_line":"        ),"},{"line_number":134,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":6,"id":"59b98212_d67e8bb4","line":131,"range":{"start_line":131,"start_character":40,"end_line":131,"end_character":41},"in_reply_to":"be57b582_c16f8d63","updated":"2026-04-15 12:58:15.000000000","message":"Done","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d29d2794ffdc4152664a1ef2154a8bd9e89fff58","unresolved":true,"context_lines":[{"line_number":192,"context_line":"    src_fwg_group.add_argument("},{"line_number":193,"context_line":"        \u0027--no-source-firewall-group\u0027,"},{"line_number":194,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":195,"context_line":"        help\u003d_(\u0027No associated destination firewall group\u0027),"},{"line_number":196,"context_line":"    )"},{"line_number":197,"context_line":"    dst_fwg_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":198,"context_line":"    dst_fwg_group.add_argument("}],"source_content_type":"text/x-python","patch_set":6,"id":"cfc571fd_14ee0c19","line":195,"range":{"start_line":195,"start_character":30,"end_line":195,"end_character":41},"updated":"2026-04-14 09:48:03.000000000","message":"source","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1c5e65a8092b182f2872be803c88d2c419b805a7","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    src_fwg_group.add_argument("},{"line_number":193,"context_line":"        \u0027--no-source-firewall-group\u0027,"},{"line_number":194,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":195,"context_line":"        help\u003d_(\u0027No associated destination firewall group\u0027),"},{"line_number":196,"context_line":"    )"},{"line_number":197,"context_line":"    dst_fwg_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":198,"context_line":"    dst_fwg_group.add_argument("}],"source_content_type":"text/x-python","patch_set":6,"id":"dcec23f7_b6c48660","line":195,"range":{"start_line":195,"start_character":30,"end_line":195,"end_character":41},"in_reply_to":"cfc571fd_14ee0c19","updated":"2026-04-15 12:58:15.000000000","message":"Done","commit_id":"394f3fd656165a9a4650d1edc7538b124d4b45aa"}],"openstackclient/tests/unit/network/v2/fwaas/common.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":28,"context_line":"class TestFWaaS(network_fakes.TestNetworkV2):"},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d488a331_e35c7012","line":31,"updated":"2026-03-24 16:28:49.000000000","message":"You don\u0027t need this: see I135c24d0f6450d5af4e1860218bf3a65c09e36cc","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class TestFWaaS(network_fakes.TestNetworkV2):"},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c4196c75_00cc122e","line":31,"in_reply_to":"d488a331_e35c7012","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def assertListItemEqual(self, expected, actual):"}],"source_content_type":"text/x-python","patch_set":1,"id":"b7e27c1e_61f48306","line":32,"updated":"2026-03-24 16:28:49.000000000","message":"This is already defined on the parent class as `self.network_client`. This should cause a pep8 failure (if CI wasn\u0027t being so flaky rn).","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def assertListItemEqual(self, expected, actual):"}],"source_content_type":"text/x-python","patch_set":1,"id":"0620322b_6d30c002","line":32,"in_reply_to":"b7e27c1e_61f48306","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def assertListItemEqual(self, expected, actual):"},{"line_number":36,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":37,"context_line":"        for item_expected, item_actual in zip(expected, actual):"},{"line_number":38,"context_line":"            self.assertItemEqual(item_expected, item_actual)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def assertItemEqual(self, expected, actual):"},{"line_number":41,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":42,"context_line":"        for col_expected, col_actual in zip(expected, actual):"},{"line_number":43,"context_line":"            if isinstance(col_expected, cliff_columns.FormattableColumn):"},{"line_number":44,"context_line":"                self.assertIsInstance(col_actual, col_expected.__class__)"},{"line_number":45,"context_line":"                self.assertEqual("},{"line_number":46,"context_line":"                    col_expected.human_readable(), col_actual.human_readable()"},{"line_number":47,"context_line":"                )"},{"line_number":48,"context_line":"            else:"},{"line_number":49,"context_line":"                self.assertEqual(col_expected, col_actual)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class TestListFWaaS(TestFWaaS):"},{"line_number":53,"context_line":"    def test_list_with_no_option(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"12d60f36_2265b654","line":50,"range":{"start_line":33,"start_character":0,"end_line":50,"end_character":1},"updated":"2026-03-24 16:28:49.000000000","message":"These are already defined on the base test class in osc-lib https://github.com/openstack/osc-lib/blob/4.4.0/osc_lib/test/base.py#L89-L122 We don\u0027t need them here\n\n```suggestion\n        self.addCleanup(mock.patch.stopall)\n\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":true,"context_lines":[{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def assertListItemEqual(self, expected, actual):"},{"line_number":36,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":37,"context_line":"        for item_expected, item_actual in zip(expected, actual):"},{"line_number":38,"context_line":"            self.assertItemEqual(item_expected, item_actual)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def assertItemEqual(self, expected, actual):"},{"line_number":41,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":42,"context_line":"        for col_expected, col_actual in zip(expected, actual):"},{"line_number":43,"context_line":"            if isinstance(col_expected, cliff_columns.FormattableColumn):"},{"line_number":44,"context_line":"                self.assertIsInstance(col_actual, col_expected.__class__)"},{"line_number":45,"context_line":"                self.assertEqual("},{"line_number":46,"context_line":"                    col_expected.human_readable(), col_actual.human_readable()"},{"line_number":47,"context_line":"                )"},{"line_number":48,"context_line":"            else:"},{"line_number":49,"context_line":"                self.assertEqual(col_expected, col_actual)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class TestListFWaaS(TestFWaaS):"},{"line_number":53,"context_line":"    def test_list_with_no_option(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"63bf8924_4daab7ea","line":50,"range":{"start_line":33,"start_character":0,"end_line":50,"end_character":1},"in_reply_to":"12d60f36_2265b654","updated":"2026-03-30 14:28:21.000000000","message":"right, but currently network_fakes.TestNetworkV2 class inherits from openstackclient.tests.unit.utils.TestCommand and not from the  osc_lib.test.base.TestCommand. I will do follow up patch to change that but it seems that there is some more work needed to do that as more neutron related tests are failing with such change.\nFor now I added TODO here to not forget about it.","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0a591966136b7cae551c55a314ee2bfec3a52e91","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def assertListItemEqual(self, expected, actual):"},{"line_number":36,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":37,"context_line":"        for item_expected, item_actual in zip(expected, actual):"},{"line_number":38,"context_line":"            self.assertItemEqual(item_expected, item_actual)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def assertItemEqual(self, expected, actual):"},{"line_number":41,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":42,"context_line":"        for col_expected, col_actual in zip(expected, actual):"},{"line_number":43,"context_line":"            if isinstance(col_expected, cliff_columns.FormattableColumn):"},{"line_number":44,"context_line":"                self.assertIsInstance(col_actual, col_expected.__class__)"},{"line_number":45,"context_line":"                self.assertEqual("},{"line_number":46,"context_line":"                    col_expected.human_readable(), col_actual.human_readable()"},{"line_number":47,"context_line":"                )"},{"line_number":48,"context_line":"            else:"},{"line_number":49,"context_line":"                self.assertEqual(col_expected, col_actual)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class TestListFWaaS(TestFWaaS):"},{"line_number":53,"context_line":"    def test_list_with_no_option(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ee07d964_188f76d4","line":50,"range":{"start_line":33,"start_character":0,"end_line":50,"end_character":1},"in_reply_to":"63bf8924_4daab7ea","updated":"2026-04-09 13:43:16.000000000","message":"Acknowledged","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3fd3ec7e1cbb42bc63cb843d6d23e4bb2302d4d1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super().setUp()"},{"line_number":31,"context_line":"        self.namespace \u003d argparse.Namespace()"},{"line_number":32,"context_line":"        self.networkclient \u003d self.app.client_manager.network"},{"line_number":33,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def assertListItemEqual(self, expected, actual):"},{"line_number":36,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":37,"context_line":"        for item_expected, item_actual in zip(expected, actual):"},{"line_number":38,"context_line":"            self.assertItemEqual(item_expected, item_actual)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def assertItemEqual(self, expected, actual):"},{"line_number":41,"context_line":"        self.assertEqual(len(expected), len(actual))"},{"line_number":42,"context_line":"        for col_expected, col_actual in zip(expected, actual):"},{"line_number":43,"context_line":"            if isinstance(col_expected, cliff_columns.FormattableColumn):"},{"line_number":44,"context_line":"                self.assertIsInstance(col_actual, col_expected.__class__)"},{"line_number":45,"context_line":"                self.assertEqual("},{"line_number":46,"context_line":"                    col_expected.human_readable(), col_actual.human_readable()"},{"line_number":47,"context_line":"                )"},{"line_number":48,"context_line":"            else:"},{"line_number":49,"context_line":"                self.assertEqual(col_expected, col_actual)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class TestListFWaaS(TestFWaaS):"},{"line_number":53,"context_line":"    def test_list_with_no_option(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"af4c5263_d781ddc3","line":50,"range":{"start_line":33,"start_character":0,"end_line":50,"end_character":1},"in_reply_to":"ee07d964_188f76d4","updated":"2026-04-22 09:28:26.000000000","message":"Follow up patch for this: https://review.opendev.org/c/openstack/python-openstackclient/+/985786","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":57,"context_line":"        headers, data \u003d self.cmd.take_action(parsed_args)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.mocked.assert_called_once_with()"},{"line_number":60,"context_line":"        self.assertEqual(list(self.list_headers), headers)"},{"line_number":61,"context_line":"        self.assertEqual([self.list_data], list(data))"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"604397d0_6f2d5477","line":59,"updated":"2026-03-24 16:28:49.000000000","message":"This looks like a bad migration. I expect this should read:\n\n \n```suggestion\n        self.network_client.firewall_groups.assert_called_once_with()\n```\n\nor whatever it is you\u0027re trying to test here","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":57,"context_line":"        headers, data \u003d self.cmd.take_action(parsed_args)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.mocked.assert_called_once_with()"},{"line_number":60,"context_line":"        self.assertEqual(list(self.list_headers), headers)"},{"line_number":61,"context_line":"        self.assertEqual([self.list_data], list(data))"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ed4869d0_2c405d4e","line":59,"in_reply_to":"604397d0_6f2d5477","updated":"2026-03-30 14:28:21.000000000","message":"It is set to e.g. self.network_client.firewall_groups in the specific test class which inherits from that one, see e.g. https://review.opendev.org/c/openstack/python-openstackclient/+/981891/1/openstackclient/tests/unit/network/v2/fwaas/test_firewallgroup.py#369","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0a591966136b7cae551c55a314ee2bfec3a52e91","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":57,"context_line":"        headers, data \u003d self.cmd.take_action(parsed_args)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.mocked.assert_called_once_with()"},{"line_number":60,"context_line":"        self.assertEqual(list(self.list_headers), headers)"},{"line_number":61,"context_line":"        self.assertEqual([self.list_data], list(data))"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"abfe3f12_7d2fd98c","line":59,"in_reply_to":"ed4869d0_2c405d4e","updated":"2026-04-09 13:43:16.000000000","message":"Acknowledged","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027name\u0027: update})"},{"line_number":111,"context_line":"        self.assertIsNone(result)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_set_description(self):"},{"line_number":114,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":115,"context_line":"        update \u003d \u0027change-desc\u0027"},{"line_number":116,"context_line":"        arglist \u003d [target, \u0027--description\u0027, update]"},{"line_number":117,"context_line":"        verifylist \u003d ["},{"line_number":118,"context_line":"            (self.res, target),"},{"line_number":119,"context_line":"            (\u0027description\u0027, update),"},{"line_number":120,"context_line":"        ]"},{"line_number":121,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":122,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027description\u0027: update})"},{"line_number":125,"context_line":"        self.assertIsNone(result)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_set_shared(self):"},{"line_number":128,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":129,"context_line":"        arglist \u003d [target, \u0027--share\u0027]"},{"line_number":130,"context_line":"        verifylist \u003d ["},{"line_number":131,"context_line":"            (self.res, target),"},{"line_number":132,"context_line":"            (\u0027share\u0027, True),"},{"line_number":133,"context_line":"        ]"},{"line_number":134,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":135,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027shared\u0027: True})"},{"line_number":138,"context_line":"        self.assertIsNone(result)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def test_set_duplicate_shared(self):"},{"line_number":141,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":142,"context_line":"        arglist \u003d [target, \u0027--share\u0027, \u0027--share\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"c48a0181_fd233f6c","line":139,"range":{"start_line":112,"start_character":1,"end_line":139,"end_character":1},"updated":"2026-03-24 16:28:49.000000000","message":"IMO these are low value tests since the logic they are testing is very simple. Could we combine them into e.g. a `_with_options` test?","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027name\u0027: update})"},{"line_number":111,"context_line":"        self.assertIsNone(result)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_set_description(self):"},{"line_number":114,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":115,"context_line":"        update \u003d \u0027change-desc\u0027"},{"line_number":116,"context_line":"        arglist \u003d [target, \u0027--description\u0027, update]"},{"line_number":117,"context_line":"        verifylist \u003d ["},{"line_number":118,"context_line":"            (self.res, target),"},{"line_number":119,"context_line":"            (\u0027description\u0027, update),"},{"line_number":120,"context_line":"        ]"},{"line_number":121,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":122,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027description\u0027: update})"},{"line_number":125,"context_line":"        self.assertIsNone(result)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_set_shared(self):"},{"line_number":128,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":129,"context_line":"        arglist \u003d [target, \u0027--share\u0027]"},{"line_number":130,"context_line":"        verifylist \u003d ["},{"line_number":131,"context_line":"            (self.res, target),"},{"line_number":132,"context_line":"            (\u0027share\u0027, True),"},{"line_number":133,"context_line":"        ]"},{"line_number":134,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":135,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027shared\u0027: True})"},{"line_number":138,"context_line":"        self.assertIsNone(result)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def test_set_duplicate_shared(self):"},{"line_number":141,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":142,"context_line":"        arglist \u003d [target, \u0027--share\u0027, \u0027--share\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"d8b060dd_cd125bfd","line":139,"range":{"start_line":112,"start_character":1,"end_line":139,"end_character":1},"in_reply_to":"c48a0181_fd233f6c","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027shared\u0027: False})"},{"line_number":177,"context_line":"        self.assertIsNone(result)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def test_set_no_share_and_shared(self):"},{"line_number":180,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":181,"context_line":"        arglist \u003d [target, \u0027--no-share\u0027, \u0027--share\u0027]"},{"line_number":182,"context_line":"        verifylist \u003d ["},{"line_number":183,"context_line":"            (self.res, target),"},{"line_number":184,"context_line":"            (\u0027no_share\u0027, True),"},{"line_number":185,"context_line":"            (\u0027share\u0027, True),"},{"line_number":186,"context_line":"        ]"},{"line_number":187,"context_line":"        self.assertRaises("},{"line_number":188,"context_line":"            test_utils.ParserException,"},{"line_number":189,"context_line":"            self.check_parser,"},{"line_number":190,"context_line":"            self.cmd,"},{"line_number":191,"context_line":"            arglist,"},{"line_number":192,"context_line":"            verifylist,"},{"line_number":193,"context_line":"        )"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def test_set_shared_and_no_share(self):"},{"line_number":196,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":197,"context_line":"        arglist \u003d [target, \u0027--share\u0027, \u0027--no_share\u0027]"},{"line_number":198,"context_line":"        verifylist \u003d ["},{"line_number":199,"context_line":"            (self.res, target),"},{"line_number":200,"context_line":"            (\u0027share\u0027, True),"},{"line_number":201,"context_line":"            (\u0027no_share\u0027, True),"},{"line_number":202,"context_line":"        ]"},{"line_number":203,"context_line":"        self.assertRaises("},{"line_number":204,"context_line":"            test_utils.ParserException,"},{"line_number":205,"context_line":"            self.check_parser,"},{"line_number":206,"context_line":"            self.cmd,"},{"line_number":207,"context_line":"            arglist,"},{"line_number":208,"context_line":"            verifylist,"},{"line_number":209,"context_line":"        )"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_set_project(self):"},{"line_number":212,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":213,"context_line":"        project_id \u003d \u0027b14ce3b699594d13819a859480286489\u0027"},{"line_number":214,"context_line":"        arglist \u003d [target, \u0027--project\u0027, project_id]"},{"line_number":215,"context_line":"        verifylist \u003d ["},{"line_number":216,"context_line":"            (self.res, target),"},{"line_number":217,"context_line":"            (\u0027tenant_id\u0027, project_id),"},{"line_number":218,"context_line":"        ]"},{"line_number":219,"context_line":"        self.assertRaises("},{"line_number":220,"context_line":"            test_utils.ParserException,"},{"line_number":221,"context_line":"            self.check_parser,"},{"line_number":222,"context_line":"            self.cmd,"},{"line_number":223,"context_line":"            arglist,"},{"line_number":224,"context_line":"            verifylist,"},{"line_number":225,"context_line":"        )"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_set_project_domain(self):"},{"line_number":228,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":229,"context_line":"        project_domain \u003d \u0027mydomain.com\u0027"},{"line_number":230,"context_line":"        arglist \u003d [target, \u0027--project-domain\u0027, project_domain]"},{"line_number":231,"context_line":"        verifylist \u003d ["},{"line_number":232,"context_line":"            (self.res, target),"},{"line_number":233,"context_line":"            (\u0027project_domain\u0027, project_domain),"},{"line_number":234,"context_line":"        ]"},{"line_number":235,"context_line":"        # import remote_pdb; remote_pdb.set_trace(port\u003d2222)"},{"line_number":236,"context_line":"        self.assertRaises("},{"line_number":237,"context_line":"            test_utils.ParserException,"},{"line_number":238,"context_line":"            self.check_parser,"},{"line_number":239,"context_line":"            self.cmd,"},{"line_number":240,"context_line":"            arglist,"},{"line_number":241,"context_line":"            verifylist,"},{"line_number":242,"context_line":"        )"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class TestDeleteFWaaS(TestFWaaS):"}],"source_content_type":"text/x-python","patch_set":1,"id":"75820f36_32c8a416","line":242,"range":{"start_line":178,"start_character":1,"end_line":242,"end_character":9},"updated":"2026-03-24 16:28:49.000000000","message":"These tests all test basic argparse functionality. I\u0027d drop them, personally.","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0a591966136b7cae551c55a314ee2bfec3a52e91","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        self.mocked.assert_called_once_with(target, **{\u0027shared\u0027: False})"},{"line_number":177,"context_line":"        self.assertIsNone(result)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def test_set_no_share_and_shared(self):"},{"line_number":180,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":181,"context_line":"        arglist \u003d [target, \u0027--no-share\u0027, \u0027--share\u0027]"},{"line_number":182,"context_line":"        verifylist \u003d ["},{"line_number":183,"context_line":"            (self.res, target),"},{"line_number":184,"context_line":"            (\u0027no_share\u0027, True),"},{"line_number":185,"context_line":"            (\u0027share\u0027, True),"},{"line_number":186,"context_line":"        ]"},{"line_number":187,"context_line":"        self.assertRaises("},{"line_number":188,"context_line":"            test_utils.ParserException,"},{"line_number":189,"context_line":"            self.check_parser,"},{"line_number":190,"context_line":"            self.cmd,"},{"line_number":191,"context_line":"            arglist,"},{"line_number":192,"context_line":"            verifylist,"},{"line_number":193,"context_line":"        )"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def test_set_shared_and_no_share(self):"},{"line_number":196,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":197,"context_line":"        arglist \u003d [target, \u0027--share\u0027, \u0027--no_share\u0027]"},{"line_number":198,"context_line":"        verifylist \u003d ["},{"line_number":199,"context_line":"            (self.res, target),"},{"line_number":200,"context_line":"            (\u0027share\u0027, True),"},{"line_number":201,"context_line":"            (\u0027no_share\u0027, True),"},{"line_number":202,"context_line":"        ]"},{"line_number":203,"context_line":"        self.assertRaises("},{"line_number":204,"context_line":"            test_utils.ParserException,"},{"line_number":205,"context_line":"            self.check_parser,"},{"line_number":206,"context_line":"            self.cmd,"},{"line_number":207,"context_line":"            arglist,"},{"line_number":208,"context_line":"            verifylist,"},{"line_number":209,"context_line":"        )"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_set_project(self):"},{"line_number":212,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":213,"context_line":"        project_id \u003d \u0027b14ce3b699594d13819a859480286489\u0027"},{"line_number":214,"context_line":"        arglist \u003d [target, \u0027--project\u0027, project_id]"},{"line_number":215,"context_line":"        verifylist \u003d ["},{"line_number":216,"context_line":"            (self.res, target),"},{"line_number":217,"context_line":"            (\u0027tenant_id\u0027, project_id),"},{"line_number":218,"context_line":"        ]"},{"line_number":219,"context_line":"        self.assertRaises("},{"line_number":220,"context_line":"            test_utils.ParserException,"},{"line_number":221,"context_line":"            self.check_parser,"},{"line_number":222,"context_line":"            self.cmd,"},{"line_number":223,"context_line":"            arglist,"},{"line_number":224,"context_line":"            verifylist,"},{"line_number":225,"context_line":"        )"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_set_project_domain(self):"},{"line_number":228,"context_line":"        target \u003d self.resource[\u0027id\u0027]"},{"line_number":229,"context_line":"        project_domain \u003d \u0027mydomain.com\u0027"},{"line_number":230,"context_line":"        arglist \u003d [target, \u0027--project-domain\u0027, project_domain]"},{"line_number":231,"context_line":"        verifylist \u003d ["},{"line_number":232,"context_line":"            (self.res, target),"},{"line_number":233,"context_line":"            (\u0027project_domain\u0027, project_domain),"},{"line_number":234,"context_line":"        ]"},{"line_number":235,"context_line":"        # import remote_pdb; remote_pdb.set_trace(port\u003d2222)"},{"line_number":236,"context_line":"        self.assertRaises("},{"line_number":237,"context_line":"            test_utils.ParserException,"},{"line_number":238,"context_line":"            self.check_parser,"},{"line_number":239,"context_line":"            self.cmd,"},{"line_number":240,"context_line":"            arglist,"},{"line_number":241,"context_line":"            verifylist,"},{"line_number":242,"context_line":"        )"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class TestDeleteFWaaS(TestFWaaS):"}],"source_content_type":"text/x-python","patch_set":1,"id":"530cf511_9f3f986b","line":242,"range":{"start_line":178,"start_character":1,"end_line":242,"end_character":9},"in_reply_to":"75820f36_32c8a416","updated":"2026-04-09 13:43:16.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":325,"context_line":"            (\u0027share\u0027, True),"},{"line_number":326,"context_line":"            (\u0027no_share\u0027, True),"},{"line_number":327,"context_line":"        ]"},{"line_number":328,"context_line":"        # check_parser: error: unrecognized arguments: --no-share"},{"line_number":329,"context_line":"        self.assertRaises("},{"line_number":330,"context_line":"            test_utils.ParserException,"},{"line_number":331,"context_line":"            self.check_parser,"}],"source_content_type":"text/x-python","patch_set":1,"id":"45dfdbab_426d5a80","line":328,"updated":"2026-03-24 16:28:49.000000000","message":"why are we checking an option that doesn\u0027t exist?","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            (\u0027share\u0027, True),"},{"line_number":326,"context_line":"            (\u0027no_share\u0027, True),"},{"line_number":327,"context_line":"        ]"},{"line_number":328,"context_line":"        # check_parser: error: unrecognized arguments: --no-share"},{"line_number":329,"context_line":"        self.assertRaises("},{"line_number":330,"context_line":"            test_utils.ParserException,"},{"line_number":331,"context_line":"            self.check_parser,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1c3bd938_cc582374","line":328,"in_reply_to":"45dfdbab_426d5a80","updated":"2026-03-30 14:28:21.000000000","message":"removed","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"}],"openstackclient/tests/unit/network/v2/fwaas/fakes.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"eeb2769c_876627cd","line":180,"range":{"start_line":177,"start_character":18,"end_line":180,"end_character":1},"updated":"2026-03-24 16:28:49.000000000","message":"Can we rework this to either (a) match the pattern used in other fakes files of `create_one_foo` / `create_foos` / `get_foos` functions or simply use the helpers from `openstack.test.fakes`?","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1cabf05f_70fe8949","line":180,"range":{"start_line":177,"start_character":18,"end_line":180,"end_character":1},"in_reply_to":"eeb2769c_876627cd","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"}],"openstackclient/tests/unit/network/v2/fwaas/test_firewallgroup.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":28,"context_line":"from openstackclient.tests.unit import utils as test_utils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_fwg \u003d fakes.FirewallGroup().create()"},{"line_number":32,"context_line":"CONVERT_MAP \u003d {"},{"line_number":33,"context_line":"    \u0027ingress_firewall_policy\u0027: \u0027ingress_firewall_policy_id\u0027,"},{"line_number":34,"context_line":"    \u0027egress_firewall_policy\u0027: \u0027egress_firewall_policy_id\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1df8de24_529a33fd","line":31,"updated":"2026-03-24 16:28:49.000000000","message":"Let\u0027s try to avoid creating mutable module-level fakes. It\u0027s way too easy for us to accidentally cause intermittent failures if a test starts modifying the fake.","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from openstackclient.tests.unit import utils as test_utils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_fwg \u003d fakes.FirewallGroup().create()"},{"line_number":32,"context_line":"CONVERT_MAP \u003d {"},{"line_number":33,"context_line":"    \u0027ingress_firewall_policy\u0027: \u0027ingress_firewall_policy_id\u0027,"},{"line_number":34,"context_line":"    \u0027egress_firewall_policy\u0027: \u0027egress_firewall_policy_id\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a6d982b_9a9a39e4","line":31,"in_reply_to":"1df8de24_529a33fd","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":75,"context_line":"    return request, response"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFirewallGroup(common.TestFWaaS):"},{"line_number":79,"context_line":"    def check_results(self, headers, data, exp_req, is_list\u003dFalse):"},{"line_number":80,"context_line":"        if is_list:"},{"line_number":81,"context_line":"            req_body \u003d {self.res_plural: list(exp_req)}"}],"source_content_type":"text/x-python","patch_set":1,"id":"6b3ff0d4_603d7b72","line":78,"updated":"2026-03-24 16:28:49.000000000","message":"I\u0027ve commented on this in one of the other neutronclient migration patches, but I really don\u0027t like this idea of using a generic helper class for each operation: it\u0027s overly complicated and doesn\u0027t fit with the rest of the code base. Can you fold the logic of `TestFWaaS` into these test cases and simplify this? We can do that in a follow-up if you like, but I\u0027d like to see the follow-up proposed first before we approve this.","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    return request, response"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class TestFirewallGroup(common.TestFWaaS):"},{"line_number":79,"context_line":"    def check_results(self, headers, data, exp_req, is_list\u003dFalse):"},{"line_number":80,"context_line":"        if is_list:"},{"line_number":81,"context_line":"            req_body \u003d {self.res_plural: list(exp_req)}"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4c897eb_99bcfc5a","line":78,"in_reply_to":"6b3ff0d4_603d7b72","updated":"2026-03-30 14:28:21.000000000","message":"Refactoring done. And I\u0027ve removed \"common.py\" module completely.","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        super().setUp()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        def _find_resource(*args, **kwargs):"},{"line_number":91,"context_line":"            return {\u0027id\u0027: args[0], \u0027ports\u0027: _fwg[\u0027ports\u0027]}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.networkclient.find_firewall_group \u003d mock.Mock("},{"line_number":94,"context_line":"            side_effect\u003d_find_resource"}],"source_content_type":"text/x-python","patch_set":1,"id":"86cefc9c_9763cd78","line":91,"updated":"2026-03-24 16:28:49.000000000","message":"This should be returning a fake `openstack.network.v2.firewall_group.FirewallGroup`","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        super().setUp()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        def _find_resource(*args, **kwargs):"},{"line_number":91,"context_line":"            return {\u0027id\u0027: args[0], \u0027ports\u0027: _fwg[\u0027ports\u0027]}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.networkclient.find_firewall_group \u003d mock.Mock("},{"line_number":94,"context_line":"            side_effect\u003d_find_resource"}],"source_content_type":"text/x-python","patch_set":1,"id":"d93abf50_3267861b","line":91,"in_reply_to":"86cefc9c_9763cd78","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1e47f0ba27e01503a9dabdd68e27c4543a31f4e","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        def _find_resource(*args, **kwargs):"},{"line_number":91,"context_line":"            return {\u0027id\u0027: args[0], \u0027ports\u0027: _fwg[\u0027ports\u0027]}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.networkclient.find_firewall_group \u003d mock.Mock("},{"line_number":94,"context_line":"            side_effect\u003d_find_resource"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":"        identity_common.find_project \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa8ada6b_be0d58b5","line":93,"updated":"2026-03-24 16:28:49.000000000","message":"As noted elsewhere, we should be using the existing mocks\n\n\n```suggestion\n        self.network_client.find_firewall_group.side_effect \u003d _find_resource\n```","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"971aae5efbc4c5e61b17353023225c720cbf837d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        def _find_resource(*args, **kwargs):"},{"line_number":91,"context_line":"            return {\u0027id\u0027: args[0], \u0027ports\u0027: _fwg[\u0027ports\u0027]}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.networkclient.find_firewall_group \u003d mock.Mock("},{"line_number":94,"context_line":"            side_effect\u003d_find_resource"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":"        identity_common.find_project \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":1,"id":"8c5c16ab_bb6166ae","line":93,"in_reply_to":"aa8ada6b_be0d58b5","updated":"2026-03-30 14:28:21.000000000","message":"Done","commit_id":"c15a582db1475e731a4b059ed35032b5e853a77c"}]}
