)]}'
{"openstackclient/network/v2/security_group.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f1c41bea4c66b8d495d93ec7e429564ff3ec00d8","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            help\u003d_(\"Security group is stateful\")"},{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \"--no-stateful\","},{"line_number":130,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":131,"context_line":"            help\u003d_(\"Security group is stateless\")"},{"line_number":132,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_37114553","line":129,"updated":"2020-03-06 02:33:49.000000000","message":"To me, this is a strange name for an option, I\u0027m guessing it\u0027s to make it store the value in \u0027stateful\u0027?  \u0027stateless\u0027 seems a better name.","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"270569aa28b7f88986f6285b76e16ed41dfe350f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            help\u003d_(\"Security group is stateful\")"},{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \"--no-stateful\","},{"line_number":130,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":131,"context_line":"            help\u003d_(\"Security group is stateless\")"},{"line_number":132,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_a124125f","line":129,"in_reply_to":"1fa4df85_37114553","updated":"2020-03-06 10:31:52.000000000","message":"Agree","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f1c41bea4c66b8d495d93ec7e429564ff3ec00d8","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \"--no-stateful\","},{"line_number":130,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":131,"context_line":"            help\u003d_(\"Security group is stateless\")"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":"        identity_common.add_project_domain_option_to_parser("}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_f7164d49","line":130,"updated":"2020-03-06 02:33:49.000000000","message":"Should be store_false right?","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"270569aa28b7f88986f6285b76e16ed41dfe350f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \"--no-stateful\","},{"line_number":130,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":131,"context_line":"            help\u003d_(\"Security group is stateless\")"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":"        identity_common.add_project_domain_option_to_parser("}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_012ac62a","line":130,"in_reply_to":"1fa4df85_f7164d49","updated":"2020-03-06 10:31:52.000000000","message":"Thanks","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f1c41bea4c66b8d495d93ec7e429564ff3ec00d8","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        attrs \u003d {}"},{"line_number":149,"context_line":"        attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":150,"context_line":"        attrs[\u0027description\u0027] \u003d self._get_description(parsed_args)"},{"line_number":151,"context_line":"        if parsed_args.stateful or parsed_args.no_stateful:"},{"line_number":152,"context_line":"            attrs[\u0027stateful\u0027] \u003d parsed_args.stateful"},{"line_number":153,"context_line":"        if parsed_args.project is not None:"},{"line_number":154,"context_line":"            identity_client \u003d self.app.client_manager.identity"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_b72e958f","line":151,"updated":"2020-03-06 02:33:49.000000000","message":"Do these have to be \u0027is not None\u0027 like the others?","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"270569aa28b7f88986f6285b76e16ed41dfe350f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        attrs \u003d {}"},{"line_number":149,"context_line":"        attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":150,"context_line":"        attrs[\u0027description\u0027] \u003d self._get_description(parsed_args)"},{"line_number":151,"context_line":"        if parsed_args.stateful or parsed_args.no_stateful:"},{"line_number":152,"context_line":"            attrs[\u0027stateful\u0027] \u003d parsed_args.stateful"},{"line_number":153,"context_line":"        if parsed_args.project is not None:"},{"line_number":154,"context_line":"            identity_client \u003d self.app.client_manager.identity"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_611a9a17","line":151,"in_reply_to":"1fa4df85_b72e958f","updated":"2020-03-06 10:31:52.000000000","message":"I changed it now","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3ad1953f61a142ceb94815342f2c28074d78be7a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            \"--stateful\","},{"line_number":125,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":126,"context_line":"            default\u003dNone,"},{"line_number":127,"context_line":"            help\u003d_(\"Security group is stateful\")"},{"line_number":128,"context_line":"        )"},{"line_number":129,"context_line":"        parser.add_argument("},{"line_number":130,"context_line":"            \"--stateless\","}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_5479092d","line":127,"updated":"2020-03-27 10:38:57.000000000","message":"Could you please add that this is the default behaviour?\nI understand that it is default at API level, but for the user it\u0027s helpful","commit_id":"4b50a1ca925ac4ebf53b012ec9b8220ece36cac3"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3ad1953f61a142ceb94815342f2c28074d78be7a","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            \"--stateful\","},{"line_number":333,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":334,"context_line":"            default\u003dNone,"},{"line_number":335,"context_line":"            help\u003d_(\"Security group is stateful\")"},{"line_number":336,"context_line":"        )"},{"line_number":337,"context_line":"        parser.add_argument("},{"line_number":338,"context_line":"            \"--stateless\","}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_b478552a","line":335,"updated":"2020-03-27 10:38:57.000000000","message":"ditto.","commit_id":"4b50a1ca925ac4ebf53b012ec9b8220ece36cac3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"00023998aa310540d4a56bcadbbf01608a3cbf06","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        parser.add_argument("},{"line_number":124,"context_line":"            \"--stateful\","},{"line_number":125,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":126,"context_line":"            default\u003dNone,"},{"line_number":127,"context_line":"            help\u003d_(\"Security group is stateful (Default)\")"},{"line_number":128,"context_line":"        )"},{"line_number":129,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_8dcead2a","line":126,"updated":"2020-03-31 03:06:10.000000000","message":"in OSC code, we usually do not share \u0027dest\u0027.\nHow about the following?\n\n  parser.add_argument(\n     \u0027-stateful\u0027,\n     action\u003d\u0027store_true\u0027,\n     help\u003d...),\n  parser.add_argument(\n     \u0027-stateless\u0027,\n     action\u003d\u0027store_true\u0027,\n     help\u003d...),\n\nand\n\n  if parsed_args.stateless:\n      attrs[\u0027stateful\u0027] \u003d False\n  if parsed_args.stateful:\n      attrs[\u0027stateful\u0027] \u003d True\n\nA good example is found at https://opendev.org/openstack/python-openstackclient/src/branch/master/openstackclient/network/v2/network.py#L206-L217","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"84159ec2a1229880dc32da29f1014d4e81958bc5","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        parser.add_argument("},{"line_number":124,"context_line":"            \"--stateful\","},{"line_number":125,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":126,"context_line":"            default\u003dNone,"},{"line_number":127,"context_line":"            help\u003d_(\"Security group is stateful (Default)\")"},{"line_number":128,"context_line":"        )"},{"line_number":129,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_22ee88ec","line":126,"in_reply_to":"df33271e_8dcead2a","updated":"2020-03-31 10:06:33.000000000","message":"Done","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"00023998aa310540d4a56bcadbbf01608a3cbf06","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":133,"context_line":"            default\u003dNone,"},{"line_number":134,"context_line":"            help\u003d_(\"Security group is stateless\")"},{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":"        identity_common.add_project_domain_option_to_parser("},{"line_number":137,"context_line":"            parser, enhance_help\u003dself.enhance_help_neutron)"},{"line_number":138,"context_line":"        _tag.add_tag_option_to_parser_for_create("}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_4d15c59b","line":135,"updated":"2020-03-31 03:06:10.000000000","message":"These two options are mutually exclusive. Could you create a exclusive group using parser.add_mutually_exclusive_group() and add these options to the exclusive group?","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"84159ec2a1229880dc32da29f1014d4e81958bc5","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            action\u003d\u0027store_false\u0027,"},{"line_number":133,"context_line":"            default\u003dNone,"},{"line_number":134,"context_line":"            help\u003d_(\"Security group is stateless\")"},{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":"        identity_common.add_project_domain_option_to_parser("},{"line_number":137,"context_line":"            parser, enhance_help\u003dself.enhance_help_neutron)"},{"line_number":138,"context_line":"        _tag.add_tag_option_to_parser_for_create("}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_02eb84db","line":135,"in_reply_to":"df33271e_4d15c59b","updated":"2020-03-31 10:06:33.000000000","message":"Done","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"}],"openstackclient/tests/functional/network/v2/test_security_group.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f1c41bea4c66b8d495d93ec7e429564ff3ec00d8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def test_security_group_set(self):"},{"line_number":43,"context_line":"        other_name \u003d uuid.uuid4().hex"},{"line_number":44,"context_line":"        raw_output \u003d self.openstack("},{"line_number":45,"context_line":"            \u0027security group set --description NSA --no-stateless --name \u0027 +"},{"line_number":46,"context_line":"            other_name + \u0027 \u0027 + self.NAME"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        self.assertEqual(\u0027\u0027, raw_output)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_571f215a","line":45,"range":{"start_line":45,"start_character":52,"end_line":45,"end_character":64},"updated":"2020-03-06 02:33:49.000000000","message":"no-stateless isn\u0027t valid","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"270569aa28b7f88986f6285b76e16ed41dfe350f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def test_security_group_set(self):"},{"line_number":43,"context_line":"        other_name \u003d uuid.uuid4().hex"},{"line_number":44,"context_line":"        raw_output \u003d self.openstack("},{"line_number":45,"context_line":"            \u0027security group set --description NSA --no-stateless --name \u0027 +"},{"line_number":46,"context_line":"            other_name + \u0027 \u0027 + self.NAME"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        self.assertEqual(\u0027\u0027, raw_output)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_e1b44af4","line":45,"range":{"start_line":45,"start_character":52,"end_line":45,"end_character":64},"in_reply_to":"1fa4df85_571f215a","updated":"2020-03-06 10:31:52.000000000","message":"Thanks for catching, don\u0027t know what I was thinking","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f1c41bea4c66b8d495d93ec7e429564ff3ec00d8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        cmd_output \u003d json.loads(self.openstack("},{"line_number":51,"context_line":"            \u0027security group show -f json \u0027 + other_name))"},{"line_number":52,"context_line":"        self.assertEqual(\u0027NSA\u0027, cmd_output[\u0027description\u0027])"},{"line_number":53,"context_line":"        self.assertEqual(\u0027False\u0027, cmd_output[\u0027stateful\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_security_group_show(self):"},{"line_number":56,"context_line":"        cmd_output \u003d json.loads(self.openstack("}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_173d29c3","line":53,"updated":"2020-03-06 02:33:49.000000000","message":"Don\u0027t think False needs the \u0027\u0027","commit_id":"02c7106b9ad39f6bd4b4646f7ec51481ff9b2acb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"00023998aa310540d4a56bcadbbf01608a3cbf06","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        cmd_output \u003d json.loads(self.openstack("},{"line_number":51,"context_line":"            \u0027security group show -f json \u0027 + other_name))"},{"line_number":52,"context_line":"        self.assertEqual(\u0027NSA\u0027, cmd_output[\u0027description\u0027])"},{"line_number":53,"context_line":"        self.assertEqual(False, cmd_output[\u0027stateful\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_security_group_show(self):"},{"line_number":56,"context_line":"        cmd_output \u003d json.loads(self.openstack("}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_2df68164","line":53,"updated":"2020-03-31 03:06:10.000000000","message":"assertFalse?","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"84159ec2a1229880dc32da29f1014d4e81958bc5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        cmd_output \u003d json.loads(self.openstack("},{"line_number":51,"context_line":"            \u0027security group show -f json \u0027 + other_name))"},{"line_number":52,"context_line":"        self.assertEqual(\u0027NSA\u0027, cmd_output[\u0027description\u0027])"},{"line_number":53,"context_line":"        self.assertEqual(False, cmd_output[\u0027stateful\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_security_group_show(self):"},{"line_number":56,"context_line":"        cmd_output \u003d json.loads(self.openstack("}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_62bd30d7","line":53,"in_reply_to":"df33271e_2df68164","updated":"2020-03-31 10:06:33.000000000","message":"Done","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"00023998aa310540d4a56bcadbbf01608a3cbf06","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        cmd_output \u003d json.loads(self.openstack("},{"line_number":57,"context_line":"            \u0027security group show -f json \u0027 + self.NAME))"},{"line_number":58,"context_line":"        self.assertEqual(self.NAME, cmd_output[\u0027name\u0027])"},{"line_number":59,"context_line":"        self.assertEqual(True, cmd_output[\u0027stateful\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_8de7cdac","line":59,"updated":"2020-03-31 03:06:10.000000000","message":"assertTrue?","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"84159ec2a1229880dc32da29f1014d4e81958bc5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        cmd_output \u003d json.loads(self.openstack("},{"line_number":57,"context_line":"            \u0027security group show -f json \u0027 + self.NAME))"},{"line_number":58,"context_line":"        self.assertEqual(self.NAME, cmd_output[\u0027name\u0027])"},{"line_number":59,"context_line":"        self.assertEqual(True, cmd_output[\u0027stateful\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_42c2ac5a","line":59,"in_reply_to":"df33271e_8de7cdac","updated":"2020-03-31 10:06:33.000000000","message":"Done","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"}],"releasenotes/notes/stateful-security-group-a21fa8498e866b90.yaml":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"00023998aa310540d4a56bcadbbf01608a3cbf06","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add ``--stateful`` and ``--stateless`` option to the"},{"line_number":5,"context_line":"    ``securitygroup`` commands to support stateful and"},{"line_number":6,"context_line":"    stateless security groups."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df33271e_2d9b2118","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":30},"updated":"2020-03-31 03:06:10.000000000","message":"It is nice to use the accurate command names.\n\n  ``security group create`` and ``security group set``","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"},{"author":{"_account_id":26106,"name":"Tom Stappaerts","email":"tom.stappaerts@nokia.com","username":"TomStappaerts"},"change_message_id":"84159ec2a1229880dc32da29f1014d4e81958bc5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add ``--stateful`` and ``--stateless`` option to the"},{"line_number":5,"context_line":"    ``securitygroup`` commands to support stateful and"},{"line_number":6,"context_line":"    stateless security groups."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df33271e_a2b3b809","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":30},"in_reply_to":"df33271e_2d9b2118","updated":"2020-03-31 10:06:33.000000000","message":"Done","commit_id":"cf122a093c99d24b24be8eb93eb417bde296b610"}]}
