)]}'
{"cinderclient/tests/unit/test_api_versions.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5e6f2a8c6882ffcee105b2036d0cfcdc41f88eea","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class ManagerTest(utils.TestCase):"},{"line_number":99,"context_line":"    def test_api_version(self):"},{"line_number":100,"context_line":"        # The function manager.return_api_version has two versions,"},{"line_number":101,"context_line":"        # when called with api version 3.1 it should return the"},{"line_number":102,"context_line":"        # string \u00273.1\u0027 and when called with api version 3.2 or higher"}],"source_content_type":"text/x-python","patch_set":30,"id":"3ac371cc_e9e08d98","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":31},"updated":"2016-08-17 03:48:11.000000000","message":"why not use [ddt](http://ddt.readthedocs.io/en/latest/index.html) to wrap your similar testcases.","commit_id":"341a7bfe17e0eb9da6e77b11d5e15f968205f4e7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"48cf52508cde07d849bd21047a91c257b1d71999","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class ManagerTest(utils.TestCase):"},{"line_number":99,"context_line":"    def test_api_version(self):"},{"line_number":100,"context_line":"        # The function manager.return_api_version has two versions,"},{"line_number":101,"context_line":"        # when called with api version 3.1 it should return the"},{"line_number":102,"context_line":"        # string \u00273.1\u0027 and when called with api version 3.2 or higher"}],"source_content_type":"text/x-python","patch_set":30,"id":"3ac371cc_149259f6","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":31},"in_reply_to":"3ac371cc_7b290037","updated":"2016-08-17 06:19:00.000000000","message":"Yes,that\u0027s personal preference","commit_id":"341a7bfe17e0eb9da6e77b11d5e15f968205f4e7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"fbc1ed985dc0bf70136554d482b1b87cd020d3f9","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class ManagerTest(utils.TestCase):"},{"line_number":99,"context_line":"    def test_api_version(self):"},{"line_number":100,"context_line":"        # The function manager.return_api_version has two versions,"},{"line_number":101,"context_line":"        # when called with api version 3.1 it should return the"},{"line_number":102,"context_line":"        # string \u00273.1\u0027 and when called with api version 3.2 or higher"}],"source_content_type":"text/x-python","patch_set":30,"id":"3ac371cc_7b290037","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":31},"in_reply_to":"3ac371cc_e9e08d98","updated":"2016-08-17 04:09:01.000000000","message":"Hi, TommyLike:\nThanks for your review.\nYeah, ddt will do code code de-duplication.\nBut I there are sort of comments for each different case.\nSo I split each case to make them easier to understand.","commit_id":"341a7bfe17e0eb9da6e77b11d5e15f968205f4e7"}],"cinderclient/tests/unit/test_base.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6e37ff6a563851f6da9f833d7eef53583ec133b8","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class ManagerTest(utils.TestCase):"},{"line_number":95,"context_line":"    def test_api_version(self):"},{"line_number":96,"context_line":"        version \u003d api_versions.APIVersion(\u00273.1\u0027)"},{"line_number":97,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":98,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_1ac96fac","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":24},"updated":"2016-05-23 15:41:07.000000000","message":"I always prefer each test case to only test 1 thing, but this is good stuff, so no downvote from me.  :-)","commit_id":"9c5834d24e30574ee18118d13c67d21516fa8ae7"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        version \u003d api_versions.APIVersion(\u00273.3\u0027)"},{"line_number":108,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":109,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":110,"context_line":"        self.assertEqual(\u00273.2\u0027, manager.foo())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_c7f25d6f","line":110,"updated":"2016-06-21 19:51:01.000000000","message":"This could use some comments, explaining that manager.foo() returns 3.2 as the highest version.","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        version \u003d api_versions.APIVersion(\u00273.3\u0027)"},{"line_number":108,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":109,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":110,"context_line":"        self.assertEqual(\u00273.2\u0027, manager.foo())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_77319bec","line":110,"in_reply_to":"3aaa91ec_c7f25d6f","updated":"2016-07-02 08:59:42.000000000","message":"ddt lib is used in the new patch set, I think the code more clear now.","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":114,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":115,"context_line":"        self.assertRaises(exceptions.VersionNotFoundForAPIMethod,"},{"line_number":116,"context_line":"                          manager.foo)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_e794b9e9","line":115,"updated":"2016-06-21 19:51:01.000000000","message":"Could use a comment regarding what manager.foo will return based on API versions.","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":114,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":115,"context_line":"        self.assertRaises(exceptions.VersionNotFoundForAPIMethod,"},{"line_number":116,"context_line":"                          manager.foo)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_d74ccf78","line":115,"in_reply_to":"3aaa91ec_e794b9e9","updated":"2016-07-02 08:59:42.000000000","message":"ditto","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual([REQUEST_ID], r.request_ids)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class ManagerTest(utils.TestCase):"},{"line_number":95,"context_line":"    def test_api_version(self):"},{"line_number":96,"context_line":"        version \u003d api_versions.APIVersion(\u00273.1\u0027)"},{"line_number":97,"context_line":"        api \u003d client.Client(api_version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_a1e02dce","line":94,"updated":"2016-08-11 20:24:11.000000000","message":"This doesn\u0027t belong in this module. Could you move it to api_versions.py?","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual([REQUEST_ID], r.request_ids)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class ManagerTest(utils.TestCase):"},{"line_number":95,"context_line":"    def test_api_version(self):"},{"line_number":96,"context_line":"        version \u003d api_versions.APIVersion(\u00273.1\u0027)"},{"line_number":97,"context_line":"        api \u003d client.Client(api_version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_e0d5beb9","line":94,"in_reply_to":"9ad45d7e_a1e02dce","updated":"2016-08-13 00:13:03.000000000","message":"Done","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        version \u003d api_versions.APIVersion(\u00273.3\u0027)"},{"line_number":108,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":109,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":110,"context_line":"        self.assertEqual(\u00273.2\u0027, manager.foo())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_614e35c2","line":110,"updated":"2016-08-11 20:24:11.000000000","message":"If I look at the utils, I can see that the version_wraps causes a \u00273.2\u0027 to be returned (and any request for a higher API version would return \u00273.2\u0027) , but a comment to this effect would make it more clear.","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        version \u003d api_versions.APIVersion(\u00273.3\u0027)"},{"line_number":108,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":109,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":110,"context_line":"        self.assertEqual(\u00273.2\u0027, manager.foo())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_40dbf2ed","line":110,"in_reply_to":"9ad45d7e_614e35c2","updated":"2016-08-13 00:13:03.000000000","message":"Done","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":110,"context_line":"        self.assertEqual(\u00273.2\u0027, manager.foo())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":114,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":115,"context_line":"        self.assertRaises(exceptions.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_41a5f144","line":112,"updated":"2016-08-11 20:24:11.000000000","message":"If I look at the utils, I can see that API version \u00273.0\u0027 is not one of the supported versions, but that is not clear here. Please comment on what is happening and what is expected.","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":110,"context_line":"        self.assertEqual(\u00273.2\u0027, manager.foo())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        version \u003d api_versions.APIVersion(\u00273.0\u0027)"},{"line_number":113,"context_line":"        api \u003d client.Client(api_version\u003dversion)"},{"line_number":114,"context_line":"        manager \u003d test_utils.FakeManagerWithApi(api)"},{"line_number":115,"context_line":"        self.assertRaises(exceptions.VersionNotFoundForAPIMethod,"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_20d876ef","line":112,"in_reply_to":"9ad45d7e_41a5f144","updated":"2016-08-13 00:13:03.000000000","message":"Done","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"}],"cinderclient/tests/unit/test_utils.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class FakeManagerWithApi(base.Manager):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @api_versions.wraps(\u00273.1\u0027)"},{"line_number":68,"context_line":"    def foo(self):"},{"line_number":69,"context_line":"        return \u00273.1\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_c767fd23","line":66,"updated":"2016-06-21 19:51:01.000000000","message":"Could use a comment as to expected uses and how to use in tests. i.e. calling with version \u00273.0\u0027 is unsupported and throws exception, calling with \u003e3.2 will return 3.2","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class FakeManagerWithApi(base.Manager):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @api_versions.wraps(\u00273.1\u0027)"},{"line_number":68,"context_line":"    def foo(self):"},{"line_number":69,"context_line":"        return \u00273.1\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_77487b5c","line":66,"in_reply_to":"3aaa91ec_c767fd23","updated":"2016-07-02 08:59:42.000000000","message":"In the new patch set, return value of foo() is used to explain what will return for different version.","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":65,"context_line":"class FakeManagerWithApi(base.Manager):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @api_versions.wraps(\u00273.1\u0027)"},{"line_number":68,"context_line":"    def foo(self):"},{"line_number":69,"context_line":"        return \u00273.1\u0027"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @api_versions.wraps(\u00273.2\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_614915d0","line":68,"updated":"2016-08-11 20:24:11.000000000","message":"It would be easier to understand code that uses this util if the name were something like \"return_api_version()\"","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":65,"context_line":"class FakeManagerWithApi(base.Manager):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @api_versions.wraps(\u00273.1\u0027)"},{"line_number":68,"context_line":"    def foo(self):"},{"line_number":69,"context_line":"        return \u00273.1\u0027"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @api_versions.wraps(\u00273.2\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_00d1facd","line":68,"in_reply_to":"9ad45d7e_614915d0","updated":"2016-08-13 00:13:03.000000000","message":"Done","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"}],"cinderclient/tests/unit/v3/test_shell.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.run_command(\u0027availability-zone-list\u0027)"},{"line_number":70,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-availability-zone\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_upload_to_image(self):"},{"line_number":73,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027: {\u0027force\u0027: False,"},{"line_number":74,"context_line":"                                               \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":75,"context_line":"                                               \u0027disk_format\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_273b61ed","line":72,"updated":"2016-06-21 19:51:01.000000000","message":"A better name would be test_upload_to_image_3.1()","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.run_command(\u0027availability-zone-list\u0027)"},{"line_number":70,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-availability-zone\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_upload_to_image(self):"},{"line_number":73,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027: {\u0027force\u0027: False,"},{"line_number":74,"context_line":"                                               \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":75,"context_line":"                                               \u0027disk_format\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_f772abac","line":72,"in_reply_to":"3aaa91ec_273b61ed","updated":"2016-07-02 08:59:42.000000000","message":"We can\u0027t use \".\" in function, I choose \"_\" instead.\nSee:\n     https://review.openstack.org/#/c/336767/","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                                               \u0027image_name\u0027: \u0027test-image\u0027,"},{"line_number":77,"context_line":"                                               \u0027protected\u0027: False,"},{"line_number":78,"context_line":"                                               \u0027visibility\u0027: \u0027private\u0027}}"},{"line_number":79,"context_line":"        self.run_command(\u0027--os-volume-api-version 3.1 \u0027"},{"line_number":80,"context_line":"                         \u0027upload-to-image 1234 test-image\u0027)"},{"line_number":81,"context_line":"        self.assert_called_anytime(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":82,"context_line":"        self.assert_called_anytime(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_6296f795","line":79,"updated":"2016-06-21 19:51:01.000000000","message":"In general, these changes to unit tests should be done in a separate patch, IMO. They seem outside the scope of \"removing useless api_version in Manager Class\"","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                                               \u0027image_name\u0027: \u0027test-image\u0027,"},{"line_number":77,"context_line":"                                               \u0027protected\u0027: False,"},{"line_number":78,"context_line":"                                               \u0027visibility\u0027: \u0027private\u0027}}"},{"line_number":79,"context_line":"        self.run_command(\u0027--os-volume-api-version 3.1 \u0027"},{"line_number":80,"context_line":"                         \u0027upload-to-image 1234 test-image\u0027)"},{"line_number":81,"context_line":"        self.assert_called_anytime(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":82,"context_line":"        self.assert_called_anytime(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_5768dfba","line":79,"in_reply_to":"3aaa91ec_6296f795","updated":"2016-07-02 08:59:42.000000000","message":"Done","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.assert_called_anytime(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"},{"line_number":83,"context_line":"                                   body\u003dexpected)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_upload_to_image_pre_version(self):"},{"line_number":86,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027: {\u0027force\u0027: False,"},{"line_number":87,"context_line":"                                               \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":88,"context_line":"                                               \u0027disk_format\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_821a036d","line":85,"updated":"2016-06-21 19:51:01.000000000","message":"pre_version doesn\u0027t tell us much. Better would be:\ntest_upload_to_image_pre_3.1","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.assert_called_anytime(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"},{"line_number":83,"context_line":"                                   body\u003dexpected)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_upload_to_image_pre_version(self):"},{"line_number":86,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027: {\u0027force\u0027: False,"},{"line_number":87,"context_line":"                                               \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":88,"context_line":"                                               \u0027disk_format\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_775fdb0e","line":85,"in_reply_to":"3aaa91ec_821a036d","updated":"2016-07-02 08:59:42.000000000","message":"Done","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"c787f9e9a95f4560c93c151db92fc9f32f08e374","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.run_command(\u0027availability-zone-list\u0027)"},{"line_number":70,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-availability-zone\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # FIXME(caosf): Add some unit test for 3.0 version when bug #1589040"},{"line_number":73,"context_line":"    # is closed"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_upload_to_image(self):"},{"line_number":76,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027: {\u0027force\u0027: False,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_b73023a0","line":73,"range":{"start_line":72,"start_character":3,"end_line":73,"end_character":15},"updated":"2016-07-02 09:05:59.000000000","message":"Hi, all\nthis FIXME is removed here:\nhttps://review.openstack.org/#/c/336767/","commit_id":"9d7a96f4aacd8c0124f20c154e77ed4c059180f1"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"12d4987265e271469024120ba6970b3e6b64e09f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                               \u0027image_name\u0027: \u0027test-image\u0027,"},{"line_number":80,"context_line":"                                               \u0027protected\u0027: False,"},{"line_number":81,"context_line":"                                               \u0027visibility\u0027: \u0027private\u0027}}"},{"line_number":82,"context_line":"        self.run_command(\u0027--os-volume-api-version 3.1\u0027"},{"line_number":83,"context_line":"                         \u0027 upload-to-image 1234 test-image\u0027)"},{"line_number":84,"context_line":"        self.assert_called_anytime(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":85,"context_line":"        self.assert_called_anytime(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_78402d36","line":82,"updated":"2016-07-14 21:37:14.000000000","message":"I don\u0027t think you should make any changes in this module. I don\u0027t think you should fix upload_to_image unit tests in this patch, it should be done in a separate patch.","commit_id":"1354cda4b55267d1bec1bf4631b65b29a46be42f"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"27a13679670419038b1eebd4e23647a358e99150","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                               \u0027image_name\u0027: \u0027test-image\u0027,"},{"line_number":80,"context_line":"                                               \u0027protected\u0027: False,"},{"line_number":81,"context_line":"                                               \u0027visibility\u0027: \u0027private\u0027}}"},{"line_number":82,"context_line":"        self.run_command(\u0027--os-volume-api-version 3.1\u0027"},{"line_number":83,"context_line":"                         \u0027 upload-to-image 1234 test-image\u0027)"},{"line_number":84,"context_line":"        self.assert_called_anytime(\u0027GET\u0027, \u0027/volumes/1234\u0027)"},{"line_number":85,"context_line":"        self.assert_called_anytime(\u0027POST\u0027, \u0027/volumes/1234/action\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_b6b3c14c","line":82,"in_reply_to":"1aa78d24_78402d36","updated":"2016-07-15 01:57:25.000000000","message":"Hi, Scott:\n    Thanks for your review.\n    I updated this unit test here because this change and\n    https://review.openstack.org/#/c/336767 depend on each other.\n    This change just make bug #1589040 \"more exposed\", so if I\n     don\u0027t specify \"--os-volume-api-version 3.1\" here, this test will not pass.\n     And the test for 3.0 version is added back in https://review.openstack.org/#/c/336767.\n\n     I really don\u0027t want to change any unrelated unit tests, but I can\u0027t figure out\n     any other way here. As you can see, I tried to mix these two change up,\n     but that looks not so bright.\n     This change just make bug #1589040 more clear, but it\u0027s not the fault of this \n     change, bug #1589040 exists any way.","commit_id":"1354cda4b55267d1bec1bf4631b65b29a46be42f"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"12d4987265e271469024120ba6970b3e6b64e09f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                                               \u0027image_name\u0027: \u0027test-image\u0027,"},{"line_number":93,"context_line":"                                               \u0027protected\u0027: \u0027True\u0027,"},{"line_number":94,"context_line":"                                               \u0027visibility\u0027: \u0027public\u0027}}"},{"line_number":95,"context_line":"        self.run_command(\u0027--os-volume-api-version 3.1\u0027"},{"line_number":96,"context_line":"                         \u0027 upload-to-image --visibility\u003dpublic \u0027"},{"line_number":97,"context_line":"                         \u0027--protected\u003dTrue 1234 test-image\u0027)"},{"line_number":98,"context_line":"        self.assert_called_anytime(\u0027GET\u0027, \u0027/volumes/1234\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_583bb1c8","line":95,"updated":"2016-07-14 21:37:14.000000000","message":"I don\u0027t think you should make any changes in this module. I don\u0027t think you should fix upload_to_image unit tests in this patch, it should be done in a separate patch.","commit_id":"1354cda4b55267d1bec1bf4631b65b29a46be42f"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"27a13679670419038b1eebd4e23647a358e99150","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                                               \u0027image_name\u0027: \u0027test-image\u0027,"},{"line_number":93,"context_line":"                                               \u0027protected\u0027: \u0027True\u0027,"},{"line_number":94,"context_line":"                                               \u0027visibility\u0027: \u0027public\u0027}}"},{"line_number":95,"context_line":"        self.run_command(\u0027--os-volume-api-version 3.1\u0027"},{"line_number":96,"context_line":"                         \u0027 upload-to-image --visibility\u003dpublic \u0027"},{"line_number":97,"context_line":"                         \u0027--protected\u003dTrue 1234 test-image\u0027)"},{"line_number":98,"context_line":"        self.assert_called_anytime(\u0027GET\u0027, \u0027/volumes/1234\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_b68d81d5","line":95,"in_reply_to":"1aa78d24_583bb1c8","updated":"2016-07-15 01:57:25.000000000","message":"ditto\n.·´¯`(\u003e▂\u003c)´¯`·.","commit_id":"1354cda4b55267d1bec1bf4631b65b29a46be42f"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.run_command(\u0027availability-zone-list\u0027)"},{"line_number":70,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-availability-zone\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_upload_to_image(self):"},{"line_number":73,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027: {\u0027force\u0027: False,"},{"line_number":74,"context_line":"                                               \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":75,"context_line":"                                               \u0027disk_format\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_17017738","line":72,"updated":"2016-08-11 20:24:11.000000000","message":"It would be nice to either mention in comment or have the test name reflect that this uses the defaults of protected\u003dFalse and visibility\u003dprivate.\nThis test could be:\ntest_upload_to_image_3_1\nor\ntest_upload_to_image_private_not_protected.\n\nI would think it\u0027s better to keep the \"pre_version\" test as just: test_upload_to_image\nsince that is what exists on /v2","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.run_command(\u0027availability-zone-list\u0027)"},{"line_number":70,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-availability-zone\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_upload_to_image(self):"},{"line_number":73,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027: {\u0027force\u0027: False,"},{"line_number":74,"context_line":"                                               \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":75,"context_line":"                                               \u0027disk_format\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_c0c6c215","line":72,"in_reply_to":"9ad45d7e_17017738","updated":"2016-08-13 00:13:03.000000000","message":"Done","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"}],"cinderclient/tests/unit/v3/test_volumes.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class VolumesTest(utils.TestCase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_upload_to_image(self):"},{"line_number":28,"context_line":"        # test for lib users who call Volume\u0027s upload_to_image()"},{"line_number":29,"context_line":"        # function"},{"line_number":30,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_a290df96","line":27,"updated":"2016-06-21 19:51:01.000000000","message":"These tests are out of scope for this change.","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class VolumesTest(utils.TestCase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_upload_to_image(self):"},{"line_number":28,"context_line":"        # test for lib users who call Volume\u0027s upload_to_image()"},{"line_number":29,"context_line":"        # function"},{"line_number":30,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_b79f83b3","line":27,"in_reply_to":"3aaa91ec_a290df96","updated":"2016-07-02 08:59:42.000000000","message":"Done","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumesTest(utils.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_upload_to_image(self):"},{"line_number":27,"context_line":"        # test for lib users who call Volume\u0027s upload_to_image()"},{"line_number":28,"context_line":"        # function"},{"line_number":29,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027:"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_3762bb0a","line":26,"updated":"2016-08-11 20:24:11.000000000","message":"This name is confusing, since there is a shell test with the same.","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VolumesTest(utils.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_upload_to_image(self):"},{"line_number":27,"context_line":"        # test for lib users who call Volume\u0027s upload_to_image()"},{"line_number":28,"context_line":"        # function"},{"line_number":29,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027:"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_40549253","line":26,"in_reply_to":"9ad45d7e_3762bb0a","updated":"2016-08-13 00:13:03.000000000","message":"Updated it to reflect that it\u0027s testing the volume manager","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class VolumesTest(utils.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_upload_to_image(self):"},{"line_number":27,"context_line":"        # test for lib users who call Volume\u0027s upload_to_image()"},{"line_number":28,"context_line":"        # function"},{"line_number":29,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027:"},{"line_number":30,"context_line":"                    {\u0027force\u0027: False,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_f7c943ad","line":27,"updated":"2016-08-11 20:24:11.000000000","message":"I don\u0027t think this comment really tells us anything we don\u0027t know from the method name...","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class VolumesTest(utils.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_upload_to_image(self):"},{"line_number":27,"context_line":"        # test for lib users who call Volume\u0027s upload_to_image()"},{"line_number":28,"context_line":"        # function"},{"line_number":29,"context_line":"        expected \u003d {\u0027os-volume_upload_image\u0027:"},{"line_number":30,"context_line":"                    {\u0027force\u0027: False,"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_20519663","line":27,"in_reply_to":"9ad45d7e_f7c943ad","updated":"2016-08-13 00:13:03.000000000","message":"removed","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                     \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":32,"context_line":"                     \u0027disk_format\u0027: \u0027raw\u0027,"},{"line_number":33,"context_line":"                     \u0027image_name\u0027: \u0027name\u0027,"},{"line_number":34,"context_line":"                     \u0027visibility\u0027: \u0027private\u0027,"},{"line_number":35,"context_line":"                     \u0027protected\u0027: True}}"},{"line_number":36,"context_line":"        api_version \u003d api_versions.APIVersion(\u00273.1\u0027)"},{"line_number":37,"context_line":"        cs \u003d fakes.FakeClient(api_version)"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_d2d36dd3","line":34,"updated":"2016-08-11 20:24:11.000000000","message":"Why use the default of \u0027private\u0027?\nYou might as well test \u0027public\u0027..","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                     \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":32,"context_line":"                     \u0027disk_format\u0027: \u0027raw\u0027,"},{"line_number":33,"context_line":"                     \u0027image_name\u0027: \u0027name\u0027,"},{"line_number":34,"context_line":"                     \u0027visibility\u0027: \u0027private\u0027,"},{"line_number":35,"context_line":"                     \u0027protected\u0027: True}}"},{"line_number":36,"context_line":"        api_version \u003d api_versions.APIVersion(\u00273.1\u0027)"},{"line_number":37,"context_line":"        cs \u003d fakes.FakeClient(api_version)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac969e8_804e8abf","line":34,"in_reply_to":"9ad45d7e_d2d36dd3","updated":"2016-08-13 00:13:03.000000000","message":"Done","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"}],"cinderclient/v2/volumes.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51353647300bf8a9a6417e0cb9094f2ee91f2f0e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9abb7d3a_a706e382","line":19,"updated":"2016-06-03 14:35:55.000000000","message":"I think the best thing might be to implement the method here without the extra parameters, then internally just have it call the v3 version using the defaults. That way the v2 signature stays the same, but we aren\u0027t completely duplicating the code logic.","commit_id":"a674b974d45fa7a6cf0f9513ab107b4f51cb14cd"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"5ac831bafee1e464f6b75ff3053b1b30b3863c92","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9abb7d3a_d27c7e74","line":19,"in_reply_to":"9abb7d3a_a6854408","updated":"2016-06-03 16:25:56.000000000","message":"You cannot just remove the changes to wrap upload to image. In order to prevent code duplication between /v2 and v3.0 (which are identical), we moved everything to /v3. But the result of this is that when we change /v3, we\u0027ll need to add something in /v2 (here) to maintain the same API for /v2 users.\nYou should do as was done for upload_to_image:\nUse microversions to maintain old behavior.","commit_id":"a674b974d45fa7a6cf0f9513ab107b4f51cb14cd"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"f74dfce12fc77a90d5fb82aa84d8fcb4278fafbd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9abb7d3a_a6854408","line":19,"in_reply_to":"9abb7d3a_a706e382","updated":"2016-06-03 14:56:14.000000000","message":"Yeah, in that way, lib users only need to be carefully for 3.0 mrioversion.\nThanks for reminding me of this.\nI will commit a new patch set tomorrow.\nThanks","commit_id":"a674b974d45fa7a6cf0f9513ab107b4f51cb14cd"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"ef364dd6f415876b455a4c9996e9a831ee184da3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9abb7d3a_22bad723","line":19,"in_reply_to":"9abb7d3a_d27c7e74","updated":"2016-06-03 17:16:03.000000000","message":"Hi，Scott:\n    Yeah, I will take the code back in the next patch set.","commit_id":"a674b974d45fa7a6cf0f9513ab107b4f51cb14cd"}],"cinderclient/v3/shell.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"    \"\"\"Uploads volume to Image Service as an image.\"\"\""},{"line_number":1281,"context_line":"    volume \u003d utils.find_volume(cs, args.volume)"},{"line_number":1282,"context_line":"    if cs.api_version \u003e\u003d api_versions.APIVersion(\"3.1\"):"},{"line_number":1283,"context_line":"        _print_volume_image(volume.upload_to_image(args.force,"},{"line_number":1284,"context_line":"                                                   args.image_name,"},{"line_number":1285,"context_line":"                                                   args.container_format,"},{"line_number":1286,"context_line":"                                                   args.disk_format,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_c2d40b49","line":1283,"updated":"2016-06-21 19:51:01.000000000","message":"These are also out of scope for this patch.","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"    \"\"\"Uploads volume to Image Service as an image.\"\"\""},{"line_number":1281,"context_line":"    volume \u003d utils.find_volume(cs, args.volume)"},{"line_number":1282,"context_line":"    if cs.api_version \u003e\u003d api_versions.APIVersion(\"3.1\"):"},{"line_number":1283,"context_line":"        _print_volume_image(volume.upload_to_image(args.force,"},{"line_number":1284,"context_line":"                                                   args.image_name,"},{"line_number":1285,"context_line":"                                                   args.container_format,"},{"line_number":1286,"context_line":"                                                   args.disk_format,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_f7a90be1","line":1283,"in_reply_to":"3aaa91ec_c2d40b49","updated":"2016-07-02 08:59:42.000000000","message":"Done","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"           help\u003d\u0027Set image visibility to either public or private. \u0027"},{"line_number":1281,"context_line":"                \u0027Default\u003dprivate.\u0027,"},{"line_number":1282,"context_line":"           default\u003d\u0027private\u0027,"},{"line_number":1283,"context_line":"           start_version\u003d\u00273.1\u0027)"},{"line_number":1284,"context_line":"@utils.arg(\u0027--protected\u0027,"},{"line_number":1285,"context_line":"           metavar\u003d\u0027\u003cTrue|False\u003e\u0027,"},{"line_number":1286,"context_line":"           help\u003d\u0027Prevents image from being deleted. Default\u003dFalse.\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_f76dc3cc","line":1283,"updated":"2016-08-11 20:24:11.000000000","message":"Doesn\u0027t this feature mean that this is dependent on:\nhttps://review.openstack.org/#/c/340129/\n Change-Id: I74137486992846bbf9fdff53c009851db2356eef","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"           help\u003d\u0027Set image visibility to either public or private. \u0027"},{"line_number":1281,"context_line":"                \u0027Default\u003dprivate.\u0027,"},{"line_number":1282,"context_line":"           default\u003d\u0027private\u0027,"},{"line_number":1283,"context_line":"           start_version\u003d\u00273.1\u0027)"},{"line_number":1284,"context_line":"@utils.arg(\u0027--protected\u0027,"},{"line_number":1285,"context_line":"           metavar\u003d\u0027\u003cTrue|False\u003e\u0027,"},{"line_number":1286,"context_line":"           help\u003d\u0027Prevents image from being deleted. Default\u003dFalse.\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_f55484ca","line":1283,"in_reply_to":"9ad45d7e_f76dc3cc","updated":"2016-08-13 00:13:03.000000000","message":"Yes, that\u0027s why it\u0027s a part of the dependency chain, it\u0027s been cherry picked on top of that patch.","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"93f8ec2d6f4faf33bf15d97e7c4238af3d7fe9ab","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"           metavar\u003d\u0027\u003cTrue|False\u003e\u0027,"},{"line_number":1286,"context_line":"           help\u003d\u0027Prevents image from being deleted. Default\u003dFalse.\u0027,"},{"line_number":1287,"context_line":"           default\u003dFalse,"},{"line_number":1288,"context_line":"           start_version\u003d\u00273.1\u0027)"},{"line_number":1289,"context_line":"@utils.service_type(\u0027volumev3\u0027)"},{"line_number":1290,"context_line":"def do_upload_to_image(cs, args):"},{"line_number":1291,"context_line":"    \"\"\"Uploads volume to Image Service as an image.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_376c7bcd","line":1288,"updated":"2016-08-11 20:24:11.000000000","message":"same","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"aaa4473572a1c58610cfdad212781f0cf0b85952","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"           metavar\u003d\u0027\u003cTrue|False\u003e\u0027,"},{"line_number":1286,"context_line":"           help\u003d\u0027Prevents image from being deleted. Default\u003dFalse.\u0027,"},{"line_number":1287,"context_line":"           default\u003dFalse,"},{"line_number":1288,"context_line":"           start_version\u003d\u00273.1\u0027)"},{"line_number":1289,"context_line":"@utils.service_type(\u0027volumev3\u0027)"},{"line_number":1290,"context_line":"def do_upload_to_image(cs, args):"},{"line_number":1291,"context_line":"    \"\"\"Uploads volume to Image Service as an image.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"9ad45d7e_555ab0f2","line":1288,"in_reply_to":"9ad45d7e_376c7bcd","updated":"2016-08-13 00:13:03.000000000","message":"ditto","commit_id":"ba7ab0d923ed4748bee617cd44d379a91f9e1992"}],"cinderclient/v3/volumes.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6e37ff6a563851f6da9f833d7eef53583ec133b8","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    @api_versions.wraps(\"3.0\")"},{"line_number":457,"context_line":"    def upload_to_image(self, volume, force, image_name, container_format,"},{"line_number":458,"context_line":"                        disk_format, visibility, protected):"},{"line_number":459,"context_line":"        \"\"\"Upload volume to image service as image."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        :param volume: The :class:`Volume` to upload."}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_7afd1bb0","line":458,"range":{"start_line":458,"start_character":24,"end_line":458,"end_character":60},"updated":"2016-05-23 15:41:07.000000000","message":"-1: We should remove code duplication using `*args, **kwargs` instead, and changing the version decorator to (\u00272.0\u0027, \u00273.0\u0027) and remove the exact same method from v2/volumes.py.","commit_id":"9c5834d24e30574ee18118d13c67d21516fa8ae7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"a13f0a3fea80f2ba42b2d5d3749c111985d7d10d","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    @api_versions.wraps(\"3.0\")"},{"line_number":457,"context_line":"    def upload_to_image(self, volume, force, image_name, container_format,"},{"line_number":458,"context_line":"                        disk_format, visibility, protected):"},{"line_number":459,"context_line":"        \"\"\"Upload volume to image service as image."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        :param volume: The :class:`Volume` to upload."}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_063f43d7","line":458,"range":{"start_line":458,"start_character":24,"end_line":458,"end_character":60},"in_reply_to":"bab6814e_7afd1bb0","updated":"2016-05-24 02:43:39.000000000","message":"Done","commit_id":"9c5834d24e30574ee18118d13c67d21516fa8ae7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"e2d43096aa4474ed1d6b1f6c5224c027956b7fb2","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    @api_versions.wraps(\"3.0\")"},{"line_number":457,"context_line":"    def upload_to_image(self, volume, force, image_name, container_format,"},{"line_number":458,"context_line":"                        disk_format, visibility, protected):"},{"line_number":459,"context_line":"        \"\"\"Upload volume to image service as image."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        :param volume: The :class:`Volume` to upload."}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_9e2a617d","line":458,"range":{"start_line":458,"start_character":24,"end_line":458,"end_character":60},"in_reply_to":"bab6814e_7afd1bb0","updated":"2016-05-27 07:55:12.000000000","message":"Hi, Gorka:\nIf the function is wrapped correctly, we can remove \"visibility\" and \"protected\" here.\nThanks","commit_id":"9c5834d24e30574ee18118d13c67d21516fa8ae7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"f0f205a7bcd1173f22fef5d8c310aca1f491852a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return self.manager.show_image_metadata(self)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":114,"context_line":"                        disk_format, visibility\u003dNone,"},{"line_number":115,"context_line":"                        protected\u003dNone):"},{"line_number":116,"context_line":"        \"\"\"Upload a volume to image service as an image.\"\"\""},{"line_number":117,"context_line":"        if self.manager.api_version \u003e\u003d api_versions.APIVersion(\"3.1\"):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_c6341bfd","line":114,"range":{"start_line":114,"start_character":48,"end_line":114,"end_character":52},"updated":"2016-05-24 02:43:49.000000000","message":"Hi, Gorka:\n    I use this in purpose that it will not break v2 lib users.\n\nThanks.","commit_id":"b930fe3e9aa0d5b28001f3182fcf5bced840f754"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"001c0cb0d2a1d0432bd52477ba115006f0967d94","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return self.manager.show_image_metadata(self)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":114,"context_line":"                        disk_format, visibility\u003dNone,"},{"line_number":115,"context_line":"                        protected\u003dNone):"},{"line_number":116,"context_line":"        \"\"\"Upload a volume to image service as an image.\"\"\""},{"line_number":117,"context_line":"        if self.manager.api_version \u003e\u003d api_versions.APIVersion(\"3.1\"):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_5d93b5fa","line":114,"updated":"2016-06-02 21:15:49.000000000","message":"This change will introduce new and now unused options \u0027visibility\u0027 and \u0027protected\u0027 for v2. I don\u0027t think that it\u0027s a right way","commit_id":"2bad85ef61f70748a620d6474ba89c65f9526267"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"41109f605a60a91d44053d06b14c72022ffd632e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return self.manager.show_image_metadata(self)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":114,"context_line":"                        disk_format, visibility\u003dNone,"},{"line_number":115,"context_line":"                        protected\u003dNone):"},{"line_number":116,"context_line":"        \"\"\"Upload a volume to image service as an image.\"\"\""},{"line_number":117,"context_line":"        if self.manager.api_version \u003e\u003d api_versions.APIVersion(\"3.1\"):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_60bed200","line":114,"in_reply_to":"9abb7d3a_5d93b5fa","updated":"2016-06-02 21:24:36.000000000","message":"This is a good point. It doesn\u0027t get exposed to an end user via CLI, so that part is good, but someone using the client library might think they can do that with v2.","commit_id":"2bad85ef61f70748a620d6474ba89c65f9526267"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"c05bbc1c85bb080d188d5ba6fa7683d04201a350","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return self.manager.show_image_metadata(self)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":114,"context_line":"                        disk_format, visibility\u003dNone,"},{"line_number":115,"context_line":"                        protected\u003dNone):"},{"line_number":116,"context_line":"        \"\"\"Upload a volume to image service as an image.\"\"\""},{"line_number":117,"context_line":"        if self.manager.api_version \u003e\u003d api_versions.APIVersion(\"3.1\"):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_cb5a3250","line":114,"in_reply_to":"9abb7d3a_60bed200","updated":"2016-06-03 05:21:16.000000000","message":"Hi, Ivan, Sean:\n     I add some docstring for this function to remind users that the two options only works for version higher than 3.0.\n     This is also what nova do:\n     https://github.com/openstack/python-novaclient/blob/master/novaclient/v2/servers.py#L58\n\nThanks","commit_id":"2bad85ef61f70748a620d6474ba89c65f9526267"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"013927561db47946f9d520db042ac65383f00592","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        return self.manager.show_image_metadata(self)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":115,"context_line":"                        disk_format, visibility\u003dNone,"},{"line_number":116,"context_line":"                        protected\u003dNone):"},{"line_number":117,"context_line":"        \"\"\"Upload a volume to image service as an image."}],"source_content_type":"text/x-python","patch_set":11,"id":"9abb7d3a_1f72a1e3","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":23},"updated":"2016-06-03 11:45:00.000000000","message":"Hi, Ivan, Sean:\n    I tried to find out whether we could also wrap this function like the\nManager\u0027s upload_to_image function.\n\nBut finally I think we can\u0027t do that, because api_versions.wraps() use\n\"module name\" + \"function name\" to distinguish functions[1].\n\nThat means class Volume\u0027s upload_to_image and class VolumeManager\u0027s\nupload_to_image() function can\u0027t be wrapped at the same time, as they are in the\nsame module.\n\nCurrently solution is consistent with python-novaclient[2].\n\n[1]:https://github.com/openstack/python-cinderclient/blob/master/cinderclient/utils.py#L286\n[2]:https://github.com/openstack/python-novaclient/blob/master/novaclient/v2/servers.py#L58\n\nThanks","commit_id":"a674b974d45fa7a6cf0f9513ab107b4f51cb14cd"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"21f3a850fa9dcb19014efa0e5952293a21e3046a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        return self.manager.show_image_metadata(self)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":115,"context_line":"                        disk_format, visibility\u003dNone,"},{"line_number":116,"context_line":"                        protected\u003dNone):"},{"line_number":117,"context_line":"        \"\"\"Upload a volume to image service as an image."}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_a2c8df75","line":114,"updated":"2016-06-21 19:51:01.000000000","message":"This is code that has been changed already, in the VolumeManager class.","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6a0d9c19582710dd7d538cf3efef84eebbecd1aa","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        return self.manager.show_image_metadata(self)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def upload_to_image(self, force, image_name, container_format,"},{"line_number":115,"context_line":"                        disk_format, visibility\u003dNone,"},{"line_number":116,"context_line":"                        protected\u003dNone):"},{"line_number":117,"context_line":"        \"\"\"Upload a volume to image service as an image."}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_17cad7a1","line":114,"in_reply_to":"3aaa91ec_a2c8df75","updated":"2016-07-02 08:59:42.000000000","message":"This[1] doesn\u0027t close the bug totally.\nThe following change[2] will close bug in 3.0 mircoversion.\n\n[1]: https://bugs.launchpad.net/python-cinderclient/+bug/1584056\n[2]: https://review.openstack.org/#/c/336767/","commit_id":"3b84200e0846b342fea02a01bc9baf322cb8c91d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"c00e4379bf963818c2c1bce6eb2479af2dca580f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            return self.manager.upload_to_image(self, force, image_name,"},{"line_number":132,"context_line":"                                                container_format, disk_format,"},{"line_number":133,"context_line":"                                                visibility, protected)"},{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            # The 3.0 microversion doesn\u0027t support visibility and protected"},{"line_number":136,"context_line":"            if visibility is not None:"},{"line_number":137,"context_line":"                raise exceptions.UnsupportedAttribute(\"visibility\", \"3.1\")"}],"source_content_type":"text/x-python","patch_set":24,"id":"bacf61ea_5ba4bc49","line":134,"updated":"2016-08-05 17:23:00.000000000","message":"So I\u0027ve been doing some manual testing of this patch, and I could be wrong but it\u0027s looking to me like this else block might be impossible to get to right now.\n\nIf I set the cinder API version to be 3.0, the call to this function never happens, because it errors out saying \u0027unrecognized arguments: --protected\u0027 at the shell.py level. Because of this, the unsupported attribute exception doesn\u0027t get raised and the user-friendly message isn\u0027t displayed. Is there something that I\u0027m doing wrong? I\u0027m running the command - http://paste.openstack.org/show/550657/","commit_id":"b5d2d61d1f33b70c136a4544743e9120bb368fce"}]}
