)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86e54ee9906636c5550a1de60e8cca27f8ef51b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3822293a_1878ebee","updated":"2026-06-09 15:27:15.000000000","message":"Soft -1 for the unrelated changes","commit_id":"e1f4baba1744dc62a1f5b568e1af2efaf9736cae"}],"openstackclient/network/v2/router.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86e54ee9906636c5550a1de60e8cca27f8ef51b8","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"EVPN_VNI_AUTO \u003d \u0027auto\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AdminStateColumn(cliff_columns.FormattableColumn[bool]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ce58454_1a77ba89","line":40,"updated":"2026-06-09 15:27:15.000000000","message":"I know magic numbers are generally bad, but this is probably trivial enough to inline?","commit_id":"e1f4baba1744dc62a1f5b568e1af2efaf9736cae"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0fed54bc1d9f4ac0bfc066b5cac4bec018f975b2","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"EVPN_VNI_AUTO \u003d \u0027auto\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AdminStateColumn(cliff_columns.FormattableColumn[bool]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"240d5568_d642a7c4","line":40,"in_reply_to":"1ce58454_1a77ba89","updated":"2026-06-09 15:32:34.000000000","message":"Is there a drawback of using a constant? It is used on multiple places. Up to you, I\u0027d be in favor of a constant - whatever word or object that is.","commit_id":"e1f4baba1744dc62a1f5b568e1af2efaf9736cae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7d9e56c37a2470df9c483dc493560356983d11d","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"EVPN_VNI_AUTO \u003d \u0027auto\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AdminStateColumn(cliff_columns.FormattableColumn[bool]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"6e11b3d6_fb8e70a7","line":40,"in_reply_to":"240d5568_d642a7c4","updated":"2026-06-09 16:34:26.000000000","message":"I\u0027d probably just hard code, personally. `auto` is not that magical, and we have a couple of other cases where we use that token here (flavors is one, iirc). However, I think we can do one better based on some of those. See below.","commit_id":"e1f4baba1744dc62a1f5b568e1af2efaf9736cae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7d9e56c37a2470df9c483dc493560356983d11d","unresolved":true,"context_lines":[{"line_number":635,"context_line":"            \u0027--qos-policy\u0027,"},{"line_number":636,"context_line":"            metavar\u003d\u0027\u003cqos-policy\u003e\u0027,"},{"line_number":637,"context_line":"            help\u003d_(\u0027Attach QoS policy to router gateway IPs\u0027),"},{"line_number":638,"context_line":"        )"},{"line_number":639,"context_line":"        parser.add_argument("},{"line_number":640,"context_line":"            \u0027--evpn-vni\u0027,"},{"line_number":641,"context_line":"            metavar\u003d\u0027\u003cvni\u003e\u0027,"},{"line_number":642,"context_line":"            default\u003dNone,"},{"line_number":643,"context_line":"            type\u003d_parse_evpn_vni,"},{"line_number":644,"context_line":"            dest\u003d\u0027evpn_vni\u0027,"},{"line_number":645,"context_line":"            help\u003d_("},{"line_number":646,"context_line":"                \"Associate the router with an EVPN identified by a VNI. \""},{"line_number":647,"context_line":"                \"Use \u0027%s\u0027 to have Neutron auto-assign a VNI, or \""},{"line_number":648,"context_line":"                \"specify an integer value for an explicit VNI.\""},{"line_number":649,"context_line":"            )"},{"line_number":650,"context_line":"            % EVPN_VNI_AUTO,"},{"line_number":651,"context_line":"        )"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        return parser"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"    def take_action("}],"source_content_type":"text/x-python","patch_set":4,"id":"28b7c3cb_06d0fa72","line":652,"range":{"start_line":638,"start_character":9,"end_line":652,"end_character":1},"updated":"2026-06-09 16:34:26.000000000","message":"```suggestion\n        )\n        evpn_group \u003d parser.add_mutually_exclusive_group()\n        evpn_group.add_argument(\n            \u0027--evpn-vni\u0027,\n            metavar\u003d\u0027\u003cvni\u003e\u0027,\n            default\u003dNone,\n            type\u003d_parse_evpn_vni,\n            dest\u003d\u0027evpn_vni\u0027,\n            help\u003d_(\n                \"Associate the router with an EVPN identified by a VNI.\"\n            ),\n        )\n        evpn_group.add_argument(\n            \u0027--auto-evpn-vni\u0027,\n            action\u003d\u0027store_const\u0027,\n            dest\u003d\u0027evpn_vni\u0027,\n            const\u003d\u0027auto\u0027,\n            help\u003d_(\n                \"Associate the router with an EVPN using an auto-assigned \"\n                \"VNI.\"\n            ),\n        )\n```\n\nHappy to wordsmith the option name.","commit_id":"dacc2b29b6589004b8a5c9112f5327550350f48e"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"11ff246bb02a4a3a5e9db96df97d777152957d10","unresolved":true,"context_lines":[{"line_number":635,"context_line":"            \u0027--qos-policy\u0027,"},{"line_number":636,"context_line":"            metavar\u003d\u0027\u003cqos-policy\u003e\u0027,"},{"line_number":637,"context_line":"            help\u003d_(\u0027Attach QoS policy to router gateway IPs\u0027),"},{"line_number":638,"context_line":"        )"},{"line_number":639,"context_line":"        parser.add_argument("},{"line_number":640,"context_line":"            \u0027--evpn-vni\u0027,"},{"line_number":641,"context_line":"            metavar\u003d\u0027\u003cvni\u003e\u0027,"},{"line_number":642,"context_line":"            default\u003dNone,"},{"line_number":643,"context_line":"            type\u003d_parse_evpn_vni,"},{"line_number":644,"context_line":"            dest\u003d\u0027evpn_vni\u0027,"},{"line_number":645,"context_line":"            help\u003d_("},{"line_number":646,"context_line":"                \"Associate the router with an EVPN identified by a VNI. \""},{"line_number":647,"context_line":"                \"Use \u0027%s\u0027 to have Neutron auto-assign a VNI, or \""},{"line_number":648,"context_line":"                \"specify an integer value for an explicit VNI.\""},{"line_number":649,"context_line":"            )"},{"line_number":650,"context_line":"            % EVPN_VNI_AUTO,"},{"line_number":651,"context_line":"        )"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        return parser"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"    def take_action("}],"source_content_type":"text/x-python","patch_set":4,"id":"e91a7f34_6854f7c6","line":652,"range":{"start_line":638,"start_character":9,"end_line":652,"end_character":1},"in_reply_to":"28b7c3cb_06d0fa72","updated":"2026-06-10 14:53:15.000000000","message":"Will do, I think that makes it more type oriented, thanks for the suggestion.","commit_id":"dacc2b29b6589004b8a5c9112f5327550350f48e"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"95d99c565b16e5ef14f00490e9fc3161ea39d0d3","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            \u0027--qos-policy\u0027,"},{"line_number":636,"context_line":"            metavar\u003d\u0027\u003cqos-policy\u003e\u0027,"},{"line_number":637,"context_line":"            help\u003d_(\u0027Attach QoS policy to router gateway IPs\u0027),"},{"line_number":638,"context_line":"        )"},{"line_number":639,"context_line":"        parser.add_argument("},{"line_number":640,"context_line":"            \u0027--evpn-vni\u0027,"},{"line_number":641,"context_line":"            metavar\u003d\u0027\u003cvni\u003e\u0027,"},{"line_number":642,"context_line":"            default\u003dNone,"},{"line_number":643,"context_line":"            type\u003d_parse_evpn_vni,"},{"line_number":644,"context_line":"            dest\u003d\u0027evpn_vni\u0027,"},{"line_number":645,"context_line":"            help\u003d_("},{"line_number":646,"context_line":"                \"Associate the router with an EVPN identified by a VNI. \""},{"line_number":647,"context_line":"                \"Use \u0027%s\u0027 to have Neutron auto-assign a VNI, or \""},{"line_number":648,"context_line":"                \"specify an integer value for an explicit VNI.\""},{"line_number":649,"context_line":"            )"},{"line_number":650,"context_line":"            % EVPN_VNI_AUTO,"},{"line_number":651,"context_line":"        )"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        return parser"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"    def take_action("}],"source_content_type":"text/x-python","patch_set":4,"id":"49d49fb8_ffa63869","line":652,"range":{"start_line":638,"start_character":9,"end_line":652,"end_character":1},"in_reply_to":"e91a7f34_6854f7c6","updated":"2026-06-10 15:30:27.000000000","message":"Done","commit_id":"dacc2b29b6589004b8a5c9112f5327550350f48e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6a91578fd21bdd275d3537e8d741afe42c51c3f9","unresolved":true,"context_lines":[{"line_number":280,"context_line":"            _(\"\u0027%(value)s\u0027 is not a valid VNI (use a positive integer)\")"},{"line_number":281,"context_line":"            % {\u0027value\u0027: value}"},{"line_number":282,"context_line":"        )"},{"line_number":283,"context_line":"    if vni \u003c\u003d 0:"},{"line_number":284,"context_line":"        raise argparse.ArgumentTypeError(_(\"VNI must be a positive integer\"))"},{"line_number":285,"context_line":"    return vni"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"68cb2da2_67aad221","line":283,"updated":"2026-06-10 15:35:40.000000000","message":"nit: Should this be \n\n```suggestion\n    if vni \u003c\u003d 1:\n```\n\nsince `0` means `auto`?","commit_id":"6126609303f1a1de6405788272d779d069803007"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0cfd7141e2a5dbea7052ee5b1bd3bc72593076a0","unresolved":true,"context_lines":[{"line_number":280,"context_line":"            _(\"\u0027%(value)s\u0027 is not a valid VNI (use a positive integer)\")"},{"line_number":281,"context_line":"            % {\u0027value\u0027: value}"},{"line_number":282,"context_line":"        )"},{"line_number":283,"context_line":"    if vni \u003c\u003d 0:"},{"line_number":284,"context_line":"        raise argparse.ArgumentTypeError(_(\"VNI must be a positive integer\"))"},{"line_number":285,"context_line":"    return vni"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7b4a6545_41d182cb","line":283,"in_reply_to":"68cb2da2_67aad221","updated":"2026-06-10 15:40:02.000000000","message":"I\u0027d say for auto allocation the `--auto-evpn-vni` should be used. The 0 means autoallocation in the REST API body request but for the user I think it may give wrong UX that router has VNI set to 0 - which it will not.","commit_id":"6126609303f1a1de6405788272d779d069803007"}],"openstackclient/tests/unit/network/v2/test_router.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86e54ee9906636c5550a1de60e8cca27f8ef51b8","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        ]"},{"line_number":271,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        _columns, _data \u003d self.cmd.take_action(parsed_args)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        self.network_client.create_router.assert_called_once_with("},{"line_number":276,"context_line":"            **{"}],"source_content_type":"text/x-python","patch_set":3,"id":"9d1ec7d4_d36426e6","line":273,"updated":"2026-06-09 15:27:15.000000000","message":"unrelated?","commit_id":"e1f4baba1744dc62a1f5b568e1af2efaf9736cae"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"3ed59c9514cb246f13e2de50996ddd64b81b95d2","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        ]"},{"line_number":271,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        _columns, _data \u003d self.cmd.take_action(parsed_args)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        self.network_client.create_router.assert_called_once_with("},{"line_number":276,"context_line":"            **{"}],"source_content_type":"text/x-python","patch_set":3,"id":"73cedc60_481e72eb","line":273,"in_reply_to":"78082960_81569f0c","updated":"2026-06-09 15:33:05.000000000","message":"Done","commit_id":"e1f4baba1744dc62a1f5b568e1af2efaf9736cae"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0fed54bc1d9f4ac0bfc066b5cac4bec018f975b2","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        ]"},{"line_number":271,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        _columns, _data \u003d self.cmd.take_action(parsed_args)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        self.network_client.create_router.assert_called_once_with("},{"line_number":276,"context_line":"            **{"}],"source_content_type":"text/x-python","patch_set":3,"id":"78082960_81569f0c","line":273,"in_reply_to":"9d1ec7d4_d36426e6","updated":"2026-06-09 15:32:34.000000000","message":"I thought this was the pep8 failure but it was not.","commit_id":"e1f4baba1744dc62a1f5b568e1af2efaf9736cae"}]}
