)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4fcdfbdbd35913d7395f39f2d18534425591d114","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3615e25a_4e7d5477","updated":"2025-05-05 13:51:27.000000000","message":"I think this patch deserves a reno","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5538c7fdc30e995245c82e00db1147627a43b5e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9a6d566f_4dd355b8","updated":"2025-04-29 10:43:21.000000000","message":"thanks, I will check it latest next week.","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"64bf2849f1f505e97077aded3867c76629084549","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bb012972_732726b2","in_reply_to":"3615e25a_4e7d5477","updated":"2025-05-16 12:20:51.000000000","message":"Done","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"}],"neutron_fwaas/policies/firewall_group.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d9e241877a85ca75846d8ced03dd80dc339abb59","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    ),"},{"line_number":45,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":46,"context_line":"        name\u003d\u0027update_firewall_group\u0027,"},{"line_number":47,"context_line":"        check_str\u003dneutron_base.ADMIN_OR_PROJECT_MEMBER,"},{"line_number":48,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":49,"context_line":"        description\u003d\u0027Update a firewall group\u0027,"},{"line_number":50,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"d29e8883_04e5ac82","line":47,"range":{"start_line":47,"start_character":46,"end_line":47,"end_character":54},"updated":"2025-05-06 10:30:16.000000000","message":"Just wondering if this should be ADMIN_OR_PROJECT_MANAGER, but not sure, in my env it looks ok","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"64bf2849f1f505e97077aded3867c76629084549","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    ),"},{"line_number":45,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":46,"context_line":"        name\u003d\u0027update_firewall_group\u0027,"},{"line_number":47,"context_line":"        check_str\u003dneutron_base.ADMIN_OR_PROJECT_MEMBER,"},{"line_number":48,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":49,"context_line":"        description\u003d\u0027Update a firewall group\u0027,"},{"line_number":50,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"7795c453_eb8912fa","line":47,"range":{"start_line":47,"start_character":46,"end_line":47,"end_character":54},"in_reply_to":"d29e8883_04e5ac82","updated":"2025-05-16 12:20:51.000000000","message":"it was \"owner\" before so I think that it is ok to allow it for members","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"}],"neutron_fwaas/policies/firewall_policy.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4fcdfbdbd35913d7395f39f2d18534425591d114","unresolved":true,"context_lines":[{"line_number":115,"context_line":"    # TODO(amotoki): Drop this rule as it has no effect."},{"line_number":116,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":117,"context_line":"        name\u003d\u0027delete_firewall_policy:shared\u0027,"},{"line_number":118,"context_line":"        check_str\u003dneutron_base.ADMIN,"},{"line_number":119,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":120,"context_line":"        description\u003d\u0027Delete a shread firewall policy\u0027,"},{"line_number":121,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"e4811604_ca94a116","line":118,"range":{"start_line":118,"start_character":18,"end_line":118,"end_character":36},"updated":"2025-05-05 13:51:27.000000000","message":"This looks a bit restrictive, but this is what is now working.","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"64bf2849f1f505e97077aded3867c76629084549","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # TODO(amotoki): Drop this rule as it has no effect."},{"line_number":116,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":117,"context_line":"        name\u003d\u0027delete_firewall_policy:shared\u0027,"},{"line_number":118,"context_line":"        check_str\u003dneutron_base.ADMIN,"},{"line_number":119,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":120,"context_line":"        description\u003d\u0027Delete a shread firewall policy\u0027,"},{"line_number":121,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"e0b012cd_040e69f3","line":118,"range":{"start_line":118,"start_character":18,"end_line":118,"end_character":36},"in_reply_to":"e4811604_ca94a116","updated":"2025-05-16 12:20:51.000000000","message":"yeah, if we will want to change it, it should be separate patch IMO","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"}],"neutron_fwaas/tests/unit/policies/test_firewall_group.py":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"a5b8f494d307419a7960262dbc00fb8b4fc10112","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.context \u003d self.system_reader_ctx"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class AdminTests(FirewallGroupAPITestCase):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def setUp(self):"},{"line_number":124,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"27bfac34_a0703283","line":121,"updated":"2025-04-28 20:43:46.000000000","message":"No issue, I am just wondering if you had some thoughts about using modules like `parameterized` sicne lot of these tests repeat the same thing for each API method\n\nFor example AdmninTests would look like this\n```\nfrom parameterized import parameterized # added in test-requirements.txt\n\nclass AdminTests(FirewallGroupAPITestCase):\n\n    def setUp(self):\n        super().setUp()\n        self.context \u003d self.project_admin_ctx\n\n    @parameterized.expand([\n        (\u0027create_firewall_group\u0027),\n        (\u0027update_firewall_group\u0027),\n        (\u0027delete_firewall_group\u0027),\n        (\u0027get_firewall_group\u0027)\n    ])\n\n    def test_access_is_allowed_for_method(self, method_name):\n        self.assertTrue(\n            policy.enforce(\n                self.context, method_name, self.target))\n        self.assertTrue(\n            policy.enforce(\n                self.context, method_name, self.alt_target))\n ```\n Similar can be done for other test classes.","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"7b3d0e8f24bf122675a153751a94bd887f34f4ea","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.context \u003d self.system_reader_ctx"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class AdminTests(FirewallGroupAPITestCase):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def setUp(self):"},{"line_number":124,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ce4def12_5b667bea","line":121,"in_reply_to":"0836507c_bddb5945","updated":"2025-05-08 08:24:14.000000000","message":"In the meantime I realized that we already have  similar tool, testscenarios, but that is more in an unmaintained state (https://pypi.org/project/testscenarios/#description )","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e9d320785b0776c2ed9464e6c4813774d559847f","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.context \u003d self.system_reader_ctx"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class AdminTests(FirewallGroupAPITestCase):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def setUp(self):"},{"line_number":124,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ef3f88b_974cc6cd","line":121,"in_reply_to":"27bfac34_a0703283","updated":"2025-05-05 13:44:25.000000000","message":"we could do it that way, I was just doing stuff in the same \"explicit\" way like it is done in Neutron currently.","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a18dbe47fb262880ce931d213922a75e4f33c765","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.context \u003d self.system_reader_ctx"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class AdminTests(FirewallGroupAPITestCase):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def setUp(self):"},{"line_number":124,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"0836507c_bddb5945","line":121,"in_reply_to":"3ef3f88b_974cc6cd","updated":"2025-05-08 07:53:11.000000000","message":"I did a try with paramterized and quite useful for such cases like here for policies:\nhttps://review.opendev.org/c/openstack/neutron-vpnaas/+/948914/3/neutron_vpnaas/tests/unit/policies/test_endpoint_group.py\n\nBut it is currently not in global-reqs, so the check-requirements job is failing","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a37a7f9805ac69c81e580e08f5e6314b94e3af12","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.context \u003d self.system_reader_ctx"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class AdminTests(FirewallGroupAPITestCase):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def setUp(self):"},{"line_number":124,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"55f807fb_e05e001f","line":121,"in_reply_to":"5bf4ab75_694f4bef","updated":"2025-05-16 14:56:28.000000000","message":"+1","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"64bf2849f1f505e97077aded3867c76629084549","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.context \u003d self.system_reader_ctx"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class AdminTests(FirewallGroupAPITestCase):"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def setUp(self):"},{"line_number":124,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5bf4ab75_694f4bef","line":121,"in_reply_to":"ce4def12_5b667bea","updated":"2025-05-16 12:20:51.000000000","message":"I just checked and we would first need to add \"parametrized\" to the global requirements if we would like to use it. I would defer it for the follow up patch for now. Would that be ok for you?","commit_id":"e22fa08c10eae750681f6bff67dfe3c3157c74cd"}]}
