)]}'
{"openstackclient/network/common.py":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"7ba8d391f052296aa9d4af7af3ad6843ecfb0bf9","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return parser"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @utils.log_method(base_logger)"},{"line_number":63,"context_line":"    def update_parser_compute(self, parser):"},{"line_number":64,"context_line":"        \"\"\"Default is no updates to parser.\"\"\""},{"line_number":65,"context_line":"        return parser"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_b0e79711","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":29},"updated":"2015-12-23 06:34:54.000000000","message":"So, IIUC update_parser_network/compute are for specific options in network/compute, right ?\n\nIf so, I\u0027m OK with this. :)","commit_id":"e719fbbc109b6fd01a294c29f6f538fbf309a48f"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"bc589622ab969ec2661edfe7ef93a87ad0374366","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return parser"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @utils.log_method(base_logger)"},{"line_number":63,"context_line":"    def update_parser_compute(self, parser):"},{"line_number":64,"context_line":"        \"\"\"Default is no updates to parser.\"\"\""},{"line_number":65,"context_line":"        return parser"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_c137e8ae","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":29},"in_reply_to":"1a7b0d38_b0e79711","updated":"2015-12-23 14:01:01.000000000","message":"That is correct.","commit_id":"e719fbbc109b6fd01a294c29f6f538fbf309a48f"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e22287736a8984a05b08131e0f9d3ff1a406e4e7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from cliff import command"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstackclient.common import utils"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_830ca643","line":18,"updated":"2016-01-27 15:59:21.000000000","message":"Use the new openstackclient.command module now","commit_id":"ec8307e76a02af35128d53c6be5b264ae2c90357"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"8ff3a0e8ed894d4dda9d732c1cff90a6ac27d611","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from cliff import command"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstackclient.common import utils"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_344de772","line":18,"in_reply_to":"7a5de9d1_830ca643","updated":"2016-01-27 18:04:20.000000000","message":"Done","commit_id":"ec8307e76a02af35128d53c6be5b264ae2c90357"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e22287736a8984a05b08131e0f9d3ff1a406e4e7","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @abc.abstractmethod"},{"line_number":63,"context_line":"    def take_action_network(self, client, parsed_args):"},{"line_number":64,"context_line":"        \"\"\"Override to do something useful.\"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @abc.abstractmethod"},{"line_number":67,"context_line":"    def take_action_compute(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_037996fc","line":64,"updated":"2016-01-27 15:59:21.000000000","message":"I know people hate \u0027unnecessary\u0027 returns, but an totally empty method block seems sloppy.  Either a return or pass here (and below)?  I\u0027ll always favor clarity in cases like this...","commit_id":"ec8307e76a02af35128d53c6be5b264ae2c90357"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"8ff3a0e8ed894d4dda9d732c1cff90a6ac27d611","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @abc.abstractmethod"},{"line_number":63,"context_line":"    def take_action_network(self, client, parsed_args):"},{"line_number":64,"context_line":"        \"\"\"Override to do something useful.\"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @abc.abstractmethod"},{"line_number":67,"context_line":"    def take_action_compute(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_1181dd4a","line":64,"in_reply_to":"7a5de9d1_037996fc","updated":"2016-01-27 18:04:20.000000000","message":"Done","commit_id":"ec8307e76a02af35128d53c6be5b264ae2c90357"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"08297186923c2e647863c63ac6412e1a663a62f0","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":21,"context_line":"class NetworkAndComputeCommand(command.Command):"},{"line_number":22,"context_line":"    \"\"\"Network and Compute Command\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def take_action(self, parsed_args):"},{"line_number":25,"context_line":"        if self.app.client_manager.is_network_endpoint_enabled():"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a5ae5dd_f7e73e3e","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":37},"updated":"2016-02-03 17:57:20.000000000","message":"this could use a better docstring explaining it\u0027s purpose","commit_id":"580b0aff8810f234adcf364b0fe151b6e3c58182"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"c801d7dbaf2a76c93bc66ef32e575916f4e3059a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":21,"context_line":"class NetworkAndComputeCommand(command.Command):"},{"line_number":22,"context_line":"    \"\"\"Network and Compute Command\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def take_action(self, parsed_args):"},{"line_number":25,"context_line":"        if self.app.client_manager.is_network_endpoint_enabled():"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a5ae5dd_a3bc1f6d","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":37},"in_reply_to":"5a5ae5dd_f7e73e3e","updated":"2016-02-03 21:39:52.000000000","message":"Thanks Steve, I\u0027ll be sure to fix in the next patch set.","commit_id":"580b0aff8810f234adcf364b0fe151b6e3c58182"}],"openstackclient/network/v2/security_group.py":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"a4ab7339f2a858132db286980cfcd1da66089ddc","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        parser.add_argument("},{"line_number":30,"context_line":"            \u0027group\u0027,"},{"line_number":31,"context_line":"            metavar\u003d\u0027\u003cgroup\u003e\u0027,"},{"line_number":32,"context_line":"            help\u003d\u0027Security group to delete (name or ID)\u0027,"},{"line_number":33,"context_line":"        )"},{"line_number":34,"context_line":"        return parser"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a7e1126_2e29639e","line":32,"range":{"start_line":32,"start_character":18,"end_line":32,"end_character":32},"updated":"2015-12-21 11:28:17.000000000","message":"BTW, the delete commands are all implemented to be able to delete multiple objects. So would you please also make it delete more than one groups ?","commit_id":"e7f8aeaf6ac368c93bf6ce7b26ed6711c2b51287"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"ab38354996e981b9193e0862411047d8d36bf5c0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        parser.add_argument("},{"line_number":30,"context_line":"            \u0027group\u0027,"},{"line_number":31,"context_line":"            metavar\u003d\u0027\u003cgroup\u003e\u0027,"},{"line_number":32,"context_line":"            help\u003d\u0027Security group to delete (name or ID)\u0027,"},{"line_number":33,"context_line":"        )"},{"line_number":34,"context_line":"        return parser"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_1fc4933e","line":32,"range":{"start_line":32,"start_character":18,"end_line":32,"end_character":32},"in_reply_to":"3a7e1126_2e29639e","updated":"2015-12-22 16:05:10.000000000","message":"I have added multiple delete support to my TODO list.  I will handle in a future patch set.","commit_id":"e7f8aeaf6ac368c93bf6ce7b26ed6711c2b51287"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9aa886069528ab7b29833c16e49af497c0fcf0e6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def take_action_network(self, client, parsed_args):"},{"line_number":38,"context_line":"        obj \u003d client.find_security_group(parsed_args.group)"},{"line_number":39,"context_line":"        client.delete_security_group(obj)"},{"line_number":40,"context_line":"        return"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @utils.log_method(log)"},{"line_number":43,"context_line":"    def take_action_compute(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a7e1126_1d3c312e","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":14},"updated":"2015-12-18 07:43:08.000000000","message":"you can remove these returns now","commit_id":"e7f8aeaf6ac368c93bf6ce7b26ed6711c2b51287"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"a4ab7339f2a858132db286980cfcd1da66089ddc","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def take_action_network(self, client, parsed_args):"},{"line_number":38,"context_line":"        obj \u003d client.find_security_group(parsed_args.group)"},{"line_number":39,"context_line":"        client.delete_security_group(obj)"},{"line_number":40,"context_line":"        return"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @utils.log_method(log)"},{"line_number":43,"context_line":"    def take_action_compute(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a7e1126_0ef7c759","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":14},"in_reply_to":"3a7e1126_1d3c312e","updated":"2015-12-21 11:28:17.000000000","message":"+1","commit_id":"e7f8aeaf6ac368c93bf6ce7b26ed6711c2b51287"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"ab38354996e981b9193e0862411047d8d36bf5c0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def take_action_network(self, client, parsed_args):"},{"line_number":38,"context_line":"        obj \u003d client.find_security_group(parsed_args.group)"},{"line_number":39,"context_line":"        client.delete_security_group(obj)"},{"line_number":40,"context_line":"        return"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @utils.log_method(log)"},{"line_number":43,"context_line":"    def take_action_compute(self, client, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a7e1126_95070618","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":14},"in_reply_to":"3a7e1126_1d3c312e","updated":"2015-12-22 16:05:10.000000000","message":"Done","commit_id":"e7f8aeaf6ac368c93bf6ce7b26ed6711c2b51287"}],"setup.cfg":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3936dec9912b9c1811025029438658a1c900677","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    router_list \u003d openstackclient.network.v2.router:ListRouter"},{"line_number":337,"context_line":"    router_set \u003d openstackclient.network.v2.router:SetRouter"},{"line_number":338,"context_line":"    router_show \u003d openstackclient.network.v2.router:ShowRouter"},{"line_number":339,"context_line":"    security_group_delete \u003d openstackclient.network.v2.security_group:DeleteSecurityGroup"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"openstack.object_store.v1 \u003d"},{"line_number":342,"context_line":"    object_store_account_set \u003d openstackclient.object.v1.account:SetAccount"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"1a7b0d38_41a502a0","line":339,"range":{"start_line":339,"start_character":4,"end_line":339,"end_character":25},"updated":"2015-12-25 09:09:00.000000000","message":"what happened if we are using nova-network? I think this command will not exist at all.","commit_id":"e719fbbc109b6fd01a294c29f6f538fbf309a48f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"c6fc532f240612a941f749389b4795305da8c929","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    router_list \u003d openstackclient.network.v2.router:ListRouter"},{"line_number":337,"context_line":"    router_set \u003d openstackclient.network.v2.router:SetRouter"},{"line_number":338,"context_line":"    router_show \u003d openstackclient.network.v2.router:ShowRouter"},{"line_number":339,"context_line":"    security_group_delete \u003d openstackclient.network.v2.security_group:DeleteSecurityGroup"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"openstack.object_store.v1 \u003d"},{"line_number":342,"context_line":"    object_store_account_set \u003d openstackclient.object.v1.account:SetAccount"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"1a7b0d38_19df2f0e","line":339,"range":{"start_line":339,"start_character":4,"end_line":339,"end_character":25},"in_reply_to":"1a7b0d38_2f5e6a12","updated":"2015-12-29 01:19:27.000000000","message":"+1","commit_id":"e719fbbc109b6fd01a294c29f6f538fbf309a48f"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"7f9b68cfcd4933c3cef6cc7074fd6471f54a897a","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    router_list \u003d openstackclient.network.v2.router:ListRouter"},{"line_number":337,"context_line":"    router_set \u003d openstackclient.network.v2.router:SetRouter"},{"line_number":338,"context_line":"    router_show \u003d openstackclient.network.v2.router:ShowRouter"},{"line_number":339,"context_line":"    security_group_delete \u003d openstackclient.network.v2.security_group:DeleteSecurityGroup"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"openstack.object_store.v1 \u003d"},{"line_number":342,"context_line":"    object_store_account_set \u003d openstackclient.object.v1.account:SetAccount"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"1a7b0d38_7d4f5a6b","line":339,"range":{"start_line":339,"start_character":4,"end_line":339,"end_character":25},"in_reply_to":"1a7b0d38_41a502a0","updated":"2015-12-28 02:43:04.000000000","message":"No, I don\u0027t think so. \n\nIIUC, DeleteSecurityGroup has implemented take_action_network/compute(), and take_action() in NetworkAndComputeCommand will call the compute one if we are using nova-network.","commit_id":"e719fbbc109b6fd01a294c29f6f538fbf309a48f"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"bd93d57252aa807e8438b1aad21f78199f85798e","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    router_list \u003d openstackclient.network.v2.router:ListRouter"},{"line_number":337,"context_line":"    router_set \u003d openstackclient.network.v2.router:SetRouter"},{"line_number":338,"context_line":"    router_show \u003d openstackclient.network.v2.router:ShowRouter"},{"line_number":339,"context_line":"    security_group_delete \u003d openstackclient.network.v2.security_group:DeleteSecurityGroup"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"openstack.object_store.v1 \u003d"},{"line_number":342,"context_line":"    object_store_account_set \u003d openstackclient.object.v1.account:SetAccount"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"1a7b0d38_2f5e6a12","line":339,"range":{"start_line":339,"start_character":4,"end_line":339,"end_character":25},"in_reply_to":"1a7b0d38_41a502a0","updated":"2015-12-28 14:33:36.000000000","message":"Please re-review the patch set.  When nova network is enabled, there will still be a security group delete command.  The code will go down the compute parser and action paths.","commit_id":"e719fbbc109b6fd01a294c29f6f538fbf309a48f"}]}
