)]}'
{"openstackclient/network/utils.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"02c38a735f7a678cc7051a048cf7a805dd9e6eb3","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# Transform compute security group rule for display."},{"line_number":16,"context_line":"def transform_compute_security_group_rule(sgroup):"},{"line_number":17,"context_line":"    info \u003d {}"},{"line_number":18,"context_line":"    info.update(sgroup)"},{"line_number":19,"context_line":"    from_port \u003d info.pop(\u0027from_port\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_bcf6c8f6","line":16,"range":{"start_line":16,"start_character":42,"end_line":16,"end_character":48},"updated":"2016-03-03 09:15:03.000000000","message":"nit: s/sgroup/sg_rules/\n\nargument should be security group rules, not security group, \"sg_rules\" is more readable.","commit_id":"7a662b81d2b03730ccbbe6327c565bb64a8f17d7"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"473b2ecff48e99178395bebc35175d56be32eeb2","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# Transform compute security group rule for display."},{"line_number":16,"context_line":"def transform_compute_security_group_rule(sgroup):"},{"line_number":17,"context_line":"    info \u003d {}"},{"line_number":18,"context_line":"    info.update(sgroup)"},{"line_number":19,"context_line":"    from_port \u003d info.pop(\u0027from_port\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_66cf7429","line":16,"range":{"start_line":16,"start_character":42,"end_line":16,"end_character":48},"in_reply_to":"7af24918_bcf6c8f6","updated":"2016-03-03 14:45:30.000000000","message":"Done","commit_id":"7a662b81d2b03730ccbbe6327c565bb64a8f17d7"}],"openstackclient/network/v2/security_group.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"02c38a735f7a678cc7051a048cf7a805dd9e6eb3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    return utils.format_list_of_dicts(sg_rules)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _format_compute_security_group_rule(sgroup):"},{"line_number":38,"context_line":"    info \u003d network_utils.transform_compute_security_group_rule(sgroup)"},{"line_number":39,"context_line":"    # Trim parent security group ID since caller has this information."},{"line_number":40,"context_line":"    info.pop(\u0027parent_group_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_7c89e074","line":37,"range":{"start_line":37,"start_character":40,"end_line":37,"end_character":46},"updated":"2016-03-03 09:15:03.000000000","message":"nit: s/sgroup/sg_rules/\n\nargument should be security group rules, not security group, \"sg_rules\" is more readable.","commit_id":"7a662b81d2b03730ccbbe6327c565bb64a8f17d7"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"473b2ecff48e99178395bebc35175d56be32eeb2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    return utils.format_list_of_dicts(sg_rules)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _format_compute_security_group_rule(sgroup):"},{"line_number":38,"context_line":"    info \u003d network_utils.transform_compute_security_group_rule(sgroup)"},{"line_number":39,"context_line":"    # Trim parent security group ID since caller has this information."},{"line_number":40,"context_line":"    info.pop(\u0027parent_group_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_26972ced","line":37,"range":{"start_line":37,"start_character":40,"end_line":37,"end_character":46},"in_reply_to":"7af24918_7c89e074","updated":"2016-03-03 14:45:30.000000000","message":"Done","commit_id":"7a662b81d2b03730ccbbe6327c565bb64a8f17d7"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"18694fd4042d1746798d1287ec36290a48dee608","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    return utils.format_list_of_dicts(sg_rules)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _format_compute_security_group_rule(sg_rule):"},{"line_number":38,"context_line":"    info \u003d network_utils.transform_compute_security_group_rule(sg_rule)"},{"line_number":39,"context_line":"    # Trim parent security group ID since caller has this information."},{"line_number":40,"context_line":"    info.pop(\u0027parent_group_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_7c458315","line":37,"range":{"start_line":37,"start_character":35,"end_line":37,"end_character":39},"updated":"2016-03-09 05:44:42.000000000","message":"Maybe \"rules\" to keep the consistence with _format_network_security_group_rules() above.","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"1154808aad54fd30a01e9b9f55cc14bf9cbb714f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    return utils.format_list_of_dicts(sg_rules)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _format_compute_security_group_rule(sg_rule):"},{"line_number":38,"context_line":"    info \u003d network_utils.transform_compute_security_group_rule(sg_rule)"},{"line_number":39,"context_line":"    # Trim parent security group ID since caller has this information."},{"line_number":40,"context_line":"    info.pop(\u0027parent_group_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_5c98261c","line":37,"range":{"start_line":37,"start_character":35,"end_line":37,"end_character":39},"in_reply_to":"5aef4532_7c458315","updated":"2016-03-10 13:39:02.000000000","message":"I will add a formatter for compute rules.","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"18694fd4042d1746798d1287ec36290a48dee608","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        return (columns, data)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def take_action_compute(self, client, parsed_args):"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        info \u003d {}"},{"line_number":214,"context_line":"        info.update(utils.find_resource("},{"line_number":215,"context_line":"            client.security_groups,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_bc470b1c","line":212,"updated":"2016-03-09 05:44:42.000000000","message":"Redundant empty line.","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"59457fc4ff3d17bf6435d638d0536fd348c840f1","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        return (columns, data)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def take_action_compute(self, client, parsed_args):"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        info \u003d {}"},{"line_number":214,"context_line":"        info.update(utils.find_resource("},{"line_number":215,"context_line":"            client.security_groups,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_a41e9b6d","line":212,"in_reply_to":"5aef4532_bc470b1c","updated":"2016-03-09 20:17:03.000000000","message":"Done","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"18694fd4042d1746798d1287ec36290a48dee608","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        for r in info[\u0027rules\u0027]:"},{"line_number":220,"context_line":"            rules.append(_format_compute_security_group_rule(r))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        # Format rules into a list of strings"},{"line_number":223,"context_line":"        info.update("},{"line_number":224,"context_line":"            {\u0027rules\u0027: utils.format_list(rules, separator\u003d\u0027\\n\u0027)}"},{"line_number":225,"context_line":"        )"},{"line_number":226,"context_line":"        # Map \u0027tenant_id\u0027 column to \u0027project_id\u0027"},{"line_number":227,"context_line":"        info.update("},{"line_number":228,"context_line":"            {\u0027project_id\u0027: info.pop(\u0027tenant_id\u0027)}"},{"line_number":229,"context_line":"        )"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        return zip(*sorted(six.iteritems(info)))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_fc687389","line":229,"range":{"start_line":222,"start_character":0,"end_line":229,"end_character":9},"updated":"2016-03-09 05:44:42.000000000","message":"Can we put all of these in a formatter ?","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"1154808aad54fd30a01e9b9f55cc14bf9cbb714f","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        for r in info[\u0027rules\u0027]:"},{"line_number":220,"context_line":"            rules.append(_format_compute_security_group_rule(r))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        # Format rules into a list of strings"},{"line_number":223,"context_line":"        info.update("},{"line_number":224,"context_line":"            {\u0027rules\u0027: utils.format_list(rules, separator\u003d\u0027\\n\u0027)}"},{"line_number":225,"context_line":"        )"},{"line_number":226,"context_line":"        # Map \u0027tenant_id\u0027 column to \u0027project_id\u0027"},{"line_number":227,"context_line":"        info.update("},{"line_number":228,"context_line":"            {\u0027project_id\u0027: info.pop(\u0027tenant_id\u0027)}"},{"line_number":229,"context_line":"        )"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        return zip(*sorted(six.iteritems(info)))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_7ca1a245","line":229,"range":{"start_line":222,"start_character":0,"end_line":229,"end_character":9},"in_reply_to":"5aef4532_fc687389","updated":"2016-03-10 13:39:02.000000000","message":"Done","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"18694fd4042d1746798d1287ec36290a48dee608","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            {\u0027project_id\u0027: info.pop(\u0027tenant_id\u0027)}"},{"line_number":229,"context_line":"        )"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        return zip(*sorted(six.iteritems(info)))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_bc6eeb93","line":231,"range":{"start_line":231,"start_character":15,"end_line":231,"end_character":48},"updated":"2016-03-09 05:44:42.000000000","message":"I\u0027d like to keep the return value the same as take_action_network(), return (columns, data).\n\nThere are many same problems in the source code, and I\u0027m fixing all of them.\n\nWe can obtain columns by columns \u003d _get_columns(obj._info), and the data by utils.get_dict_properties().\n\nThis will keep network and compute code more consistent. :)","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"1154808aad54fd30a01e9b9f55cc14bf9cbb714f","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            {\u0027project_id\u0027: info.pop(\u0027tenant_id\u0027)}"},{"line_number":229,"context_line":"        )"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        return zip(*sorted(six.iteritems(info)))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_bc87aab3","line":231,"range":{"start_line":231,"start_character":15,"end_line":231,"end_character":48},"in_reply_to":"5aef4532_bc6eeb93","updated":"2016-03-10 13:39:02.000000000","message":"Done","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"}],"openstackclient/tests/network/v2/test_security_group.py":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"18694fd4042d1746798d1287ec36290a48dee608","unresolved":false,"context_lines":[{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        self.network.find_security_group.assert_called_once_with("},{"line_number":422,"context_line":"            self._security_group.id, ignore_missing\u003dFalse)"},{"line_number":423,"context_line":"        self.assertEqual(tuple(self.columns), columns)"},{"line_number":424,"context_line":"        self.assertEqual(self.data, data)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_7c862314","line":423,"range":{"start_line":423,"start_character":25,"end_line":423,"end_character":30},"updated":"2016-03-09 05:44:42.000000000","message":"Not necessary, self.columns is a tuple.","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"59457fc4ff3d17bf6435d638d0536fd348c840f1","unresolved":false,"context_lines":[{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        self.network.find_security_group.assert_called_once_with("},{"line_number":422,"context_line":"            self._security_group.id, ignore_missing\u003dFalse)"},{"line_number":423,"context_line":"        self.assertEqual(tuple(self.columns), columns)"},{"line_number":424,"context_line":"        self.assertEqual(self.data, data)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_dfea9273","line":423,"range":{"start_line":423,"start_character":25,"end_line":423,"end_character":30},"in_reply_to":"5aef4532_7c862314","updated":"2016-03-09 20:17:03.000000000","message":"Done","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"18694fd4042d1746798d1287ec36290a48dee608","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        \u0027id\u0027,"},{"line_number":442,"context_line":"        \u0027name\u0027,"},{"line_number":443,"context_line":"        \u0027project_id\u0027,"},{"line_number":444,"context_line":"        \u0027rules\u0027,"},{"line_number":445,"context_line":"    )"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    data \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_5c89a725","line":444,"range":{"start_line":444,"start_character":9,"end_line":444,"end_character":14},"updated":"2016-03-09 05:44:42.000000000","message":"I suggest change this to \"security_group_rules\" too, with the same formatter.","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"59457fc4ff3d17bf6435d638d0536fd348c840f1","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        \u0027id\u0027,"},{"line_number":442,"context_line":"        \u0027name\u0027,"},{"line_number":443,"context_line":"        \u0027project_id\u0027,"},{"line_number":444,"context_line":"        \u0027rules\u0027,"},{"line_number":445,"context_line":"    )"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    data \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_7f1edebb","line":444,"range":{"start_line":444,"start_character":9,"end_line":444,"end_character":14},"in_reply_to":"5aef4532_5c89a725","updated":"2016-03-09 20:17:03.000000000","message":"Compute returns different data than network.  I don\u0027t think it makes sense to test them the same.  Or where you suggesting something else?","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"}],"releasenotes/notes/bug-1519511-74bab0e0d32db043.yaml":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"18694fd4042d1746798d1287ec36290a48dee608","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    [Bug `1519511 \u003chttps://bugs.launchpad.net/bugs/1519511\u003e`_]"},{"line_number":11,"context_line":"  - The ``security group show`` command now uses Network v2 when"},{"line_number":12,"context_line":"    enabled which results in changes to the security group rule output."},{"line_number":13,"context_line":"    The ``rules`` field changed to ``security_group_rules``."},{"line_number":14,"context_line":"    [Bug `1519511 \u003chttps://bugs.launchpad.net/bugs/1519511\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5aef4532_bcd9cb85","line":13,"range":{"start_line":13,"start_character":24,"end_line":13,"end_character":31},"updated":"2016-03-09 05:44:42.000000000","message":"Do we need to update backwards-incompatible.rst ?","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"59457fc4ff3d17bf6435d638d0536fd348c840f1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    [Bug `1519511 \u003chttps://bugs.launchpad.net/bugs/1519511\u003e`_]"},{"line_number":11,"context_line":"  - The ``security group show`` command now uses Network v2 when"},{"line_number":12,"context_line":"    enabled which results in changes to the security group rule output."},{"line_number":13,"context_line":"    The ``rules`` field changed to ``security_group_rules``."},{"line_number":14,"context_line":"    [Bug `1519511 \u003chttps://bugs.launchpad.net/bugs/1519511\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5aef4532_bf4b4686","line":13,"range":{"start_line":13,"start_character":24,"end_line":13,"end_character":31},"in_reply_to":"5aef4532_bcd9cb85","updated":"2016-03-09 20:17:03.000000000","message":"I\u0027ll defer to Dean on this.","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"1154808aad54fd30a01e9b9f55cc14bf9cbb714f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    [Bug `1519511 \u003chttps://bugs.launchpad.net/bugs/1519511\u003e`_]"},{"line_number":11,"context_line":"  - The ``security group show`` command now uses Network v2 when"},{"line_number":12,"context_line":"    enabled which results in changes to the security group rule output."},{"line_number":13,"context_line":"    The ``rules`` field changed to ``security_group_rules``."},{"line_number":14,"context_line":"    [Bug `1519511 \u003chttps://bugs.launchpad.net/bugs/1519511\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5aef4532_bc75eacb","line":13,"range":{"start_line":13,"start_character":24,"end_line":13,"end_character":31},"in_reply_to":"5aef4532_bf4b4686","updated":"2016-03-10 13:39:02.000000000","message":"I spoke with Dean and we decided to maintain the \"rules\" field for compute and network to avoid the incompatible change.","commit_id":"bfc0bda17f897a10d366236070bd3f3b3e3d413d"}]}
