)]}'
{"osc_lib/cli/parseractions.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"12329c11a928bb8a0ad9ff7ca7df25460da07c73","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            setattr(namespace, self.dest, {})"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        # Add value if an assignment else remove it"},{"line_number":35,"context_line":"        if \u0027\u003d\u0027 in values and \u0027\u003d\u0027 !\u003d values:"},{"line_number":36,"context_line":"            getattr(namespace, self.dest, {}).update([values.split(\u0027\u003d\u0027, 1)])"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            msg \u003d _(\"Expected \u0027key\u003dvalue\u0027 type, but got: %s\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_15620ed8","line":35,"updated":"2016-07-21 12:00:56.000000000","message":"A property value of \u0027\u003d\u0027 implies that the property name is blank and its value is blank.  Why shouldn\u0027t this be supported?","commit_id":"8b6d780eb3ced4184c1074794cbce64ff419c056"},{"author":{"_account_id":22754,"name":"Qiang Tang","email":"qtang@vmware.com","username":"qtang"},"change_message_id":"a80e46f1819b1ed91c93304f2af3a44ee91d149b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            setattr(namespace, self.dest, {})"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        # Add value if an assignment else remove it"},{"line_number":35,"context_line":"        if \u0027\u003d\u0027 in values and \u0027\u003d\u0027 !\u003d values:"},{"line_number":36,"context_line":"            getattr(namespace, self.dest, {}).update([values.split(\u0027\u003d\u0027, 1)])"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            msg \u003d _(\"Expected \u0027key\u003dvalue\u0027 type, but got: %s\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_b8569203","line":35,"in_reply_to":"dada55a8_15620ed8","updated":"2016-07-21 13:34:22.000000000","message":"Hi Richard,\n\nThanks for your comment.\n\nAs Huanxuan\u0027s comment and my practice, response from the diff component for the blank key name is also different.\n\nSome of the component deny the blank key name as the invalid key name, such as flavor and cinder.\n\nAs the error info below:\nflavor set m1.tiny --property \u003d\nFailed to set flavor property: Invalid key: \"\". Keys may only contain letters, numbers, spaces, underscores, periods, colons and hyphens.\nCommand Failed: One or more of the operations failed\n\nBut some other apply the blank key name right now, such as keystone and glance.\n\nBut for my opinion:\n1. Diff component should keep the same or similar response to the same invalid input. Such as the blank key name for the property setting. I think blank or none key name should not be allowed for the property. As kind of the dict,blank or none value is available but not for the key.\n\n2. Workload for changing in each component maybe big, but it is easy for the openstack client to handle and filter this first from the cli site.","commit_id":"8b6d780eb3ced4184c1074794cbce64ff419c056"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e33fab8e16b7ea1a959b78ce44616d09a9ca0184","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            setattr(namespace, self.dest, {})"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        # Add value if an assignment else remove it"},{"line_number":35,"context_line":"        if \u0027\u003d\u0027 in values and \u0027\u003d\u0027 !\u003d values:"},{"line_number":36,"context_line":"            getattr(namespace, self.dest, {}).update([values.split(\u0027\u003d\u0027, 1)])"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            msg \u003d _(\"Expected \u0027key\u003dvalue\u0027 type, but got: %s\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_c2754dcb","line":35,"in_reply_to":"dada55a8_b8569203","updated":"2016-07-21 15:14:09.000000000","message":"I think we should make the various APIs appear consistent in OSC, we do this for other things.\n\n(Trying to think like a user here) I don\u0027t know what a null key means, how that is useful.  A null value is totally meaningful, and distinct from using --property in an unset command, which should remove the property rather than set it to \"\".\n\nHowever, I think making the test specifically for a null key better describes the intention of the code.","commit_id":"8b6d780eb3ced4184c1074794cbce64ff419c056"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"c83c4c6f916f87f8a59bd1e21488806183815210","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            setattr(namespace, self.dest, {})"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        # Add value if an assignment else remove it"},{"line_number":35,"context_line":"        if \u0027\u003d\u0027 in values and \u0027\u003d\u0027 !\u003d values:"},{"line_number":36,"context_line":"            getattr(namespace, self.dest, {}).update([values.split(\u0027\u003d\u0027, 1)])"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            msg \u003d _(\"Expected \u0027key\u003dvalue\u0027 type, but got: %s\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_5214864b","line":35,"in_reply_to":"dada55a8_c2754dcb","updated":"2016-07-21 17:40:21.000000000","message":"That sounds good","commit_id":"8b6d780eb3ced4184c1074794cbce64ff419c056"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"1d34119c77751d7934d992b5831983b32eca1b12","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        if \u0027\u003d\u0027 in values:"},{"line_number":36,"context_line":"            values_list \u003d values.split(\u0027\u003d\u0027, 1)"},{"line_number":37,"context_line":"            if \u0027\u0027 \u003d\u003d values_list[0]:"},{"line_number":38,"context_line":"                msg \u003d _(\"Invalid \u0027\u0027 key for %s. Keys may only contain letters\""},{"line_number":39,"context_line":"                        \", numbers, spaces, underscores, periods, colons \""},{"line_number":40,"context_line":"                        \"and hyphens.\")"},{"line_number":41,"context_line":"                raise argparse.ArgumentTypeError(msg % str(values))"},{"line_number":42,"context_line":"            else:"},{"line_number":43,"context_line":"                getattr(namespace, self.dest, {}).update([values_list])"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_f7baa270","line":40,"range":{"start_line":38,"start_character":70,"end_line":40,"end_character":36},"updated":"2016-07-22 12:09:39.000000000","message":"I don\u0027t think we need to list all of the characters supported because osc-lib is only enforcing that the key is not empty.","commit_id":"4124eecdde578ae18fc1f2047f3ba325dac70a75"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"be0dd989f0e9c598bb6c881bcfc57147a679d6b2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            if \u0027\u0027 \u003d\u003d values_list[0]:"},{"line_number":38,"context_line":"                msg \u003d _(\"Invalid \u0027\u0027 key for %s. Keys may only contain letters\""},{"line_number":39,"context_line":"                        \", numbers, spaces, underscores, periods, colons \""},{"line_number":40,"context_line":"                        \"and hyphens.\")"},{"line_number":41,"context_line":"                raise argparse.ArgumentTypeError(msg % str(values))"},{"line_number":42,"context_line":"            else:"},{"line_number":43,"context_line":"                getattr(namespace, self.dest, {}).update([values_list])"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_ce308eeb","line":40,"in_reply_to":"dada55a8_7d53316d","updated":"2016-07-22 19:01:09.000000000","message":"We have no need to stay consistent with any of the project CLIs, we need to stay consistent with the rest of OSC.\n\nI would not count on all users knowing what \u0027\u0027 means, better to just use words:\n\n  \"Property keys must not be empty: %s\"\n\nor\n\n  \"Property key must be specified: %s\"","commit_id":"4124eecdde578ae18fc1f2047f3ba325dac70a75"},{"author":{"_account_id":22754,"name":"Qiang Tang","email":"qtang@vmware.com","username":"qtang"},"change_message_id":"388ff96d6fefdc57d37da39d4998d1d5ff2a8e98","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            if \u0027\u0027 \u003d\u003d values_list[0]:"},{"line_number":38,"context_line":"                msg \u003d _(\"Invalid \u0027\u0027 key for %s. Keys may only contain letters\""},{"line_number":39,"context_line":"                        \", numbers, spaces, underscores, periods, colons \""},{"line_number":40,"context_line":"                        \"and hyphens.\")"},{"line_number":41,"context_line":"                raise argparse.ArgumentTypeError(msg % str(values))"},{"line_number":42,"context_line":"            else:"},{"line_number":43,"context_line":"                getattr(namespace, self.dest, {}).update([values_list])"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_ad02736d","line":40,"in_reply_to":"dada55a8_ce308eeb","updated":"2016-07-23 07:26:10.000000000","message":"Will take：\n \"Each property key must be specified: %s\"","commit_id":"4124eecdde578ae18fc1f2047f3ba325dac70a75"},{"author":{"_account_id":22754,"name":"Qiang Tang","email":"qtang@vmware.com","username":"qtang"},"change_message_id":"784d27499c0d3e44c26e7dbc85e80a08e67fde95","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        if \u0027\u003d\u0027 in values:"},{"line_number":36,"context_line":"            values_list \u003d values.split(\u0027\u003d\u0027, 1)"},{"line_number":37,"context_line":"            if \u0027\u0027 \u003d\u003d values_list[0]:"},{"line_number":38,"context_line":"                msg \u003d _(\"Invalid \u0027\u0027 key for %s. Keys may only contain letters\""},{"line_number":39,"context_line":"                        \", numbers, spaces, underscores, periods, colons \""},{"line_number":40,"context_line":"                        \"and hyphens.\")"},{"line_number":41,"context_line":"                raise argparse.ArgumentTypeError(msg % str(values))"},{"line_number":42,"context_line":"            else:"},{"line_number":43,"context_line":"                getattr(namespace, self.dest, {}).update([values_list])"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_7d53316d","line":40,"range":{"start_line":38,"start_character":70,"end_line":40,"end_character":36},"in_reply_to":"dada55a8_f7baa270","updated":"2016-07-22 12:47:02.000000000","message":"How about:\n\"Invalid \u0027\u0027 key for %s. Keys for property setting should not be empty.\"\n\nBTW, the commented string is copied from the standard response message by nova and cinder.\nShall we keep consisent with these components?","commit_id":"4124eecdde578ae18fc1f2047f3ba325dac70a75"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"1d34119c77751d7934d992b5831983b32eca1b12","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            if \u0027\u003d\u0027 in kv:"},{"line_number":98,"context_line":"                kv_list \u003d kv.split(\u0027\u003d\u0027, 1)"},{"line_number":99,"context_line":"                if \u0027\u0027 \u003d\u003d kv_list[0]:"},{"line_number":100,"context_line":"                    msg \u003d _(\"Invalid \u0027\u0027 key for %s. Keys may only contain \""},{"line_number":101,"context_line":"                            \"letters, numbers, spaces, underscores, periods, \""},{"line_number":102,"context_line":"                            \"colons and hyphens.\")"},{"line_number":103,"context_line":"                    raise argparse.ArgumentTypeError(msg % str(kv))"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_77afd22b","line":100,"updated":"2016-07-22 12:09:39.000000000","message":"Same as above.","commit_id":"4124eecdde578ae18fc1f2047f3ba325dac70a75"}],"osc_lib/tests/cli/test_parseractions.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"30aec8744e942b8664b5fad0e4d73da9b571ce08","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            self.parser.parse_args,"},{"line_number":55,"context_line":"            ["},{"line_number":56,"context_line":"                \u0027--property\u0027, \u0027red\u0027,"},{"line_number":57,"context_line":"                \u0027--property\u0027, \u0027\u003d\u0027,"},{"line_number":58,"context_line":"                \u0027--property\u0027, \u0027\u003dred\u0027,"},{"line_number":59,"context_line":"            ]"},{"line_number":60,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_7ef76259","line":57,"updated":"2016-07-25 12:35:30.000000000","message":"I think you\u0027ll want a separate test since the first argument will raise an exception.","commit_id":"85f4ef0e5ad96dc3fb4f7c40e8f487b6a4a9b65e"},{"author":{"_account_id":22754,"name":"Qiang Tang","email":"qtang@vmware.com","username":"qtang"},"change_message_id":"aa17ae37aee5803d47eecd011f842e0968eb1cb5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            self.parser.parse_args,"},{"line_number":55,"context_line":"            ["},{"line_number":56,"context_line":"                \u0027--property\u0027, \u0027red\u0027,"},{"line_number":57,"context_line":"                \u0027--property\u0027, \u0027\u003d\u0027,"},{"line_number":58,"context_line":"                \u0027--property\u0027, \u0027\u003dred\u0027,"},{"line_number":59,"context_line":"            ]"},{"line_number":60,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_7957575a","line":57,"in_reply_to":"dada55a8_7ef76259","updated":"2016-07-26 02:12:51.000000000","message":"Yes and I will replace a loop execution here.","commit_id":"85f4ef0e5ad96dc3fb4f7c40e8f487b6a4a9b65e"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"30aec8744e942b8664b5fad0e4d73da9b571ce08","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            self.parser.parse_args,"},{"line_number":123,"context_line":"            ["},{"line_number":124,"context_line":"                \u0027--test\u0027, \u0027mmm,nnn\u003dzzz\u0027,"},{"line_number":125,"context_line":"                \u0027--test\u0027, \u0027nnn\u003dzzz,\u003d\u0027,"},{"line_number":126,"context_line":"                \u0027--test\u0027, \u0027nnn\u003dzzz,\u003dzzz\u0027,"},{"line_number":127,"context_line":"            ]"},{"line_number":128,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_1e9f4604","line":125,"updated":"2016-07-25 12:35:30.000000000","message":"Same comment as above.","commit_id":"85f4ef0e5ad96dc3fb4f7c40e8f487b6a4a9b65e"}],"releasenotes/notes/bug-1558690-1528b637f2c0a449.yaml":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f4fd1d034e73f5d34062390bd521a07f1e2b7d7f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Prevent null key setting for property"},{"line_number":5,"context_line":"    [Bug `1558690 \u003chttps://bugs.launchpad.net/bugs/1558690\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"dada55a8_d856eb5a","line":2,"updated":"2016-07-27 11:57:22.000000000","message":"This is an upgrade impact not a fix.","commit_id":"935f637f194e177901e222ed9ccbc048d985e276"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f4fd1d034e73f5d34062390bd521a07f1e2b7d7f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Prevent null key setting for property"},{"line_number":5,"context_line":"    [Bug `1558690 \u003chttps://bugs.launchpad.net/bugs/1558690\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"dada55a8_f8de4fd8","line":4,"updated":"2016-07-27 11:57:22.000000000","message":"Please document the utility functions that are impacted.","commit_id":"935f637f194e177901e222ed9ccbc048d985e276"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"d09926067dde842188ad936aca9be034b0d46093","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Prevent null key setting for key-value pairs in the __call__ func of"},{"line_number":5,"context_line":"    class KeyValueAction and class MultiKeyValueAction"},{"line_number":6,"context_line":"    [Bug `1558690 \u003chttps://bugs.launchpad.net/bugs/1558690\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bacf61ea_cbb6b389","line":5,"range":{"start_line":4,"start_character":49,"end_line":5,"end_character":54},"updated":"2016-07-28 12:09:52.000000000","message":"Suggestion: \"in the KeyValueAction and MultiKeyValueAction parser actions.\"","commit_id":"a5f51829d79f26224f4ac9a9a1dea1105befa808"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f092f386bad804ff7bef521543f90a71493c8b5f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Prevent null key setting for key-value pairs in the KeyValueAction"},{"line_number":5,"context_line":"    and MultiKeyValueAction parser actions."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"bacf61ea_6431585a","line":2,"updated":"2016-08-04 19:21:22.000000000","message":"This should probably go under fixes instead of upgrade after discussions during OSC meeting.","commit_id":"fe469b646bdd11962a047bc6772814875865d8ce"}]}
