)]}'
{"doc/source/usage/osc/v2/network-tag.rst":[{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"fc79baa26a912614f62d32a2ff32c65f3a9d3a1c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    Unset all tags from resource"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"network tag replace"},{"line_number":67,"context_line":"-------------------"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Replace all tags on the resource"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":".. program:: network tag replace"},{"line_number":72,"context_line":"    --resource-type \u003cresource_type\u003e"},{"line_number":73,"context_line":"    --resource \u003cresource\u003e"},{"line_number":74,"context_line":"    --tag \u003ctag\u003e"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":".. option:: --resource-type \u003cresource_type\u003e"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    Resource type"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":".. option:: --resource \u003cresource\u003e"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    Resource name or ID"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":".. option:: --tag \u003ctag\u003e"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    Tag (This option can be repeated)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1a6eadb0_c96df899","line":86,"range":{"start_line":66,"start_character":0,"end_line":86,"end_character":37},"updated":"2016-12-13 23:48:31.000000000","message":"no longer needed","commit_id":"b63ba44b349717e17b8655070574a2b9c66d47ad"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"caee944c58f9a9b035c14e5495a077b619d98ba9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Set a tag to a resource"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: network tag set"},{"line_number":16,"context_line":"    [--unset-all]"},{"line_number":17,"context_line":"    --resource-type \u003cresource_type\u003e"},{"line_number":18,"context_line":"    --resource \u003cresource\u003e"},{"line_number":19,"context_line":"    --tag \u003ctag\u003e"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba5201f7_e7956840","line":16,"updated":"2017-01-11 02:02:36.000000000","message":"I think \"--no-tag\" is suitable option for following guide[1].  What do you think?\n\nhttps://github.com/openstack/python-openstackclient/blob/master/doc/source/humaninterfaceguide.rst#option-forms","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"357ad0ec3e49395bd84519f999c17adaffcdbdea","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Set a tag to a resource"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: network tag set"},{"line_number":16,"context_line":"    [--unset-all]"},{"line_number":17,"context_line":"    --resource-type \u003cresource_type\u003e"},{"line_number":18,"context_line":"    --resource \u003cresource\u003e"},{"line_number":19,"context_line":"    --tag \u003ctag\u003e"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba5201f7_6aff7f01","line":16,"in_reply_to":"ba5201f7_a7e8c07d","updated":"2017-01-11 02:17:53.000000000","message":"I understood.  Thanks for OSC\u0027s information.  I didn\u0027t know that.  So, I\u0027ll take care to implement in next OSC plugin.","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"babb7ba3e33a8dc5f0555fb47bfb898a3aa0b76a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Set a tag to a resource"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: network tag set"},{"line_number":16,"context_line":"    [--unset-all]"},{"line_number":17,"context_line":"    --resource-type \u003cresource_type\u003e"},{"line_number":18,"context_line":"    --resource \u003cresource\u003e"},{"line_number":19,"context_line":"    --tag \u003ctag\u003e"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba5201f7_a7e8c07d","line":16,"in_reply_to":"ba5201f7_e7956840","updated":"2017-01-11 02:10:42.000000000","message":"Yushiro: Thank you for the review. --unset-all was chosen after an OSC community discussion. Initially it was add, remove and replace. and the replace functionality was changed to the --unset-all option","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1a2116668f687170b7f2fd8cc2f9d7827630d109","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: network tag set"},{"line_number":16,"context_line":"    [--unset-all]"},{"line_number":17,"context_line":"    --resource-type \u003cresource_type\u003e"},{"line_number":18,"context_line":"    --resource \u003cresource\u003e"},{"line_number":19,"context_line":"    --tag \u003ctag\u003e"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba5201f7_fc2fab9e","line":17,"range":{"start_line":17,"start_character":21,"end_line":17,"end_character":35},"updated":"2017-01-11 10:56:55.000000000","message":"Hyphen is preferred as a delimiter:\n\n  \u003cresource-type\u003e","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"22d44d09f985bec7c620350564182e13963d0c67","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: network tag set"},{"line_number":16,"context_line":"    [--unset-all]"},{"line_number":17,"context_line":"    --resource-type \u003cresource_type\u003e"},{"line_number":18,"context_line":"    --resource \u003cresource\u003e"},{"line_number":19,"context_line":"    --tag \u003ctag\u003e"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba5201f7_aa14e04c","line":17,"range":{"start_line":17,"start_character":21,"end_line":17,"end_character":35},"in_reply_to":"ba5201f7_fc2fab9e","updated":"2017-01-11 17:05:35.000000000","message":"because resource_type isn\u0027t publicly shown to the user it is okay to leave as is.","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1a2116668f687170b7f2fd8cc2f9d7827630d109","unresolved":false,"context_lines":[{"line_number":33,"context_line":".. option:: --unset-all"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    Unset existing tags and add new."},{"line_number":36,"context_line":"    When option used multiple --tag names can be set."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"network tag unset"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba5201f7_1c7d4fb1","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":53},"updated":"2017-01-11 10:56:55.000000000","message":"Can we specify multiple --tag ONLY when --unset-all is specified?\nIs there any reason we don\u0027t allow multiple --tag options in other cases?\n\nI know the current neutron API is defined so, but from OSC user perspective this difference sounds tricky.","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"22d44d09f985bec7c620350564182e13963d0c67","unresolved":false,"context_lines":[{"line_number":33,"context_line":".. option:: --unset-all"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    Unset existing tags and add new."},{"line_number":36,"context_line":"    When option used multiple --tag names can be set."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"network tag unset"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba5201f7_6a3d988e","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":53},"in_reply_to":"ba5201f7_1c7d4fb1","updated":"2017-01-11 17:05:35.000000000","message":"It is a Neutron limitation unfortunately.\n\nI couldn\u0027t think of a better way of implementing the ability to put multiple tags in the case where a user wants to remove all existing.","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"}],"neutronclient/osc/v2/tag/network_tag.py":[{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"fc79baa26a912614f62d32a2ff32c65f3a9d3a1c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        parser.add_argument("},{"line_number":58,"context_line":"            \u0027--unset-all\u0027,"},{"line_number":59,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":60,"context_line":"            help\u003d_(\"Unset existing tags and add new \\"},{"line_number":61,"context_line":"                    When option used multiple --tag names can be set\"),"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":"        parser.add_argument("},{"line_number":64,"context_line":"            \u0027--tag\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_8e26a6cc","line":61,"range":{"start_line":60,"start_character":19,"end_line":61,"end_character":69},"updated":"2016-12-13 23:48:31.000000000","message":"consider rephrasing. This sounds a bit abrupt.\nSuggestion:\n\"Unset existing tags and optionally add new tags. \"\n\"(--tag) option can be repeated along with this option.\"\"","commit_id":"b63ba44b349717e17b8655070574a2b9c66d47ad"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"e0267b88d8624f0a9629a87c76cc430c19e483ae","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        parser.add_argument("},{"line_number":58,"context_line":"            \u0027--unset-all\u0027,"},{"line_number":59,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":60,"context_line":"            help\u003d_(\"Unset existing tags and add new \\"},{"line_number":61,"context_line":"                    When option used multiple --tag names can be set\"),"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":"        parser.add_argument("},{"line_number":64,"context_line":"            \u0027--tag\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_e799f86f","line":61,"range":{"start_line":60,"start_character":19,"end_line":61,"end_character":69},"in_reply_to":"1a6eadb0_8e26a6cc","updated":"2016-12-14 04:20:34.000000000","message":"Done","commit_id":"b63ba44b349717e17b8655070574a2b9c66d47ad"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"fc79baa26a912614f62d32a2ff32c65f3a9d3a1c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":86,"context_line":"            resource_type, resource_id \u003d _get_resource_args(client,"},{"line_number":87,"context_line":"                                                            parsed_args)"},{"line_number":88,"context_line":"            tag \u003d parsed_args.tags[0]"},{"line_number":89,"context_line":"            client.add_tag(resource_type, resource_id, tag)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_c96338db","line":88,"range":{"start_line":88,"start_character":18,"end_line":88,"end_character":37},"updated":"2016-12-13 23:48:31.000000000","message":"Is doc [1] updated?\nBased on the doc, I can see that we can set multiple tags in one request. Cant we do the same from CLI?\n\n[1]: http://docs.openstack.org/developer/neutron/devref/tag.html","commit_id":"b63ba44b349717e17b8655070574a2b9c66d47ad"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"e0267b88d8624f0a9629a87c76cc430c19e483ae","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":86,"context_line":"            resource_type, resource_id \u003d _get_resource_args(client,"},{"line_number":87,"context_line":"                                                            parsed_args)"},{"line_number":88,"context_line":"            tag \u003d parsed_args.tags[0]"},{"line_number":89,"context_line":"            client.add_tag(resource_type, resource_id, tag)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_e70c9896","line":88,"range":{"start_line":88,"start_character":18,"end_line":88,"end_character":37},"in_reply_to":"1a6eadb0_c96338db","updated":"2016-12-14 04:20:34.000000000","message":"I tested it out and wasn\u0027t able to do it. If multiple --tag\u0027s are put in the neutron cli it only accepts one of them thus Openstack will have the same functionality. \n\nAtleast if done in the same method. as seen in previous patchsets if all the tag arguments are put into a dict and sent then the Neutron API can read all the tag args and tag the resource..\n\nSo it depends on if we want to replicate neutron functionality or go above and beyond","commit_id":"b63ba44b349717e17b8655070574a2b9c66d47ad"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"b362bcc53a6d2f370be892916d380644e7aa7f39","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":86,"context_line":"            resource_type, resource_id \u003d _get_resource_args(client,"},{"line_number":87,"context_line":"                                                            parsed_args)"},{"line_number":88,"context_line":"            tag \u003d parsed_args.tags[0]"},{"line_number":89,"context_line":"            client.add_tag(resource_type, resource_id, tag)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_fadbdd79","line":88,"range":{"start_line":88,"start_character":18,"end_line":88,"end_character":37},"in_reply_to":"1a6eadb0_e70c9896","updated":"2016-12-16 01:03:15.000000000","message":"I guess if neutron API does provide the ways to set multiple tags then we should make use of it and expose them. I am not sure why neutronclient CLI ignored that. Maybe there was a good reason behind it.\nI am okay with getting openstack cli on par with neutron cli first and follow it up to accept multiple tags. Lets see if others agree","commit_id":"b63ba44b349717e17b8655070574a2b9c66d47ad"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1a2116668f687170b7f2fd8cc2f9d7827630d109","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":86,"context_line":"            resource_type, resource_id \u003d _get_resource_args(client,"},{"line_number":87,"context_line":"                                                            parsed_args)"},{"line_number":88,"context_line":"            tag \u003d parsed_args.tags[0]"},{"line_number":89,"context_line":"            client.add_tag(resource_type, resource_id, tag)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_9f5bf1f5","line":88,"range":{"start_line":88,"start_character":12,"end_line":88,"end_character":37},"updated":"2017-01-11 10:56:55.000000000","message":"It is better to raise an error message when multiple tags are specified (if we don\u0027t accept multiple tags without --unset-all).","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"22d44d09f985bec7c620350564182e13963d0c67","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":86,"context_line":"            resource_type, resource_id \u003d _get_resource_args(client,"},{"line_number":87,"context_line":"                                                            parsed_args)"},{"line_number":88,"context_line":"            tag \u003d parsed_args.tags[0]"},{"line_number":89,"context_line":"            client.add_tag(resource_type, resource_id, tag)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_5defbc1d","line":88,"range":{"start_line":88,"start_character":12,"end_line":88,"end_character":37},"in_reply_to":"ba5201f7_9f5bf1f5","updated":"2017-01-11 17:05:35.000000000","message":"Neutron doesn\u0027t return error when multiple tags are set (when not replacing tags) it just takes the first --tag \u003ctag\u003e that is provided and adds that and ignores the rest. \n\nKeeping same functionality","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"39c8518ce1a1a63efc37238de49be5b45149735e","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class SetTag(command.Command):"},{"line_number":52,"context_line":"    \"\"\"Set a tag into the resource.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_parser(self, prog_name):"},{"line_number":55,"context_line":"        parser \u003d super(SetTag, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_03df8369","line":52,"updated":"2017-01-12 00:40:17.000000000","message":"Hi Ankur,  I think following fix is necessary.  Please check it.\n\n\u003e Please update all these doctrings as such instead of \"\"\"\u003cdescription\u003e\"\"\"\n\u003e please replace with _description \u003d _(\"\u003cdescription\u003e\")\n\u003e For OSC language translation compatibility.\n\n[1]https://review.openstack.org/#/c/351582/36/neutronclient/osc/v2/fwaas/firewallgroup.py@165","commit_id":"3a4246d6282620b7b73a1c572039f07a82c61fcb"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"e17ebd28e850edf69ec8ebca89faf8c864612b2c","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class SetTag(command.Command):"},{"line_number":52,"context_line":"    \"\"\"Set a tag into the resource.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_parser(self, prog_name):"},{"line_number":55,"context_line":"        parser \u003d super(SetTag, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a57fde8_e08d997c","line":52,"in_reply_to":"ba5201f7_03df8369","updated":"2017-01-12 16:22:44.000000000","message":"Good catch. The change is so that language translation works","commit_id":"3a4246d6282620b7b73a1c572039f07a82c61fcb"}],"neutronclient/tests/unit/osc/v2/tag/fakes.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1a2116668f687170b7f2fd8cc2f9d7827630d109","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @staticmethod"},{"line_number":35,"context_line":"    def create_tag(attrs\u003dNone, count\u003d2):"},{"line_number":36,"context_line":"        tag \u003d []"},{"line_number":37,"context_line":"        for i in range(0, count):"},{"line_number":38,"context_line":"            tag.append(FakeTag.create_one_tag(attrs))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        return tag"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @staticmethod"},{"line_number":43,"context_line":"    def get_tags(tags\u003dNone, count\u003d2):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_bfafd5e1","line":40,"range":{"start_line":36,"start_character":8,"end_line":40,"end_character":18},"updated":"2017-01-11 10:56:55.000000000","message":"How about:\n\n  return [FakeTag.create_one_tag(attrs) for i in range(0, count)]","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"22d44d09f985bec7c620350564182e13963d0c67","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @staticmethod"},{"line_number":35,"context_line":"    def create_tag(attrs\u003dNone, count\u003d2):"},{"line_number":36,"context_line":"        tag \u003d []"},{"line_number":37,"context_line":"        for i in range(0, count):"},{"line_number":38,"context_line":"            tag.append(FakeTag.create_one_tag(attrs))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        return tag"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @staticmethod"},{"line_number":43,"context_line":"    def get_tags(tags\u003dNone, count\u003d2):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_3d4e786f","line":40,"range":{"start_line":36,"start_character":8,"end_line":40,"end_character":18},"in_reply_to":"ba5201f7_bfafd5e1","updated":"2017-01-11 17:05:35.000000000","message":"Done","commit_id":"6796cc7dd2456e236fe7d551e610e6757db123dc"}],"neutronclient/tests/unit/osc/v2/tag/test_network_tag.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"475a6ac7fa5329228d576ec0c3400e32363aeb3a","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class TestUnsetNetworkTag(test_fakes.TestNeutronClientOSCV2):"},{"line_number":123,"context_line":"    # The tags to delete"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    _tag \u003d fakes.FakeTag.create_tag(count\u003d2)"},{"line_number":126,"context_line":"    _network \u003d fakes.FakeNetwork.create_one_network()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_a0ff1133","line":123,"range":{"start_line":123,"start_character":18,"end_line":123,"end_character":24},"updated":"2017-01-12 16:38:26.000000000","message":"nit: I think following words confuses for me:\n\n* unset\n* delete\n* remove\n\nBut unfortunately, I\u0027m not an expert a grammar so I\u0027m not sure what is suitable word :)","commit_id":"7f3e6af7a0f75bf27204a830451825aa32c6e38b"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"57d932321f8f02ab076f1d32903a5e4aa23972d0","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class TestUnsetNetworkTag(test_fakes.TestNeutronClientOSCV2):"},{"line_number":123,"context_line":"    # The tags to delete"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    _tag \u003d fakes.FakeTag.create_tag(count\u003d2)"},{"line_number":126,"context_line":"    _network \u003d fakes.FakeNetwork.create_one_network()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_2fe78ae5","line":123,"range":{"start_line":123,"start_character":18,"end_line":123,"end_character":24},"in_reply_to":"9a57fde8_a0ff1133","updated":"2017-01-12 18:15:05.000000000","message":"Done","commit_id":"7f3e6af7a0f75bf27204a830451825aa32c6e38b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"475a6ac7fa5329228d576ec0c3400e32363aeb3a","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.cmd \u003d tag.UnsetTag(self.app, self.namespace)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_add_tag_no_options(self):"},{"line_number":139,"context_line":"        arglist \u003d []"},{"line_number":140,"context_line":"        verifylist \u003d []"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_c077b500","line":138,"range":{"start_line":138,"start_character":9,"end_line":138,"end_character":31},"updated":"2017-01-12 16:38:26.000000000","message":"remove_tag","commit_id":"7f3e6af7a0f75bf27204a830451825aa32c6e38b"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"57d932321f8f02ab076f1d32903a5e4aa23972d0","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.cmd \u003d tag.UnsetTag(self.app, self.namespace)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_add_tag_no_options(self):"},{"line_number":139,"context_line":"        arglist \u003d []"},{"line_number":140,"context_line":"        verifylist \u003d []"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_0fe2c6d5","line":138,"range":{"start_line":138,"start_character":9,"end_line":138,"end_character":31},"in_reply_to":"9a57fde8_c077b500","updated":"2017-01-12 18:15:05.000000000","message":"Done","commit_id":"7f3e6af7a0f75bf27204a830451825aa32c6e38b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"475a6ac7fa5329228d576ec0c3400e32363aeb3a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.assertRaises(test_utils.ParserException, self.check_parser,"},{"line_number":143,"context_line":"                          self.cmd, arglist, verifylist)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test_remove_tag(self):"},{"line_number":146,"context_line":"        arglist \u003d ["},{"line_number":147,"context_line":"            \u0027--tag\u0027, self._tag[0][\u0027tag\u0027],"},{"line_number":148,"context_line":"            \u0027--resource\u0027, self._tag[0][\u0027resource\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_60a44957","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":25},"updated":"2017-01-12 16:38:26.000000000","message":"Can we delete multiple tags?  If possible, please add UT in case of deleting multiple tags.","commit_id":"7f3e6af7a0f75bf27204a830451825aa32c6e38b"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"57d932321f8f02ab076f1d32903a5e4aa23972d0","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.assertRaises(test_utils.ParserException, self.check_parser,"},{"line_number":143,"context_line":"                          self.cmd, arglist, verifylist)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test_remove_tag(self):"},{"line_number":146,"context_line":"        arglist \u003d ["},{"line_number":147,"context_line":"            \u0027--tag\u0027, self._tag[0][\u0027tag\u0027],"},{"line_number":148,"context_line":"            \u0027--resource\u0027, self._tag[0][\u0027resource\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a57fde8_afc45a40","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":25},"in_reply_to":"9a57fde8_60a44957","updated":"2017-01-12 18:15:05.000000000","message":"not with the --tag option. You can remove multiple with the --all option. Test is below","commit_id":"7f3e6af7a0f75bf27204a830451825aa32c6e38b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c23fca59637f2ec381e219b6575f4f9addc38249","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.assertRaises(test_utils.ParserException, self.check_parser,"},{"line_number":143,"context_line":"                          self.cmd, arglist, verifylist)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test_remove_tag(self):"},{"line_number":146,"context_line":"        arglist \u003d ["},{"line_number":147,"context_line":"            \u0027--tag\u0027, self._tag[0][\u0027tag\u0027],"},{"line_number":148,"context_line":"            \u0027--resource\u0027, self._tag[0][\u0027resource\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a3c09a3_085c9b24","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":25},"in_reply_to":"9a57fde8_afc45a40","updated":"2017-01-12 22:59:50.000000000","message":"So, please let me check.  If a resource has 3 tags [\u0027foo\u0027, \u0027bar\u0027, \u0027foobar\u0027] and want to delete [\u0027foo\u0027, \u0027bar\u0027] in 3, we should do following operations, don\u0027t you?\n\nPattern1: Unset twice\n\n* unset --tag foo\n* unset --tag bar\n\nPattern2: Unset and Set\n\n* unset --all\n* set --tag foobar\n\nPattern3: Set once with --unset-all option\n\n* set --unset-all --tag foobar","commit_id":"7f3e6af7a0f75bf27204a830451825aa32c6e38b"}],"setup.cfg":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"eca999cbec185d1fc5d25df1aa77b2066f3768df","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    network_trunk_show \u003d neutronclient.osc.v2.trunk.network_trunk:ShowNetworkTrunk"},{"line_number":48,"context_line":"    network_trunk_unset \u003d neutronclient.osc.v2.trunk.network_trunk:UnsetNetworkTrunk"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"[build_sphinx]"},{"line_number":52,"context_line":"all_files \u003d 1"},{"line_number":53,"context_line":"build-dir \u003d doc/build"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"5a74a57a_b54ea094","line":50,"updated":"2016-11-23 01:38:45.000000000","message":"this looks extraneous, please remove.","commit_id":"591fe4d716bfc02ac4dd0ecf3519a350ac7e86de"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"2e0628d4f20986beff059cae3578853ca707aa43","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    network_subport_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkSubport"},{"line_number":40,"context_line":"    network_tag_add \u003d neutronclient.osc.v2.tag.network_tag:AddTag"},{"line_number":41,"context_line":"    network_tag_remove \u003d neutronclient.osc.v2.tag.network_tag:RemoveTag"},{"line_number":42,"context_line":"    network_tag_replace \u003d neutronclient.osc.v2.tag.network_tag:ReplaceTag"},{"line_number":43,"context_line":"    network_trunk_create \u003d neutronclient.osc.v2.trunk.network_trunk:CreateNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_delete \u003d neutronclient.osc.v2.trunk.network_trunk:DeleteNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkTrunk"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"5a74a57a_2cabe38a","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":23},"updated":"2016-11-30 18:41:17.000000000","message":"im just not sure about the addition of a new action here. I remember I had some similar troubles with the network trunk commands. Adding Richard on this. Will try to get more info.","commit_id":"41c4a39b98db8030d0597a35d1d845c05683f892"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"2be1eb935ea5bd15078900bfc524b9264e3797b3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    network_subport_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkSubport"},{"line_number":40,"context_line":"    network_tag_add \u003d neutronclient.osc.v2.tag.network_tag:AddTag"},{"line_number":41,"context_line":"    network_tag_remove \u003d neutronclient.osc.v2.tag.network_tag:RemoveTag"},{"line_number":42,"context_line":"    network_tag_replace \u003d neutronclient.osc.v2.tag.network_tag:ReplaceTag"},{"line_number":43,"context_line":"    network_trunk_create \u003d neutronclient.osc.v2.trunk.network_trunk:CreateNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_delete \u003d neutronclient.osc.v2.trunk.network_trunk:DeleteNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkTrunk"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"5a74a57a_8cc5d73e","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":23},"in_reply_to":"5a74a57a_2cabe38a","updated":"2016-11-30 18:44:22.000000000","message":"Please discuss new actions with the OSC team (dtroyer and stevemar).  Since such actions really should be consistent across all OSC plugins.","commit_id":"41c4a39b98db8030d0597a35d1d845c05683f892"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3a52374b843c7777445040d2a8887523bafb4867","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    network_subport_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkSubport"},{"line_number":40,"context_line":"    network_tag_add \u003d neutronclient.osc.v2.tag.network_tag:AddTag"},{"line_number":41,"context_line":"    network_tag_remove \u003d neutronclient.osc.v2.tag.network_tag:RemoveTag"},{"line_number":42,"context_line":"    network_tag_replace \u003d neutronclient.osc.v2.tag.network_tag:ReplaceTag"},{"line_number":43,"context_line":"    network_trunk_create \u003d neutronclient.osc.v2.trunk.network_trunk:CreateNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_delete \u003d neutronclient.osc.v2.trunk.network_trunk:DeleteNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkTrunk"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"5a74a57a_97e24400","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":23},"in_reply_to":"5a74a57a_370fb0e2","updated":"2016-11-30 19:03:17.000000000","message":"The server can handle an update, rather than a sequence of removes+adds. It\u0027s a shame to push complexity client side.","commit_id":"41c4a39b98db8030d0597a35d1d845c05683f892"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c08800e082c0e77164fb070ae17c40b3d35eb83c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    network_subport_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkSubport"},{"line_number":40,"context_line":"    network_tag_add \u003d neutronclient.osc.v2.tag.network_tag:AddTag"},{"line_number":41,"context_line":"    network_tag_remove \u003d neutronclient.osc.v2.tag.network_tag:RemoveTag"},{"line_number":42,"context_line":"    network_tag_replace \u003d neutronclient.osc.v2.tag.network_tag:ReplaceTag"},{"line_number":43,"context_line":"    network_trunk_create \u003d neutronclient.osc.v2.trunk.network_trunk:CreateNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_delete \u003d neutronclient.osc.v2.trunk.network_trunk:DeleteNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkTrunk"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"5a74a57a_b79f405e","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":23},"in_reply_to":"5a74a57a_370fb0e2","updated":"2016-11-30 19:04:07.000000000","message":"This is a bit different than the way we\u0027ve handled tags before, the command was always related to the resource, so:\n\n  volume set --tag X\n  volume unset --tag X\n\nI\u0027m not against a new command, but let\u0027s poke dtroyer first","commit_id":"41c4a39b98db8030d0597a35d1d845c05683f892"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"155af2d8ded2bf3337eb4099c75ec52854796b7e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    network_subport_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkSubport"},{"line_number":40,"context_line":"    network_tag_add \u003d neutronclient.osc.v2.tag.network_tag:AddTag"},{"line_number":41,"context_line":"    network_tag_remove \u003d neutronclient.osc.v2.tag.network_tag:RemoveTag"},{"line_number":42,"context_line":"    network_tag_replace \u003d neutronclient.osc.v2.tag.network_tag:ReplaceTag"},{"line_number":43,"context_line":"    network_trunk_create \u003d neutronclient.osc.v2.trunk.network_trunk:CreateNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_delete \u003d neutronclient.osc.v2.trunk.network_trunk:DeleteNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkTrunk"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"5a74a57a_370fb0e2","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":23},"in_reply_to":"5a74a57a_377c1072","updated":"2016-11-30 19:01:53.000000000","message":"is \u0027replace\u0027 necessary? isn\u0027t it just:\n\n  for N tags:\n    network tag remove N\n\n  network tag add X\n\nI guess the hard part is getting a list of all the tags?","commit_id":"41c4a39b98db8030d0597a35d1d845c05683f892"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"84da236f219d28aeb071af9e986aaeffcf16f69a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    network_subport_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkSubport"},{"line_number":40,"context_line":"    network_tag_add \u003d neutronclient.osc.v2.tag.network_tag:AddTag"},{"line_number":41,"context_line":"    network_tag_remove \u003d neutronclient.osc.v2.tag.network_tag:RemoveTag"},{"line_number":42,"context_line":"    network_tag_replace \u003d neutronclient.osc.v2.tag.network_tag:ReplaceTag"},{"line_number":43,"context_line":"    network_trunk_create \u003d neutronclient.osc.v2.trunk.network_trunk:CreateNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_delete \u003d neutronclient.osc.v2.trunk.network_trunk:DeleteNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkTrunk"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"5a74a57a_377c1072","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":23},"in_reply_to":"5a74a57a_8cc5d73e","updated":"2016-11-30 18:57:06.000000000","message":"If I look at [1], there\u0027s no such replace command. Perhaps this could be named network_tag_set, but I am not 100% convinced the name conveys the meaning. The safest thing to do is to drop this command altogether for now, though that would mean we\u0027d lose parity with the existing neutronclient tag CLI?\n\n[1] https://github.com/openstack/python-openstackclient/blob/master/setup.cfg","commit_id":"41c4a39b98db8030d0597a35d1d845c05683f892"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"ad3f98817c8267014f1f15e26842e9d53dee0a47","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    network_subport_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkSubport"},{"line_number":40,"context_line":"    network_tag_add \u003d neutronclient.osc.v2.tag.network_tag:AddTag"},{"line_number":41,"context_line":"    network_tag_remove \u003d neutronclient.osc.v2.tag.network_tag:RemoveTag"},{"line_number":42,"context_line":"    network_tag_replace \u003d neutronclient.osc.v2.tag.network_tag:ReplaceTag"},{"line_number":43,"context_line":"    network_trunk_create \u003d neutronclient.osc.v2.trunk.network_trunk:CreateNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_delete \u003d neutronclient.osc.v2.trunk.network_trunk:DeleteNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_list \u003d neutronclient.osc.v2.trunk.network_trunk:ListNetworkTrunk"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"3a71b18c_f0c88e57","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":23},"in_reply_to":"5a74a57a_b79f405e","updated":"2016-12-11 04:35:18.000000000","message":"As discussed during OSC IRC meeting.\n\nos network tag set blah\nos network tag unset blah\n\nThe replace command has been changed out for an option with the set command\n\nos network tag set --unset-all blah\nUnsets all existing tags, and replaces with whatever is inputted.\nUsing the --unset-all tag also modifies the \u0027set\u0027 functionality by allowing multiple --tag names","commit_id":"41c4a39b98db8030d0597a35d1d845c05683f892"}]}
