)]}'
{"troveclient/osc/v1/database_volume_types.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"4c440688050ed67e868086d8381cefdcd8b3a55c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            metavar\u003d\u0027\u003cdatastore_version_id\u003e\u0027,"},{"line_number":39,"context_line":"            type\u003dstr,"},{"line_number":40,"context_line":"            default\u003dNone,"},{"line_number":41,"context_line":"            help\u003d_(\u0027Name of log to publish.\u0027)"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":"        return parser"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_223134a3","line":41,"range":{"start_line":41,"start_character":19,"end_line":41,"end_character":44},"updated":"2018-01-24 02:37:38.000000000","message":"?","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"4c440688050ed67e868086d8381cefdcd8b3a55c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        return parser"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def take_action(self, parsed_args):"},{"line_number":46,"context_line":"        db_volumes \u003d self.app.client_manager.database.volume_types"},{"line_number":47,"context_line":"        if parsed_args.datastore_type and parsed_args.datastore_version_id:"},{"line_number":48,"context_line":"            volume_types \u003d db_volumes.\\"},{"line_number":49,"context_line":"                list_datastore_version_associated_volume_types("}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_22a4d4b8","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":18},"updated":"2018-01-24 02:37:38.000000000","message":"May it better to use \u0027db_volume_types\u0027 or \u0027db_vol_types\u0027? \u0027db_volumes\u0027 may lead people thinking troveclient can also manage Cinder volumes.","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":27577,"name":"caishan","email":"caishan1993@foxmail.com","username":"caishan"},"change_message_id":"fd33f88dfffb2057d57e2f4a816ed95e7b2012e9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        return parser"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def take_action(self, parsed_args):"},{"line_number":46,"context_line":"        db_volumes \u003d self.app.client_manager.database.volume_types"},{"line_number":47,"context_line":"        if parsed_args.datastore_type and parsed_args.datastore_version_id:"},{"line_number":48,"context_line":"            volume_types \u003d db_volumes.\\"},{"line_number":49,"context_line":"                list_datastore_version_associated_volume_types("}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_7dae01e8","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":18},"in_reply_to":"7f96bb07_22a4d4b8","updated":"2018-01-24 06:15:17.000000000","message":"yes, you are right, good idea","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"4c440688050ed67e868086d8381cefdcd8b3a55c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            raise exceptions.MissingArgs([\u0027datastore_type\u0027,"},{"line_number":58,"context_line":"                                          \u0027datastore_version_id\u0027])"},{"line_number":59,"context_line":"        _types \u003d []"},{"line_number":60,"context_line":"        for t in volume_types:"},{"line_number":61,"context_line":"            if not t.id and hasattr(t, \u0027str_id\u0027):"},{"line_number":62,"context_line":"                t.id \u003d t.str_id"},{"line_number":63,"context_line":"            _types.append(utils.get_item_properties(t, self.columns))"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return self.columns, _types"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_c234104d","line":62,"range":{"start_line":60,"start_character":8,"end_line":62,"end_character":31},"updated":"2018-01-24 02:37:38.000000000","message":"? volume_types api response should has the property \u0027id\u0027.","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":27577,"name":"caishan","email":"caishan1993@foxmail.com","username":"caishan"},"change_message_id":"fd33f88dfffb2057d57e2f4a816ed95e7b2012e9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            raise exceptions.MissingArgs([\u0027datastore_type\u0027,"},{"line_number":58,"context_line":"                                          \u0027datastore_version_id\u0027])"},{"line_number":59,"context_line":"        _types \u003d []"},{"line_number":60,"context_line":"        for t in volume_types:"},{"line_number":61,"context_line":"            if not t.id and hasattr(t, \u0027str_id\u0027):"},{"line_number":62,"context_line":"                t.id \u003d t.str_id"},{"line_number":63,"context_line":"            _types.append(utils.get_item_properties(t, self.columns))"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return self.columns, _types"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_dd6f15fa","line":62,"range":{"start_line":60,"start_character":8,"end_line":62,"end_character":31},"in_reply_to":"7f96bb07_c234104d","updated":"2018-01-24 06:15:17.000000000","message":"so ,this is unnesscessary?","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"}],"troveclient/tests/osc/v1/fakes.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"4c440688050ed67e868086d8381cefdcd8b3a55c","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    fake_volume_types \u003d fakes.FakeHTTPClient().get_volume_types()[2]["},{"line_number":176,"context_line":"        \u0027volume_types\u0027]"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def get_volume_types1(self):"},{"line_number":179,"context_line":"        return volume_types.VolumeType(None, self.fake_volume_types[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_e2a10c48","line":178,"updated":"2018-01-24 02:37:38.000000000","message":"To simulate volume_type_list, we need a fake method to fetch all fake volume types, not getting one volume type.","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"5ba6a01f7eea4b28f38645bb405ab7ea4760af27","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    fake_volume_types \u003d fakes.FakeHTTPClient().get_volume_types()[2]["},{"line_number":176,"context_line":"        \u0027volume_types\u0027]"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    fake_volume_types2 \u003d fakes.FakeHTTPClient().\\"},{"line_number":179,"context_line":"        get_datastores_mysql_versions_some_version_id_volume_types()[2]["},{"line_number":180,"context_line":"        \u0027volume_types\u0027]"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def get_volume_types1(self):"},{"line_number":183,"context_line":"        return volume_types.VolumeType(None, self.fake_volume_types[0])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_3d014b07","line":180,"range":{"start_line":178,"start_character":4,"end_line":180,"end_character":23},"updated":"2018-01-24 12:11:38.000000000","message":"get_datastores_mysql_version_some_version_id_volume_types just returns get_volume_types, so this is not needed.","commit_id":"b04fae9e75910aaa094bcc8716f66d11f2b2a3f1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"5ba6a01f7eea4b28f38645bb405ab7ea4760af27","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        get_datastores_mysql_versions_some_version_id_volume_types()[2]["},{"line_number":180,"context_line":"        \u0027volume_types\u0027]"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def get_volume_types1(self):"},{"line_number":183,"context_line":"        return volume_types.VolumeType(None, self.fake_volume_types[0])"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def get_volume_types2(self):"},{"line_number":186,"context_line":"        return volume_types.VolumeType(None, self.fake_volume_types2[1])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_88393bd8","line":186,"range":{"start_line":182,"start_character":0,"end_line":186,"end_character":72},"updated":"2018-01-24 12:11:38.000000000","message":"I talked about this in the previous comment, to test ListDatabaseVolumeTypes, we only need the return value of the fake get_volume_types.\n\nThere shouldn\u0027t be an get_volume_types1 and get_volume_types2, when doing volume type show, we may need get_volume_type1(without the \u0027s\u0027).","commit_id":"b04fae9e75910aaa094bcc8716f66d11f2b2a3f1"}],"troveclient/tests/osc/v1/test_database_volume_types.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"4c440688050ed67e868086d8381cefdcd8b3a55c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(TestVolumeTypesList, self).setUp()"},{"line_number":33,"context_line":"        self.cmd \u003d database_volume_types.ListDatabaseVolumeTypes(self.app,"},{"line_number":34,"context_line":"                                                                 None)"},{"line_number":35,"context_line":"        self.data \u003d [self.fake_volume_types.get_volume_types1()]"},{"line_number":36,"context_line":"        self.volume_types_client.list.return_value \u003d self.data"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_volume_types_list_defaults(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_a271c4e0","line":35,"updated":"2018-01-24 02:37:38.000000000","message":"See the comment in troveclient/tests/osc/v1/fakes.py, should get all fake volume types here.","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"4c440688050ed67e868086d8381cefdcd8b3a55c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.data \u003d [self.fake_volume_types.get_volume_types1()]"},{"line_number":36,"context_line":"        self.volume_types_client.list.return_value \u003d self.data"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_volume_types_list_defaults(self):"},{"line_number":39,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, [], [])"},{"line_number":40,"context_line":"        columns, values \u003d self.cmd.take_action(parsed_args)"},{"line_number":41,"context_line":"        self.volume_types_client.list.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_c213b065","line":38,"updated":"2018-01-24 02:37:38.000000000","message":"As volume_type_list actually will call different troveclient methods based on the cli arguments, we should also add different test cases for those. And one more test case for the exception raising branch.","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":27577,"name":"caishan","email":"caishan1993@foxmail.com","username":"caishan"},"change_message_id":"fd33f88dfffb2057d57e2f4a816ed95e7b2012e9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.data \u003d [self.fake_volume_types.get_volume_types1()]"},{"line_number":36,"context_line":"        self.volume_types_client.list.return_value \u003d self.data"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_volume_types_list_defaults(self):"},{"line_number":39,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, [], [])"},{"line_number":40,"context_line":"        columns, values \u003d self.cmd.take_action(parsed_args)"},{"line_number":41,"context_line":"        self.volume_types_client.list.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_6fb1648f","line":38,"in_reply_to":"7f96bb07_c213b065","updated":"2018-01-24 06:15:17.000000000","message":"you mean add one more test case for cli arguments supplied?","commit_id":"ef6cfb327bb0d6d70520e2d6d17beb8f7cf04af1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"5ba6a01f7eea4b28f38645bb405ab7ea4760af27","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestVolumeTypesList(TestVolumeTypes):"},{"line_number":28,"context_line":"    columns \u003d database_volume_types.ListDatabaseVolumeTypes.columns"},{"line_number":29,"context_line":"    values1 \u003d (\u00271\u0027, \u0027vt_1\u0027, False, \u0027Volume type #1\u0027)"},{"line_number":30,"context_line":"    values2 \u003d (\u002710\u0027, \u0027volume_type_2\u0027, True, \u0027Volume type #2\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super(TestVolumeTypesList, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_28e34736","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":61},"updated":"2018-01-24 12:11:38.000000000","message":"It should be a list of tuple here, as we have two volume types in the fake get_volume_types return value.","commit_id":"b04fae9e75910aaa094bcc8716f66d11f2b2a3f1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"5ba6a01f7eea4b28f38645bb405ab7ea4760af27","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.cmd \u003d database_volume_types.ListDatabaseVolumeTypes(self.app,"},{"line_number":35,"context_line":"                                                                 None)"},{"line_number":36,"context_line":"        self.data \u003d [self.fake_volume_types.get_volume_types1()]"},{"line_number":37,"context_line":"        self.data2 \u003d [self.fake_volume_types.get_volume_types2()]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_volume_types_list_defaults(self):"},{"line_number":40,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, [], [])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_48b2534b","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":65},"updated":"2018-01-24 12:11:38.000000000","message":"See the comment in troveclient/tests/osc/v1/fakes.py, should get all fake volume types here.","commit_id":"b04fae9e75910aaa094bcc8716f66d11f2b2a3f1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"5ba6a01f7eea4b28f38645bb405ab7ea4760af27","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \u0027--datastore_version_id\u0027, \u00271234\u0027]"},{"line_number":50,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, args, [])"},{"line_number":51,"context_line":"        self.volume_types_client.list_datastore_version_associated_volume_types.\\"},{"line_number":52,"context_line":"            return_value \u003d self.data2"},{"line_number":53,"context_line":"        columns, values \u003d self.cmd.take_action(parsed_args)"},{"line_number":54,"context_line":"        self.volume_types_client.list_datastore_version_associated_volume_types.\\"},{"line_number":55,"context_line":"            assert_called_once_with(\u0027mysql\u0027, \u00271234\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_88f61bd7","line":52,"range":{"start_line":52,"start_character":27,"end_line":52,"end_character":37},"updated":"2018-01-24 12:11:38.000000000","message":"See other comments, we could just use the same fake get_valume_types.","commit_id":"b04fae9e75910aaa094bcc8716f66d11f2b2a3f1"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"5ba6a01f7eea4b28f38645bb405ab7ea4760af27","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.volume_types_client.list_datastore_version_associated_volume_types.\\"},{"line_number":55,"context_line":"            assert_called_once_with(\u0027mysql\u0027, \u00271234\u0027)"},{"line_number":56,"context_line":"        self.assertEqual(self.columns, columns)"},{"line_number":57,"context_line":"        self.assertEqual([self.values2], values)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_28c6e769","line":57,"updated":"2018-01-24 12:11:38.000000000","message":"And we need another test case for the third branch in the take_action method: raising exception. i.e a unit test for make sure when only one of datastore_type and datastore_version_id is specified on the command line, take_action should raise the \u0027MissingArgs\u0027 exception.","commit_id":"b04fae9e75910aaa094bcc8716f66d11f2b2a3f1"}]}
