)]}'
{"tempest/api/compute/base.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"094bbdc7d9e2f6c2a1e741b8c4bdfe38b340fbea","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        cls.quotas_admin_client \u003d cls.os_adm.quotas_v3_client"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"class CommonComputeTest(BaseComputeTest):"},{"line_number":417,"context_line":"    _api_version \u003d 2"},{"line_number":418,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FFxA%3D","line":416,"updated":"2014-03-10 00:37:31.000000000","message":"The difference between the names of \u0027CommonComputeTest\u0027 and \u0027BaseComputeTest\u0027 is unclear to me.\nHow about just \u0027ComputeTest\u0027?\nThis is not so strong opinion. You can ignore this.","commit_id":"49a975f880fa204c441f3bbfbcd54aff3f15f0f8"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"094bbdc7d9e2f6c2a1e741b8c4bdfe38b340fbea","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            raise exceptions.InvalidConfiguration(message\u003dmsg)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    @classmethod"},{"line_number":480,"context_line":"    def create_image_from_server(cls, server_id, **kwargs):"},{"line_number":481,"context_line":"        \"\"\"Wrapper utility that returns an image created from the server.\"\"\""},{"line_number":482,"context_line":"        name \u003d data_utils.rand_name(cls.__name__ + \"-image\")"},{"line_number":483,"context_line":"        if \u0027name\u0027 in kwargs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FFwQ%3D","line":480,"updated":"2014-03-10 00:37:31.000000000","message":"Should we have unit tests for these new functions?\nOr I think this patch should use these method at least.","commit_id":"49a975f880fa204c441f3bbfbcd54aff3f15f0f8"}],"tempest/api/compute/v3/servers/test_availability_zone.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"07edfdd8b31c3aab749c508779b185c68044df20","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest.api.compute.servers import test_availability_zone"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class AZV3Test(base.BaseV3ComputeTest, test_availability_zone.AZTestJSON):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FFOs%3D","line":20,"updated":"2014-03-10 03:55:08.000000000","message":"I think we need to define the setUpClass function here. which will call the BaseV3ComputeTest-\u003esetUpClass() and set the cls.client.","commit_id":"58090e00d2016049dea7bd06ac1de62f73c9bd96"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"d2f20354392dc1eef68957ca38abe3fa84db94de","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def setUpClass(cls):"},{"line_number":24,"context_line":"        base.BaseV3ComputeTest.setUpClass()"},{"line_number":25,"context_line":"        cls.client \u003d cls.availability_zone_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2B8Jk%3D","line":24,"updated":"2014-03-11 06:17:16.000000000","message":"So the original super(AZV3Test, cls).setUpClass() will get choose the correct setUpClass we want if we make sure we get the multiple inheritance list right above - which I think it is?","commit_id":"40e2953615b9561c97b4f2b043e09fee2140b5ca"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"36d8f37e1b3567d76907f2a1d8b5175e1233d191","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def setUpClass(cls):"},{"line_number":24,"context_line":"        base.BaseV3ComputeTest.setUpClass()"},{"line_number":25,"context_line":"        cls.client \u003d cls.availability_zone_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FaDQ%3D","line":24,"in_reply_to":"AAAAVn%2F%2B560%3D","updated":"2014-03-18 03:53:57.000000000","message":"Yes, Chris. You are right. As \u0027super\u0027 call the sibling calls function also along with parent class, in our case V2 Test setUpClass function will also gets called. If we go with above changes (explicitly calling v3 Base call setupclass) then also it will call V2 Test setUpClass because in base class we use the \u0027super\u0027.\n\nOhmichi san and me had discussion and we think we should go with \u0027patch1\u0027 design where we have the multiple inheritance instead of multilevel.","commit_id":"40e2953615b9561c97b4f2b043e09fee2140b5ca"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e1492873fb4f24a08940707cf9b4ec6d735f6755","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def setUpClass(cls):"},{"line_number":24,"context_line":"        base.BaseV3ComputeTest.setUpClass()"},{"line_number":25,"context_line":"        cls.client \u003d cls.availability_zone_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2B560%3D","line":24,"in_reply_to":"AAAAVn%2F%2B8Cw%3D","updated":"2014-03-11 12:24:30.000000000","message":"So you\u0027re right about the second class setupClass also being called. But I think with the cooperative subclassing explicitly calling BaseV3ComputeTest.setupClass() won\u0027t help us here. A short test program which I think models roughly what the hierarchy will look like: \n\nclass Zero(object):\n    def foo(self):\n        print \"zero\"\n\nclass First(Zero):\n    def foo(self):\n        print \"first\"\n        super(First, self).foo()\n\nclass Second(First):\n    def foo(self):\n        print \"second\"\n        super(Second, self).foo()\n\nclass Third(First):\n    def foo(self):\n        print \"third\"\n        super(Third, self).foo()\n\nclass Fourth(Second, Third):\n    def foo(self):\n        print \"fourth\"\n        Second.foo(self)\n\na \u003d Fourth().foo()\n\nAnd the output looks like: \nfourth\nsecond\nthird\nfirst\nzero\n\nAm I misunderstanding what will happen with the test hierarchy? I think its pretty close to the simple example above.","commit_id":"40e2953615b9561c97b4f2b043e09fee2140b5ca"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"07b5e0986c944ed20e3bfb31f22fca899c391c67","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def setUpClass(cls):"},{"line_number":24,"context_line":"        base.BaseV3ComputeTest.setUpClass()"},{"line_number":25,"context_line":"        cls.client \u003d cls.availability_zone_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2B8Cw%3D","line":24,"in_reply_to":"AAAAVn%2F%2B8Jk%3D","updated":"2014-03-11 06:36:07.000000000","message":"Yes, if we have the multiple inheritance list in same order as above then, we would be getting the right setUpClass called at the end. \nMRO will be - (AZV3Test, base.BaseV3ComputeTest, test_availability_zone, BaseV2ComputeTest, BaseComputeTest and so.)\n\nAs mentioned above in MRO, with super(AZV3Test, cls).setUpClass(), it will call the  test_availability_zone.AZTestJSON-\u003esetUpClass also which we donot want it here. That why explicitly calling the  base.BaseV3ComputeTest.setUpClass().","commit_id":"40e2953615b9561c97b4f2b043e09fee2140b5ca"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f4713c65835eb4a5142ae33e6d645fc6048379ec","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class AZV3Test(test_availability_zone.AZTestJSON):"},{"line_number":20,"context_line":"    _api_version \u003d 3"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2B%2Bno%3D","line":20,"updated":"2014-03-21 08:18:25.000000000","message":"or will we change the directory structure dynamically?\n\none idea:\n tempest/api/compute/ : common test files like this test class\n tempest/api/compute/v2/ : v2 API specific test files\n tempest/api/compute/v3/ : v3 API specific test files\n\nBy the above idea, we can remove this file and just define v3 class in tempest/api/compute/servers/test_availability_zone.py.","commit_id":"8179b482351cbab7cd78c344233ec5812eae932b"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"28e853ab6e0349fb1d75ccef0ffe0765aa1508b6","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class AZV3Test(test_availability_zone.AZTestJSON):"},{"line_number":20,"context_line":"    _api_version \u003d 3"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2B1QI%3D","line":20,"in_reply_to":"AAAAWH%2F%2B%2Bno%3D","updated":"2014-03-23 21:58:14.000000000","message":"I think that is a good idea.","commit_id":"8179b482351cbab7cd78c344233ec5812eae932b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4e99475eb40fec017282a4c5dd3a7915c8afa0d9","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class AZV3Test(test_availability_zone.AZTestJSON):"},{"line_number":20,"context_line":"    _api_version \u003d 3"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2BsoI%3D","line":20,"in_reply_to":"AAAAWH%2F%2B1QI%3D","updated":"2014-03-25 00:31:02.000000000","message":"Thanks, Masayuki,\n\nI will try it.","commit_id":"8179b482351cbab7cd78c344233ec5812eae932b"}]}
