)]}'
{"openstackclient/network/common.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1c5e72dd65348a5061176da6f1c4a1829f8c3fc9","unresolved":true,"context_lines":[{"line_number":289,"context_line":"                      name\u003d_property[\u0027name\u0027]))"},{"line_number":290,"context_line":"        return converter"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def _parse_extra_properties(self, extra_properties):"},{"line_number":293,"context_line":"        result \u003d {}"},{"line_number":294,"context_line":"        for _property in extra_properties:"},{"line_number":295,"context_line":"            converter \u003d self._get_property_converter(_property)"},{"line_number":296,"context_line":"            result[_property[\u0027name\u0027]] \u003d converter(_property[\u0027value\u0027])"},{"line_number":297,"context_line":"        return result"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2093eae7_94fa6f8b","line":297,"range":{"start_line":292,"start_character":4,"end_line":297,"end_character":21},"updated":"2021-04-16 09:45:18.000000000","message":"For openstack --debug port create --network private port0 I got this:\nFile \"/opt/stack/python-openstackclient/openstackclient/network/common.py\", line 294, in _parse_extra_properties\n    for _property in extra_properties:\nTypeError: \u0027NoneType\u0027 object is not iterable","commit_id":"e5000657f1c654d09fa193899d15bb00ca7510ad"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6afb7e3647495c5ae0b7ddd1ff42d2019b0b5462","unresolved":true,"context_lines":[{"line_number":289,"context_line":"                      name\u003d_property[\u0027name\u0027]))"},{"line_number":290,"context_line":"        return converter"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def _parse_extra_properties(self, extra_properties):"},{"line_number":293,"context_line":"        result \u003d {}"},{"line_number":294,"context_line":"        for _property in extra_properties:"},{"line_number":295,"context_line":"            converter \u003d self._get_property_converter(_property)"},{"line_number":296,"context_line":"            result[_property[\u0027name\u0027]] \u003d converter(_property[\u0027value\u0027])"},{"line_number":297,"context_line":"        return result"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"735ff08d_0b9b1132","line":297,"range":{"start_line":292,"start_character":4,"end_line":297,"end_character":21},"in_reply_to":"2093eae7_94fa6f8b","updated":"2021-05-14 08:43:17.000000000","message":"fixed. thx","commit_id":"e5000657f1c654d09fa193899d15bb00ca7510ad"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1c5e72dd65348a5061176da6f1c4a1829f8c3fc9","unresolved":true,"context_lines":[{"line_number":296,"context_line":"            result[_property[\u0027name\u0027]] \u003d converter(_property[\u0027value\u0027])"},{"line_number":297,"context_line":"        return result"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":306,"context_line":"            required_keys\u003d[\u0027name\u0027, \u0027value\u0027],"},{"line_number":307,"context_line":"            optional_keys\u003d[\u0027type\u0027],"},{"line_number":308,"context_line":"            help\u003d_(\"Additional parameters can be passed using this property\")"},{"line_number":309,"context_line":"        )"},{"line_number":310,"context_line":"        return parser"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"class NeutronUnsetCommandWithExtraArgs(NeutronCommandWithExtraArgs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"c7c97abc_e5b34646","line":310,"range":{"start_line":299,"start_character":4,"end_line":310,"end_character":21},"updated":"2021-04-16 09:45:18.000000000","message":"I tried to use it like the help suggests:\n--extra_property type\u003d\u003cproperty_type\u003e,key\u003dval\n\nand got this:\nopenstack --debug port create --network private port0 --extra_property type\u003dtag,key\u003dapple\n....\nargparse.ArgumentTypeError: Invalid keys key specified.\nValid keys are: name, value, type\nclean_up CreatePort: Invalid keys key specified.\nValid keys are: name, value, type","commit_id":"e5000657f1c654d09fa193899d15bb00ca7510ad"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6afb7e3647495c5ae0b7ddd1ff42d2019b0b5462","unresolved":true,"context_lines":[{"line_number":296,"context_line":"            result[_property[\u0027name\u0027]] \u003d converter(_property[\u0027value\u0027])"},{"line_number":297,"context_line":"        return result"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":306,"context_line":"            required_keys\u003d[\u0027name\u0027, \u0027value\u0027],"},{"line_number":307,"context_line":"            optional_keys\u003d[\u0027type\u0027],"},{"line_number":308,"context_line":"            help\u003d_(\"Additional parameters can be passed using this property\")"},{"line_number":309,"context_line":"        )"},{"line_number":310,"context_line":"        return parser"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"class NeutronUnsetCommandWithExtraArgs(NeutronCommandWithExtraArgs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"a2911eac_9ecb519b","line":310,"range":{"start_line":299,"start_character":4,"end_line":310,"end_character":21},"in_reply_to":"c7c97abc_e5b34646","updated":"2021-05-14 08:43:17.000000000","message":"You should do command like:\n\nopenstack --debug port create --network private --extra_property name\u003dtest-attr,value\u003dabc test-port\n\nbecause \"key\" should be one of \"name\", \"value\" or \"type\".","commit_id":"e5000657f1c654d09fa193899d15bb00ca7510ad"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5aec51adc87fc6493cd337a013605bc175348422","unresolved":true,"context_lines":[{"line_number":275,"context_line":"    }"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _get_property_converter(self, _property):"},{"line_number":278,"context_line":"        if \u0027type\u0027 not in _property.keys():"},{"line_number":279,"context_line":"            converter \u003d str"},{"line_number":280,"context_line":"        else:"},{"line_number":281,"context_line":"            converter \u003d self._allowed_types_dict.get(_property[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"fe82ec4e_ac448528","line":278,"range":{"start_line":278,"start_character":8,"end_line":278,"end_character":42},"updated":"2021-05-18 15:04:34.000000000","message":"This can be:\n\n  if \u0027type\u0027 not in _property:","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    }"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _get_property_converter(self, _property):"},{"line_number":278,"context_line":"        if \u0027type\u0027 not in _property.keys():"},{"line_number":279,"context_line":"            converter \u003d str"},{"line_number":280,"context_line":"        else:"},{"line_number":281,"context_line":"            converter \u003d self._allowed_types_dict.get(_property[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"13058b6b_086b1c99","line":278,"range":{"start_line":278,"start_character":8,"end_line":278,"end_character":42},"in_reply_to":"fe82ec4e_ac448528","updated":"2021-05-24 08:46:55.000000000","message":"Done","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c17f444f4c0ab5e70074075305e44f26028adcde","unresolved":true,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        if not converter:"},{"line_number":284,"context_line":"            raise exceptions.CommandError("},{"line_number":285,"context_line":"                _(\"Type {property_type}: of property {name} \""},{"line_number":286,"context_line":"                  \"is not supported\").format("},{"line_number":287,"context_line":"                      property_type\u003d_property[\u0027type\u0027],"},{"line_number":288,"context_line":"                      name\u003d_property[\u0027name\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"e950eb83_0ecaacd4","line":285,"range":{"start_line":285,"start_character":39,"end_line":285,"end_character":40},"updated":"2021-05-18 14:46:25.000000000","message":"A colon looks unnecessary.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        if not converter:"},{"line_number":284,"context_line":"            raise exceptions.CommandError("},{"line_number":285,"context_line":"                _(\"Type {property_type}: of property {name} \""},{"line_number":286,"context_line":"                  \"is not supported\").format("},{"line_number":287,"context_line":"                      property_type\u003d_property[\u0027type\u0027],"},{"line_number":288,"context_line":"                      name\u003d_property[\u0027name\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"254187d0_38dbde37","line":285,"range":{"start_line":285,"start_character":39,"end_line":285,"end_character":40},"in_reply_to":"e950eb83_0ecaacd4","updated":"2021-05-24 08:46:55.000000000","message":"Done","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"5c4fcd9caf70d8106468bc57a437ab4172e2e065","unresolved":true,"context_lines":[{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"}],"source_content_type":"text/x-python","patch_set":3,"id":"b1ed90d4_3d6b5db8","line":302,"updated":"2021-05-18 09:35:28.000000000","message":"we should use dashes instead of underscores in parameters","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"}],"source_content_type":"text/x-python","patch_set":3,"id":"4aea731c_326e78c6","line":302,"in_reply_to":"aa9139e2_95fe15e9","updated":"2021-05-24 08:46:55.000000000","message":"Done","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"40cfa887eb68f6a777154434df2c822e80622986","unresolved":true,"context_lines":[{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dc1a91aa_e51a09b5","line":302,"in_reply_to":"b1ed90d4_3d6b5db8","updated":"2021-05-18 14:31:15.000000000","message":"+1","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c17f444f4c0ab5e70074075305e44f26028adcde","unresolved":true,"context_lines":[{"line_number":299,"context_line":"    def get_parser(self, prog_name):"},{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"}],"source_content_type":"text/x-python","patch_set":3,"id":"aa9139e2_95fe15e9","line":302,"in_reply_to":"b1ed90d4_3d6b5db8","updated":"2021-05-18 14:46:25.000000000","message":"+1. Let\u0027s use a dash: --extra-property","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c17f444f4c0ab5e70074075305e44f26028adcde","unresolved":true,"context_lines":[{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":306,"context_line":"            required_keys\u003d[\u0027name\u0027, \u0027value\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"6fe2852f_0a4615a2","line":303,"range":{"start_line":303,"start_character":46,"end_line":303,"end_character":49},"updated":"2021-05-18 14:46:25.000000000","message":"Perhaps \"\u003cval\u003e\" looks better.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra_property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003dval\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":306,"context_line":"            required_keys\u003d[\u0027name\u0027, \u0027value\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"c4e4eca8_6c767707","line":303,"range":{"start_line":303,"start_character":46,"end_line":303,"end_character":49},"in_reply_to":"6fe2852f_0a4615a2","updated":"2021-05-24 08:46:55.000000000","message":"Done","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c17f444f4c0ab5e70074075305e44f26028adcde","unresolved":true,"context_lines":[{"line_number":309,"context_line":"                   \"Default type of the extra property is string (\u0027str\u0027), but \""},{"line_number":310,"context_line":"                   \"other types can be used as well. Available types are: \""},{"line_number":311,"context_line":"                   \"\u0027dict\u0027, \u0027list\u0027, \u0027str\u0027, \u0027bool\u0027, \u0027int\u0027. \""},{"line_number":312,"context_line":"                   \"In case of \u0027list\u0027 type, \u0027value\u0027 can be semicolon \""},{"line_number":313,"context_line":"                   \"separated list of values. \""},{"line_number":314,"context_line":"                   \"For \u0027dict\u0027 value is semicolon separated list of the \""},{"line_number":315,"context_line":"                   \"key:value pairs.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"626758ca_c35c8f4e","line":312,"range":{"start_line":312,"start_character":59,"end_line":312,"end_character":68},"updated":"2021-05-18 14:46:25.000000000","message":"Perhaps \"a semicolon-separated list\". It is tricky but we already use colons as a separeator of name\u003dxxx,key\u003dyyy,type\u003dzzz.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                   \"Default type of the extra property is string (\u0027str\u0027), but \""},{"line_number":310,"context_line":"                   \"other types can be used as well. Available types are: \""},{"line_number":311,"context_line":"                   \"\u0027dict\u0027, \u0027list\u0027, \u0027str\u0027, \u0027bool\u0027, \u0027int\u0027. \""},{"line_number":312,"context_line":"                   \"In case of \u0027list\u0027 type, \u0027value\u0027 can be semicolon \""},{"line_number":313,"context_line":"                   \"separated list of values. \""},{"line_number":314,"context_line":"                   \"For \u0027dict\u0027 value is semicolon separated list of the \""},{"line_number":315,"context_line":"                   \"key:value pairs.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"2ea3ed4d_e5674aa8","line":312,"range":{"start_line":312,"start_character":59,"end_line":312,"end_character":68},"in_reply_to":"626758ca_c35c8f4e","updated":"2021-05-24 08:46:55.000000000","message":"Done","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c17f444f4c0ab5e70074075305e44f26028adcde","unresolved":true,"context_lines":[{"line_number":311,"context_line":"                   \"\u0027dict\u0027, \u0027list\u0027, \u0027str\u0027, \u0027bool\u0027, \u0027int\u0027. \""},{"line_number":312,"context_line":"                   \"In case of \u0027list\u0027 type, \u0027value\u0027 can be semicolon \""},{"line_number":313,"context_line":"                   \"separated list of values. \""},{"line_number":314,"context_line":"                   \"For \u0027dict\u0027 value is semicolon separated list of the \""},{"line_number":315,"context_line":"                   \"key:value pairs.\")"},{"line_number":316,"context_line":"        )"},{"line_number":317,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":3,"id":"3384719a_1ee13c6d","line":314,"range":{"start_line":314,"start_character":39,"end_line":314,"end_character":65},"updated":"2021-05-18 14:46:25.000000000","message":"If we would like to specify a dict value {\"a\": \"1\", \"b\": \"2\", \"c\": \"3\"}. do you mean \"a:1:b:2:c:3\"? Perhaps yes. This is just a confirmation.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3491fecc7c5b43ea489eb7036f2e2e6202f87959","unresolved":true,"context_lines":[{"line_number":311,"context_line":"                   \"\u0027dict\u0027, \u0027list\u0027, \u0027str\u0027, \u0027bool\u0027, \u0027int\u0027. \""},{"line_number":312,"context_line":"                   \"In case of \u0027list\u0027 type, \u0027value\u0027 can be semicolon \""},{"line_number":313,"context_line":"                   \"separated list of values. \""},{"line_number":314,"context_line":"                   \"For \u0027dict\u0027 value is semicolon separated list of the \""},{"line_number":315,"context_line":"                   \"key:value pairs.\")"},{"line_number":316,"context_line":"        )"},{"line_number":317,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":3,"id":"81655ec9_515cdc8d","line":314,"range":{"start_line":314,"start_character":39,"end_line":314,"end_character":65},"in_reply_to":"3384719a_1ee13c6d","updated":"2021-05-18 14:49:05.000000000","message":"Woops, I mean \"a:1;b:2;c:3\"...","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":true,"context_lines":[{"line_number":311,"context_line":"                   \"\u0027dict\u0027, \u0027list\u0027, \u0027str\u0027, \u0027bool\u0027, \u0027int\u0027. \""},{"line_number":312,"context_line":"                   \"In case of \u0027list\u0027 type, \u0027value\u0027 can be semicolon \""},{"line_number":313,"context_line":"                   \"separated list of values. \""},{"line_number":314,"context_line":"                   \"For \u0027dict\u0027 value is semicolon separated list of the \""},{"line_number":315,"context_line":"                   \"key:value pairs.\")"},{"line_number":316,"context_line":"        )"},{"line_number":317,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":3,"id":"a3c02387_f93f2cc4","line":314,"range":{"start_line":314,"start_character":39,"end_line":314,"end_character":65},"in_reply_to":"81655ec9_515cdc8d","updated":"2021-05-24 08:46:55.000000000","message":"Yes, please check in UT https://review.opendev.org/c/openstack/python-openstackclient/+/768210/3/openstackclient/tests/unit/network/test_common.py","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a762baa3e18184c8a9ff6cf977c8adc2549854f5","unresolved":true,"context_lines":[{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra-property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003d\u003cval\u003e\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":306,"context_line":"            required_keys\u003d[\u0027name\u0027, \u0027value\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"cd921b81_25a19362","line":303,"range":{"start_line":303,"start_character":21,"end_line":303,"end_character":51},"updated":"2021-05-25 11:38:59.000000000","message":"For me looks cleaner something like this: type\u003d\u003cproperty_type\u003e,name\u003d\u003cthe name of the property\u003e,value\u003d\u003cthe value of the property\u003e","commit_id":"b9261ec79cf3a2192a7ab66ef9177a02bcaf01f5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cad55a846ba11f8387e87d4c1dcecf8e709bd3c3","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra-property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003d\u003cval\u003e\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":306,"context_line":"            required_keys\u003d[\u0027name\u0027, \u0027value\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"8bf23677_d837a5e7","line":303,"range":{"start_line":303,"start_character":21,"end_line":303,"end_character":51},"in_reply_to":"b86c0c43_73fd229d","updated":"2021-05-26 07:29:26.000000000","message":"Done","commit_id":"b9261ec79cf3a2192a7ab66ef9177a02bcaf01f5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"96f6096b92164a7bac67e1e072b2052499eda2f2","unresolved":true,"context_lines":[{"line_number":300,"context_line":"        parser \u003d super(NeutronCommandWithExtraArgs, self).get_parser(prog_name)"},{"line_number":301,"context_line":"        parser.add_argument("},{"line_number":302,"context_line":"            \u0027--extra-property\u0027,"},{"line_number":303,"context_line":"            metavar\u003d\u0027type\u003d\u003cproperty_type\u003e,key\u003d\u003cval\u003e\u0027,"},{"line_number":304,"context_line":"            dest\u003d\u0027extra_properties\u0027,"},{"line_number":305,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":306,"context_line":"            required_keys\u003d[\u0027name\u0027, \u0027value\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"b86c0c43_73fd229d","line":303,"range":{"start_line":303,"start_character":21,"end_line":303,"end_character":51},"in_reply_to":"cd921b81_25a19362","updated":"2021-05-25 17:50:06.000000000","message":"Good catch","commit_id":"b9261ec79cf3a2192a7ab66ef9177a02bcaf01f5"}],"openstackclient/network/utils.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5aec51adc87fc6493cd337a013605bc175348422","unresolved":true,"context_lines":[{"line_number":64,"context_line":"    :param strdict: string in the form of key1:value1;key2:value2"},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    result \u003d {}"},{"line_number":67,"context_line":"    if strdict:"},{"line_number":68,"context_line":"        i \u003d 0"},{"line_number":69,"context_line":"        kvlist \u003d []"},{"line_number":70,"context_line":"        for kv in strdict.split(\u0027;\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"44a3b199_a2f96bff","line":67,"updated":"2021-05-18 15:04:34.000000000","message":"nit: How about\n\n  if not strdict:\n      return {}\n\nWe can avoid extra indents after that.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    :param strdict: string in the form of key1:value1;key2:value2"},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    result \u003d {}"},{"line_number":67,"context_line":"    if strdict:"},{"line_number":68,"context_line":"        i \u003d 0"},{"line_number":69,"context_line":"        kvlist \u003d []"},{"line_number":70,"context_line":"        for kv in strdict.split(\u0027;\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"99c6abce_88c841f1","line":67,"in_reply_to":"44a3b199_a2f96bff","updated":"2021-05-24 08:46:55.000000000","message":"Done","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5aec51adc87fc6493cd337a013605bc175348422","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        for kv in kvlist:"},{"line_number":80,"context_line":"            key, sep, value \u003d kv.partition(\u0027:\u0027)"},{"line_number":81,"context_line":"            if not sep:"},{"line_number":82,"context_line":"                msg \u003d _(\"invalid key-value \u0027%s\u0027, expected format: key\u003dvalue\")"},{"line_number":83,"context_line":"                raise exceptions.CommandError(msg % kv)"},{"line_number":84,"context_line":"            result[key] \u003d value"},{"line_number":85,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":3,"id":"10c973c9_834cd25e","line":82,"range":{"start_line":82,"start_character":66,"end_line":82,"end_character":75},"updated":"2021-05-18 15:04:34.000000000","message":"\"key:value\"?\n\nOn the otherr hand, we already check the existence of \u0027:\" at L.71 before adding kv to kvlist. I wonder when \"not sep\" becomes True here.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        for kv in kvlist:"},{"line_number":80,"context_line":"            key, sep, value \u003d kv.partition(\u0027:\u0027)"},{"line_number":81,"context_line":"            if not sep:"},{"line_number":82,"context_line":"                msg \u003d _(\"invalid key-value \u0027%s\u0027, expected format: key\u003dvalue\")"},{"line_number":83,"context_line":"                raise exceptions.CommandError(msg % kv)"},{"line_number":84,"context_line":"            result[key] \u003d value"},{"line_number":85,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":3,"id":"d8da2c8c_1c65a739","line":82,"range":{"start_line":82,"start_character":66,"end_line":82,"end_character":75},"in_reply_to":"10c973c9_834cd25e","updated":"2021-05-24 08:46:55.000000000","message":"TBH I don\u0027t know how we can end up in such situation. As You said, it should be checked in L70-78 already.\n\nI removed this additional check from here.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"}],"openstackclient/tests/unit/network/test_common.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5aec51adc87fc6493cd337a013605bc175348422","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        parser \u003d super(FakeCreateNeutronCommandWithExtraArgs,"},{"line_number":110,"context_line":"                       self).get_parser(prog_name)"},{"line_number":111,"context_line":"        parser.add_argument("},{"line_number":112,"context_line":"            \u0027--known_attribute\u0027,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":"        return parser"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ddcfd3bd_218d1aed","line":112,"updated":"2021-05-18 15:04:34.000000000","message":"nit: \"--known-attribute\" would be better as we use dashes as a separator.","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1feadf65adea90403e348955f5cc30ccb276ad26","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        parser \u003d super(FakeCreateNeutronCommandWithExtraArgs,"},{"line_number":110,"context_line":"                       self).get_parser(prog_name)"},{"line_number":111,"context_line":"        parser.add_argument("},{"line_number":112,"context_line":"            \u0027--known_attribute\u0027,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":"        return parser"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"8940d50d_d2bbdeea","line":112,"in_reply_to":"ddcfd3bd_218d1aed","updated":"2021-05-24 08:46:55.000000000","message":"Done","commit_id":"83b4c0d22548bd8d796ff45d5dbeb998ce1f6442"}]}
