)]}'
{"tempest/api/image/base.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"8319adbb34085e560ecda9d3aa73f925caacb799","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def resource_setup(cls):"},{"line_number":47,"context_line":"        super(BaseImageTest, cls).resource_setup()"},{"line_number":48,"context_line":"        cls.created_images \u003d []"},{"line_number":49,"context_line":"        cls.build_interval \u003d CONF.image.build_interval"},{"line_number":50,"context_line":"        cls.build_timeout \u003d CONF.image.build_timeout"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_c61082ab","line":49,"updated":"2015-11-03 11:55:43.000000000","message":"You don\u0027t need these 2 lines. Directly use  CONF.image.build_interval and CONF.image.build_timeout when needed.\n\nthe method \u0027resource_setup\u0027 is here to create resources, not to add some alias to some variables. Especially you add class variable here (large scope) which is bad practice imo.","commit_id":"399374e3f81e5fed4b45663a4f2608d35c987600"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"bed80738ffaacf87f5198e3dc7d1f7ffa8d841e8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def resource_setup(cls):"},{"line_number":47,"context_line":"        super(BaseImageTest, cls).resource_setup()"},{"line_number":48,"context_line":"        cls.created_images \u003d []"},{"line_number":49,"context_line":"        cls.build_interval \u003d CONF.image.build_interval"},{"line_number":50,"context_line":"        cls.build_timeout \u003d CONF.image.build_timeout"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_89ceb1b2","line":49,"in_reply_to":"fa80f949_c61082ab","updated":"2015-11-05 10:34:09.000000000","message":"Done","commit_id":"399374e3f81e5fed4b45663a4f2608d35c987600"}],"tempest/api/image/v2/test_images_tasks.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"8212dd7f64589412c3c76a48c6bb79fdda8d6c35","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.assertEqual(1, len(images_list))"},{"line_number":41,"context_line":"        image_id \u003d images_list[0][\u0027id\u0027]"},{"line_number":42,"context_line":"        self.assertEqual(\u0027active\u0027, images_list[0][\u0027status\u0027])"},{"line_number":43,"context_line":"        self.addCleanup(self.client.delete_image, image_id)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Verify task is created correctly"},{"line_number":46,"context_line":"        task_id \u003d body[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_fe192c7a","line":43,"updated":"2015-10-30 06:42:49.000000000","message":"I think we should do \u0027addCleanup()\u0027 if the status is not \u0027active\u0027.","commit_id":"173d7d0321a83b967fc847aed62c93b7fe9745e3"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"5b5fa8edbda506873205bdafb64befbe54c39f19","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.assertEqual(1, len(images_list))"},{"line_number":41,"context_line":"        image_id \u003d images_list[0][\u0027id\u0027]"},{"line_number":42,"context_line":"        self.assertEqual(\u0027active\u0027, images_list[0][\u0027status\u0027])"},{"line_number":43,"context_line":"        self.addCleanup(self.client.delete_image, image_id)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Verify task is created correctly"},{"line_number":46,"context_line":"        task_id \u003d body[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_8a1a097c","line":43,"in_reply_to":"1a26ad4f_fe192c7a","updated":"2015-11-02 10:17:24.000000000","message":"Yes you are right as it is being cleaned up by tearDownClass. Thanks !","commit_id":"173d7d0321a83b967fc847aed62c93b7fe9745e3"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"8319adbb34085e560ecda9d3aa73f925caacb799","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def test_create_image_from_task(self):"},{"line_number":29,"context_line":"        url \u003d \"http://example.com\""},{"line_number":30,"context_line":"        image_name \u003d data_utils.rand_name(\u0027image\u0027)"},{"line_number":31,"context_line":"        body \u003d self.client.create_task(name\u003dimage_name,"},{"line_number":32,"context_line":"                                       container_format\u003d\u0027bare\u0027,"},{"line_number":33,"context_line":"                                       disk_format\u003d\u0027raw\u0027, url\u003durl)"},{"line_number":34,"context_line":"        waiters.wait_for_task_status(self.client,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_01ee7422","line":31,"updated":"2015-11-03 11:55:43.000000000","message":"When is this task deleted ?\n\nWhen is the imported image deleted ?","commit_id":"399374e3f81e5fed4b45663a4f2608d35c987600"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"bed80738ffaacf87f5198e3dc7d1f7ffa8d841e8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def test_create_image_from_task(self):"},{"line_number":29,"context_line":"        url \u003d \"http://example.com\""},{"line_number":30,"context_line":"        image_name \u003d data_utils.rand_name(\u0027image\u0027)"},{"line_number":31,"context_line":"        body \u003d self.client.create_task(name\u003dimage_name,"},{"line_number":32,"context_line":"                                       container_format\u003d\u0027bare\u0027,"},{"line_number":33,"context_line":"                                       disk_format\u003d\u0027raw\u0027, url\u003durl)"},{"line_number":34,"context_line":"        waiters.wait_for_task_status(self.client,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_27adc888","line":31,"in_reply_to":"fa80f949_01ee7422","updated":"2015-11-05 10:34:09.000000000","message":"Delete operation is currently not permitted on Glance Tasks. They are auto deleted after reaching the time based on their expires_at property.\nRef: https://github.com/openstack/glance/blob/master/glance/api/v2/tasks.py#L125\n\nI think we need to delete image by calling addCleanup() method here, else image is not being deleted from backend.","commit_id":"399374e3f81e5fed4b45663a4f2608d35c987600"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"57b3a33b825c1e43bfb9b546c36f721e37e16cd2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.assertEqual(1, len(images_list))"},{"line_number":41,"context_line":"        image_id \u003d images_list[0][\u0027id\u0027]"},{"line_number":42,"context_line":"        self.assertEqual(\u0027active\u0027, images_list[0][\u0027status\u0027])"},{"line_number":43,"context_line":"        self.addCleanup(self.client.delete_image, image_id)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Verify task is created correctly"},{"line_number":46,"context_line":"        task_id \u003d body[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_0d0a0d27","line":43,"updated":"2015-11-09 06:33:31.000000000","message":"I mean if the status is NOT \u0027active\u0027 at L.42, addCleanup() is not be executed. So I think the resource is NOT cleaned up by tearDownClass and remains.\n\nDo I miss something?","commit_id":"0c22dffc8dea6db26ee5368de6762f12c8c53a82"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"5171368dbce500e5defc78c9e485474ed8f0320a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.assertEqual(1, len(images_list))"},{"line_number":41,"context_line":"        image_id \u003d images_list[0][\u0027id\u0027]"},{"line_number":42,"context_line":"        self.assertEqual(\u0027active\u0027, images_list[0][\u0027status\u0027])"},{"line_number":43,"context_line":"        self.addCleanup(self.client.delete_image, image_id)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Verify task is created correctly"},{"line_number":46,"context_line":"        task_id \u003d body[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_25b03343","line":43,"in_reply_to":"da85f559_0d0a0d27","updated":"2015-11-17 06:10:00.000000000","message":"Sorry I misunderstood your previous comment. I have made necessary changes which will cleanup the resource for all the cases.","commit_id":"0c22dffc8dea6db26ee5368de6762f12c8c53a82"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"f921b178a714aba4a8f89f9cfdc75d91cbeb6325","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.idempotent_id(\u0027c1a24094-333f-418a-af43-21825f7ea1c3\u0027)"},{"line_number":28,"context_line":"    def test_create_image_from_task(self):"},{"line_number":29,"context_line":"        url \u003d \"http://example.com\""},{"line_number":30,"context_line":"        image_name \u003d data_utils.rand_name(\u0027image\u0027)"},{"line_number":31,"context_line":"        body \u003d self.client.create_task(name\u003dimage_name,"},{"line_number":32,"context_line":"                                       container_format\u003d\u0027bare\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_4e4838b3","line":29,"updated":"2015-11-30 10:56:37.000000000","message":"We should not hardcode the example.con usage here.\nPlease use the http_image config option from the image section.","commit_id":"53b63923d2959882e7d0d1d1c7b815c6f740423b"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"13f11a9537c9ad7d78528c9007b7d6f871c7ca3f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Here we test the basic operations of tasks\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @test.idempotent_id(\u0027c1a24094-333f-418a-af43-21825f7ea1c3\u0027)"},{"line_number":31,"context_line":"    def test_create_image_from_task(self):"},{"line_number":32,"context_line":"        image_name \u003d data_utils.rand_name(\u0027image\u0027)"},{"line_number":33,"context_line":"        task_input \u003d {"},{"line_number":34,"context_line":"            \"import_from\": CONF.image.http_image,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e67c5b74","line":31,"updated":"2015-12-04 18:26:04.000000000","message":"Please fix the name of this test , it should be with a valid meanings ,\nsee :\nhttps://review.openstack.org/#/c/251092/1/tempest/api/image/v2/test_images_tasks.py\n\nThe task should be explained to user  , create image is not cleat enough ,we should add tests like : \ntask create , import or clone and the type of the images .","commit_id":"47aaadad43c06c2e851b24b3da090a74b031cfba"}],"tempest/common/waiters.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"8319adbb34085e560ecda9d3aa73f925caacb799","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    \"\"\"Waits for a task to reach a given status."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    The client should have a show_task(task_id) method to get the task."},{"line_number":240,"context_line":"    The client should also have build_interval and build_timeout attributes."},{"line_number":241,"context_line":"    \"\"\""},{"line_number":242,"context_line":"    task \u003d client.show_task(task_id)"},{"line_number":243,"context_line":"    start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_86d83af1","line":240,"updated":"2015-11-03 11:55:43.000000000","message":"You should have access to the CONF object directly here","commit_id":"399374e3f81e5fed4b45663a4f2608d35c987600"}],"tempest/services/image/v2/json/image_client.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"8212dd7f64589412c3c76a48c6bb79fdda8d6c35","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        body \u003d json.loads(body)"},{"line_number":294,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def get_task(self, task_id):"},{"line_number":297,"context_line":"        url \u003d \u0027v2/tasks/%s\u0027 % task_id"},{"line_number":298,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":299,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_1e4d083e","line":296,"updated":"2015-10-30 06:42:49.000000000","message":"I think this should be \u0027show_task()\u0027 for the naming consistency if you don\u0027t have strong opinion.\n\nsee, http://specs.openstack.org/openstack/qa-specs/specs/tempest/consistent-service-method-names.html#get-resources-id","commit_id":"173d7d0321a83b967fc847aed62c93b7fe9745e3"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"5b5fa8edbda506873205bdafb64befbe54c39f19","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        body \u003d json.loads(body)"},{"line_number":294,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def get_task(self, task_id):"},{"line_number":297,"context_line":"        url \u003d \u0027v2/tasks/%s\u0027 % task_id"},{"line_number":298,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":299,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_ca048119","line":296,"in_reply_to":"1a26ad4f_1e4d083e","updated":"2015-11-02 10:17:24.000000000","message":"Done","commit_id":"173d7d0321a83b967fc847aed62c93b7fe9745e3"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"f921b178a714aba4a8f89f9cfdc75d91cbeb6325","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":274,"context_line":"        return service_client.ResponseBody(resp)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def create_task(self, name, container_format, disk_format, url):"},{"line_number":277,"context_line":"        params \u003d {"},{"line_number":278,"context_line":"            \"type\": \"import\","},{"line_number":279,"context_line":"            \"input\": {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_aeae847e","line":276,"updated":"2015-11-30 10:56:37.000000000","message":"This task create assumes one task type and parameter list.\nEven the cli interface is not so helpful it example a json as an input.\n\nThis function should have  to args:\n- type\n- input\n\nThis function might have helper function for the \u0027import\u0027,\nwhich calls the basic task creator.","commit_id":"53b63923d2959882e7d0d1d1c7b815c6f740423b"}],"tempest/services/image/v2/json/images_client.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"63bd8a06d88203669d9ef578899c8dc330b3ca9a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":271,"context_line":"        return service_client.ResponseBody(resp)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def create_task(self, type, input):"},{"line_number":274,"context_line":"        params \u003d {\"type\": type, \"input\": input}"},{"line_number":275,"context_line":"        data \u003d json.dumps(params)"},{"line_number":276,"context_line":"        resp, body \u003d self.post(\u0027v2/tasks\u0027, data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_351cd276","line":273,"updated":"2015-12-04 16:39:26.000000000","message":"The signature of this method should be\ndef create_task(self, **kwargs)\n\nAnd caller should call this method:\n  create_task(type\u003dtype, input\u003dinput)","commit_id":"3b69556863b1121a12dde2168392813b9f864f33"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"cd556908788bdab1a34b0a96bf7133e8721b304c","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":271,"context_line":"        return service_client.ResponseBody(resp)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def create_task(self, type, input):"},{"line_number":274,"context_line":"        params \u003d {\"type\": type, \"input\": input}"},{"line_number":275,"context_line":"        data \u003d json.dumps(params)"},{"line_number":276,"context_line":"        resp, body \u003d self.post(\u0027v2/tasks\u0027, data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_a3b08544","line":273,"in_reply_to":"7a740942_351cd276","updated":"2015-12-04 17:58:55.000000000","message":"Done","commit_id":"3b69556863b1121a12dde2168392813b9f864f33"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"0055bd9f48d83da52f803f4a1941c7f19ad2d48a","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def list_tasks(self):"},{"line_number":288,"context_line":"        url \u003d \u0027v2/tasks\u0027"},{"line_number":289,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":290,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":291,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e60f7bdf","line":288,"updated":"2015-12-04 18:29:28.000000000","message":"I think there is another flag for tasks , def list_tasks(self, params\u003dNone):","commit_id":"47aaadad43c06c2e851b24b3da090a74b031cfba"}]}
