)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"010e8619d728b587a9ca7ca81711d1e9038f8003","unresolved":false,"context_lines":[{"line_number":10,"context_line":"is optional in API so it should be also optional on client\u0027s side."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie085b73fa885ff12f9ac080666cf3ca6a09b632a"},{"line_number":13,"context_line":"Related-Bug:#1770622"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_14619b05","line":13,"updated":"2018-05-14 09:14:56.000000000","message":"Task: 19658\nStory: 2002017","commit_id":"8a40aee03cda6893ccbe4409003ddad506199df3"}],"openstackclient/network/v2/network_qos_rule.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"a9dba30e2756911b6a1c98c32313670e30e774aa","unresolved":false,"context_lines":[{"line_number":33,"context_line":"OPTIONAL_PARAMETERS \u003d {"},{"line_number":34,"context_line":"    RULE_TYPE_MINIMUM_BANDWIDTH: set(),"},{"line_number":35,"context_line":"    RULE_TYPE_DSCP_MARKING: set(),"},{"line_number":36,"context_line":"    RULE_TYPE_BANDWIDTH_LIMIT: {\u0027max_burst_kbps\u0027, \u0027direction\u0027}}"},{"line_number":37,"context_line":"DIRECTION_EGRESS \u003d \u0027egress\u0027"},{"line_number":38,"context_line":"DIRECTION_INGRESS \u003d \u0027ingress\u0027"},{"line_number":39,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_68eb1977","line":36,"updated":"2018-05-16 08:52:04.000000000","message":"I know it is only a set, but I\u0027d still prefer to keep the list ordered alphabetically.","commit_id":"1cb0c21a8def6a993fd06a38123b59ae6297e552"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3da297828016dbb851f97b0327e5fd859e29cab2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"OPTIONAL_PARAMETERS \u003d {"},{"line_number":34,"context_line":"    RULE_TYPE_MINIMUM_BANDWIDTH: set(),"},{"line_number":35,"context_line":"    RULE_TYPE_DSCP_MARKING: set(),"},{"line_number":36,"context_line":"    RULE_TYPE_BANDWIDTH_LIMIT: {\u0027max_burst_kbps\u0027, \u0027direction\u0027}}"},{"line_number":37,"context_line":"DIRECTION_EGRESS \u003d \u0027egress\u0027"},{"line_number":38,"context_line":"DIRECTION_INGRESS \u003d \u0027ingress\u0027"},{"line_number":39,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_53acd29d","line":36,"in_reply_to":"5f7c97a3_68eb1977","updated":"2018-05-16 09:48:44.000000000","message":"Done","commit_id":"1cb0c21a8def6a993fd06a38123b59ae6297e552"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"020c3e54c1e0bacfda4845a7534823ce737b3bf9","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    notreq_params -\u003d type_params"},{"line_number":63,"context_line":"    if is_create and None in map(attrs.get, req_params):"},{"line_number":64,"context_line":"        msg \u003d (_(\u0027\"Create\" rule command for type \"%(rule_type)s\" requires \u0027"},{"line_number":65,"context_line":"                 \u0027argument %(args)s\u0027) %"},{"line_number":66,"context_line":"               {\u0027rule_type\u0027: type, \u0027args\u0027: \", \".join(sorted(req_params))})"},{"line_number":67,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":68,"context_line":"    if set(attrs.keys()) \u0026 notreq_params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_bde6baaf","line":65,"updated":"2018-05-25 17:27:57.000000000","message":"In this location, where we do not know the number of arguments beforehand, actually sticking to the mixed version \"argument(s)\" might fit better.","commit_id":"4c8a7e6c78b810e9b9c3d72ff7aa12b4355aa616"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9ff81694b6b5c53d6dbb447e3b6396cc36d5b6cd","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    notreq_params -\u003d type_params"},{"line_number":63,"context_line":"    if is_create and None in map(attrs.get, req_params):"},{"line_number":64,"context_line":"        msg \u003d (_(\u0027\"Create\" rule command for type \"%(rule_type)s\" requires \u0027"},{"line_number":65,"context_line":"                 \u0027argument %(args)s\u0027) %"},{"line_number":66,"context_line":"               {\u0027rule_type\u0027: type, \u0027args\u0027: \", \".join(sorted(req_params))})"},{"line_number":67,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":68,"context_line":"    if set(attrs.keys()) \u0026 notreq_params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_33e3bb36","line":65,"in_reply_to":"5f7c97a3_bde6baaf","updated":"2018-05-25 19:55:08.000000000","message":"But for different rules it might be different number of parameters. I will change it to plural with \":\" everywhere - It should works better for both cases","commit_id":"4c8a7e6c78b810e9b9c3d72ff7aa12b4355aa616"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"020c3e54c1e0bacfda4845a7534823ce737b3bf9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"               {\u0027rule_type\u0027: type, \u0027args\u0027: \", \".join(sorted(req_params))})"},{"line_number":67,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":68,"context_line":"    if set(attrs.keys()) \u0026 notreq_params:"},{"line_number":69,"context_line":"        msg \u003d (_(\u0027Rule type \"%(rule_type)s\" only requires arguments %(args)s\u0027)"},{"line_number":70,"context_line":"               % {\u0027rule_type\u0027: type, \u0027args\u0027: \", \".join(sorted(type_params))})"},{"line_number":71,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_7d04a24a","line":69,"updated":"2018-05-25 17:27:57.000000000","message":"Dito","commit_id":"4c8a7e6c78b810e9b9c3d72ff7aa12b4355aa616"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9ff81694b6b5c53d6dbb447e3b6396cc36d5b6cd","unresolved":false,"context_lines":[{"line_number":66,"context_line":"               {\u0027rule_type\u0027: type, \u0027args\u0027: \", \".join(sorted(req_params))})"},{"line_number":67,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":68,"context_line":"    if set(attrs.keys()) \u0026 notreq_params:"},{"line_number":69,"context_line":"        msg \u003d (_(\u0027Rule type \"%(rule_type)s\" only requires arguments %(args)s\u0027)"},{"line_number":70,"context_line":"               % {\u0027rule_type\u0027: type, \u0027args\u0027: \", \".join(sorted(type_params))})"},{"line_number":71,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_f3d2235c","line":69,"in_reply_to":"5f7c97a3_7d04a24a","updated":"2018-05-25 19:55:08.000000000","message":"same as above","commit_id":"4c8a7e6c78b810e9b9c3d72ff7aa12b4355aa616"}],"openstackclient/tests/functional/network/v2/test_network_qos_rule.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e2375fe605fabcf6ebab405052dc1c4e35ad00dc","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            \u0027network qos rule create -f json \u0027"},{"line_number":168,"context_line":"            \u0027--type bandwidth-limit \u0027"},{"line_number":169,"context_line":"            \u0027--max-kbps 10000 \u0027"},{"line_number":170,"context_line":"            \u0027--max-burst-kbits 1400 \u0027"},{"line_number":171,"context_line":"            \u0027--egress %s\u0027 %"},{"line_number":172,"context_line":"            self.QOS_POLICY_NAME"},{"line_number":173,"context_line":"        ))"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_0ca51547","side":"PARENT","line":170,"updated":"2018-05-30 03:50:26.000000000","message":"question: Do we need to drop this? --max-burst-kbits is optional so I think this is still valid. Do you think it is better to have only mandatory options here? If so, I am fine with it.","commit_id":"f7e4d31820e797e0d374e7dfde1142373245ea87"}],"openstackclient/tests/unit/network/v2/test_network_qos_rule.py":[{"author":{"_account_id":10338,"name":"Daniel Speichert","email":"daniel@speichert.pl","username":"daniel"},"change_message_id":"9421c17e2326567a3e0c0b7da2b57619a0a066f0","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":310,"context_line":"        except exceptions.CommandError as e:"},{"line_number":311,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"bandwidth-limit\" \u0027"},{"line_number":312,"context_line":"                   \u0027requires arguments max_kbps\u0027)"},{"line_number":313,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_e51f6269","line":312,"range":{"start_line":312,"start_character":29,"end_line":312,"end_character":38},"updated":"2018-05-15 16:14:24.000000000","message":"argument (singular)","commit_id":"dbe0dc75b6a9b311054056a41fe00ed13255c1b7"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"440ea9124081adf220a6d137004d4f1c60342ddc","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":310,"context_line":"        except exceptions.CommandError as e:"},{"line_number":311,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"bandwidth-limit\" \u0027"},{"line_number":312,"context_line":"                   \u0027requires arguments max_kbps\u0027)"},{"line_number":313,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_cb783591","line":312,"range":{"start_line":312,"start_character":29,"end_line":312,"end_character":38},"in_reply_to":"5f7c97a3_e51f6269","updated":"2018-05-15 17:01:59.000000000","message":"I changed it a bit but same message is used for different rule types and there can be more than one arguments for some of them. I hope it will be fine for You now :)","commit_id":"dbe0dc75b6a9b311054056a41fe00ed13255c1b7"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"a9dba30e2756911b6a1c98c32313670e30e774aa","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        arglist \u003d ["},{"line_number":267,"context_line":"            \u0027--type\u0027, RULE_TYPE_BANDWIDTH_LIMIT,"},{"line_number":268,"context_line":"            \u0027--max-kbps\u0027, str(self.new_rule.max_kbps),"},{"line_number":269,"context_line":"            \u0027--max-burst-kbits\u0027, str(self.new_rule.max_burst_kbits),"},{"line_number":270,"context_line":"            \u0027--egress\u0027,"},{"line_number":271,"context_line":"            self.new_rule.qos_policy_id,"},{"line_number":272,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e8a4094d","line":269,"updated":"2018-05-16 08:52:04.000000000","message":"How about adding a test that omits this option? Would work as a guard against regressing.","commit_id":"1cb0c21a8def6a993fd06a38123b59ae6297e552"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3da297828016dbb851f97b0327e5fd859e29cab2","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        arglist \u003d ["},{"line_number":267,"context_line":"            \u0027--type\u0027, RULE_TYPE_BANDWIDTH_LIMIT,"},{"line_number":268,"context_line":"            \u0027--max-kbps\u0027, str(self.new_rule.max_kbps),"},{"line_number":269,"context_line":"            \u0027--max-burst-kbits\u0027, str(self.new_rule.max_burst_kbits),"},{"line_number":270,"context_line":"            \u0027--egress\u0027,"},{"line_number":271,"context_line":"            self.new_rule.qos_policy_id,"},{"line_number":272,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_4ede653e","line":269,"in_reply_to":"5f7c97a3_e8a4094d","updated":"2018-05-16 09:48:44.000000000","message":"Done","commit_id":"1cb0c21a8def6a993fd06a38123b59ae6297e552"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"640b14bd5a83adc42adde0aedcd1caad7f4cdc4c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":214,"context_line":"        except exceptions.CommandError as e:"},{"line_number":215,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"dscp-marking\" \u0027"},{"line_number":216,"context_line":"                   \u0027requires argument(s) dscp_mark\u0027)"},{"line_number":217,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_0e0b8d29","line":216,"range":{"start_line":216,"start_character":37,"end_line":216,"end_character":40},"updated":"2018-05-16 10:18:17.000000000","message":"don\u0027t think (s) is required here","commit_id":"3580d18e4d2e549b7266b75bb37b139540f8dc9c"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"e0e242e4e9288fb40d4c36db429aca0bbf92d474","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":214,"context_line":"        except exceptions.CommandError as e:"},{"line_number":215,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"dscp-marking\" \u0027"},{"line_number":216,"context_line":"                   \u0027requires argument(s) dscp_mark\u0027)"},{"line_number":217,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_e305f015","line":216,"range":{"start_line":216,"start_character":37,"end_line":216,"end_character":40},"in_reply_to":"5f7c97a3_0e0b8d29","updated":"2018-05-17 11:58:02.000000000","message":"IMHO using the same form everywhere for consistency is a valid solution. Using only singular here and below, as well as keeping the original plural form above would be fine, too.","commit_id":"3580d18e4d2e549b7266b75bb37b139540f8dc9c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8df2a896b6e60db4c0e9a55a120e2f0fb3966081","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":214,"context_line":"        except exceptions.CommandError as e:"},{"line_number":215,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"dscp-marking\" \u0027"},{"line_number":216,"context_line":"                   \u0027requires argument(s) dscp_mark\u0027)"},{"line_number":217,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_5bbca9ba","line":216,"range":{"start_line":216,"start_character":37,"end_line":216,"end_character":40},"in_reply_to":"5f7c97a3_e305f015","updated":"2018-05-18 20:17:24.000000000","message":"changed to singular","commit_id":"3580d18e4d2e549b7266b75bb37b139540f8dc9c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"640b14bd5a83adc42adde0aedcd1caad7f4cdc4c","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":353,"context_line":"        except exceptions.CommandError as e:"},{"line_number":354,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"bandwidth-limit\" \u0027"},{"line_number":355,"context_line":"                   \u0027requires argument(s) max_kbps\u0027)"},{"line_number":356,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_8e1f9d6a","line":355,"range":{"start_line":355,"start_character":37,"end_line":355,"end_character":40},"updated":"2018-05-16 10:18:17.000000000","message":"ditto","commit_id":"3580d18e4d2e549b7266b75bb37b139540f8dc9c"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"020c3e54c1e0bacfda4845a7534823ce737b3bf9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":128,"context_line":"        except exceptions.CommandError as e:"},{"line_number":129,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"minimum-bandwidth\" \u0027"},{"line_number":130,"context_line":"                   \u0027requires argument direction, min_kbps\u0027)"},{"line_number":131,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_5dde86da","line":130,"updated":"2018-05-25 17:27:57.000000000","message":"Here you really have two arguments, so using \"arguments\" would fit better.","commit_id":"4c8a7e6c78b810e9b9c3d72ff7aa12b4355aa616"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9ff81694b6b5c53d6dbb447e3b6396cc36d5b6cd","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            self.cmd.take_action(parsed_args)"},{"line_number":128,"context_line":"        except exceptions.CommandError as e:"},{"line_number":129,"context_line":"            msg \u003d (\u0027\"Create\" rule command for type \"minimum-bandwidth\" \u0027"},{"line_number":130,"context_line":"                   \u0027requires argument direction, min_kbps\u0027)"},{"line_number":131,"context_line":"            self.assertEqual(msg, str(e))"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_33bc1b05","line":130,"in_reply_to":"5f7c97a3_5dde86da","updated":"2018-05-25 19:55:08.000000000","message":"yes, but message is \"generic\" for each of rule types and for various number of arguments in each of them","commit_id":"4c8a7e6c78b810e9b9c3d72ff7aa12b4355aa616"}]}
