)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f7a0d2c6e1022f1bb40dbaeb6a9a9380cb32a745","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"86b73921_04a2fb70","updated":"2025-05-15 19:24:30.000000000","message":"recheck","commit_id":"163297837c9ddcbeefa29293d0af0321e6f5ddc7"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"adfdd698ea08aa814fe406b9ea160494cec22be1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9d36bd1d_dfd302cb","updated":"2025-05-16 14:01:52.000000000","message":"recheck unrelateed failure","commit_id":"163297837c9ddcbeefa29293d0af0321e6f5ddc7"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"31fd8e824a1f5705ffea6a1e57a63e46b032f29c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bc1ede47_b84b6829","updated":"2025-07-03 08:33:37.000000000","message":"Typo in commit message Depneds-On","commit_id":"96d160e441677110c34651ae73096d398c666eb2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"52f1685fbbc2b2dfdae381f17cdbe6ce9f7142be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fafd6a0f_826b8071","updated":"2025-07-03 14:32:01.000000000","message":"Thank you Dan for the inputs, will work on those!","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"706e5c53baed012f620b4935d23ab31f4e773a06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0405694b_f67bea64","updated":"2025-07-03 14:01:41.000000000","message":"recheck unrelated timeout","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"f9a3d2cd8a0df69bd94fdeb3475c1abae8e59777","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"cca31150_0c1fe983","updated":"2025-08-04 13:17:04.000000000","message":"Looks good, one small nitpick","commit_id":"0996290c02d98e42b9b31109e7caf7ba7fe175ee"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"490da6e3614fef2255ff92bbe1df7a1e7b820b6b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"554e38b2_9d06ca97","updated":"2025-08-04 14:04:11.000000000","message":"Thank you for review!!","commit_id":"0996290c02d98e42b9b31109e7caf7ba7fe175ee"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"1d6768c6b789c10fe2a144376593c899b7e96093","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ab082c6e_424aa20d","updated":"2025-07-04 14:07:08.000000000","message":"recheck unrelated failure\nTimeout waiting for Server:5f5e22c1-fea8-4696-a06e-96c6d2e6cb64 to delete","commit_id":"0996290c02d98e42b9b31109e7caf7ba7fe175ee"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3b0601b960b9a2d01f7f8ff084405696f78cb951","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a39a9166_2970a352","updated":"2025-08-04 16:18:01.000000000","message":"recheck unrelated error volume a9ff8841-b0b1-4a03-bea5-3463eb1fd726 failed to build and is in ERROR status","commit_id":"62a323aeddcc0d8895b99d111ffb89992687d340"}],"glance/api/v2/image_data.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"241c70e28d588862a2c0bdc328982374d45f0cc9","unresolved":true,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        image_size \u003d request.headers.get(\"x-openstack-image-size\")"},{"line_number":497,"context_line":"        if image_size:"},{"line_number":498,"context_line":"            image_size \u003d int(image_size)"},{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            image_size \u003d request.content_length or None"},{"line_number":501,"context_line":"        return {\u0027size\u0027: image_size, \u0027data\u0027: request.body_file}"}],"source_content_type":"text/x-python","patch_set":6,"id":"95ee1be4_b78990ab","line":498,"updated":"2025-07-03 14:24:19.000000000","message":"Don\u0027t you need to catch `ValueError` here and raise something legit instead of generating an HTTP 500?\n\nAnd, instead of just bolting that on, may I suggest:\n```\ntry:\n    image_size \u003d int(request.headers.get(\u0027x-openstack-image-size\u0027)\nexcept KeyError:\n    # (confirm this is the right exception)\n    image_size \u003d request.content_length or None\nexcept ValueError:\n    raise Invalid(\u0027Nice try...\u0027)\n```","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"225455768ccecb73a9fc683d503f11e92df11ec9","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        image_size \u003d request.headers.get(\"x-openstack-image-size\")"},{"line_number":497,"context_line":"        if image_size:"},{"line_number":498,"context_line":"            image_size \u003d int(image_size)"},{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            image_size \u003d request.content_length or None"},{"line_number":501,"context_line":"        return {\u0027size\u0027: image_size, \u0027data\u0027: request.body_file}"}],"source_content_type":"text/x-python","patch_set":6,"id":"f8d366e9_0de48178","line":498,"in_reply_to":"1756386d_a05b4df7","updated":"2025-07-03 14:45:38.000000000","message":"IT will be like this\n```\ntry:\n    image_size \u003d int(request.headers.get(\u0027x-openstack-image-size\u0027)\nexcept TypeError:\n    image_size \u003d request.content_length or None\n```\nIt neither raises KeyError or ValueError","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"69a2d227d4dbf1d63831381b6599bb99ea9a7044","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        image_size \u003d request.headers.get(\"x-openstack-image-size\")"},{"line_number":497,"context_line":"        if image_size:"},{"line_number":498,"context_line":"            image_size \u003d int(image_size)"},{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            image_size \u003d request.content_length or None"},{"line_number":501,"context_line":"        return {\u0027size\u0027: image_size, \u0027data\u0027: request.body_file}"}],"source_content_type":"text/x-python","patch_set":6,"id":"c4c2a01b_03ab9db9","line":498,"in_reply_to":"3e33c196_384d5ddd","updated":"2025-07-03 15:08:42.000000000","message":"Yeah, TypeError because get returns None and None can\u0027t be int\u0027d.. makes sense.","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"52f1685fbbc2b2dfdae381f17cdbe6ce9f7142be","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        image_size \u003d request.headers.get(\"x-openstack-image-size\")"},{"line_number":497,"context_line":"        if image_size:"},{"line_number":498,"context_line":"            image_size \u003d int(image_size)"},{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            image_size \u003d request.content_length or None"},{"line_number":501,"context_line":"        return {\u0027size\u0027: image_size, \u0027data\u0027: request.body_file}"}],"source_content_type":"text/x-python","patch_set":6,"id":"1756386d_a05b4df7","line":498,"in_reply_to":"95ee1be4_b78990ab","updated":"2025-07-03 14:32:01.000000000","message":"Acknowledged","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"69a0f5c67b2126f30d8a0b7543c72aa5c01ce893","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        image_size \u003d request.headers.get(\"x-openstack-image-size\")"},{"line_number":497,"context_line":"        if image_size:"},{"line_number":498,"context_line":"            image_size \u003d int(image_size)"},{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            image_size \u003d request.content_length or None"},{"line_number":501,"context_line":"        return {\u0027size\u0027: image_size, \u0027data\u0027: request.body_file}"}],"source_content_type":"text/x-python","patch_set":6,"id":"3e33c196_384d5ddd","line":498,"in_reply_to":"f8d366e9_0de48178","updated":"2025-07-03 14:51:53.000000000","message":"Ignore my last comment, I forgot the case about passing non-int value as header :)","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"}],"glance/tests/unit/v2/test_image_data_resource.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"241c70e28d588862a2c0bdc328982374d45f0cc9","unresolved":true,"context_lines":[{"line_number":569,"context_line":"            mock_add.side_effect \u003d glance_store.Invalid()"},{"line_number":570,"context_line":"            self.assertRaises(webob.exc.HTTPBadRequest, self.controller.stage,"},{"line_number":571,"context_line":"                              request, unit_test_utils.UUID2, \u0027YYYY\u0027, 2)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def test_image_already_on_staging(self):"},{"line_number":574,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":575,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027admin\u0027, \u0027member\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"f3960196_9ef491bc","line":572,"updated":"2025-07-03 14:24:19.000000000","message":"Where are tests that pass the new header?\n\nAlso, need a test for passing a size of \u0027foobar\u0027","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bc65093f4eb551b40601f90c759f77db794be860","unresolved":false,"context_lines":[{"line_number":569,"context_line":"            mock_add.side_effect \u003d glance_store.Invalid()"},{"line_number":570,"context_line":"            self.assertRaises(webob.exc.HTTPBadRequest, self.controller.stage,"},{"line_number":571,"context_line":"                              request, unit_test_utils.UUID2, \u0027YYYY\u0027, 2)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def test_image_already_on_staging(self):"},{"line_number":574,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":575,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027admin\u0027, \u0027member\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"ce677523_74b790bc","line":572,"in_reply_to":"70cc70bf_96cb966d","updated":"2025-07-03 15:55:06.000000000","message":"Done","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"52f1685fbbc2b2dfdae381f17cdbe6ce9f7142be","unresolved":true,"context_lines":[{"line_number":569,"context_line":"            mock_add.side_effect \u003d glance_store.Invalid()"},{"line_number":570,"context_line":"            self.assertRaises(webob.exc.HTTPBadRequest, self.controller.stage,"},{"line_number":571,"context_line":"                              request, unit_test_utils.UUID2, \u0027YYYY\u0027, 2)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def test_image_already_on_staging(self):"},{"line_number":574,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":575,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027admin\u0027, \u0027member\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"70cc70bf_96cb966d","line":572,"in_reply_to":"f3960196_9ef491bc","updated":"2025-07-03 14:32:01.000000000","message":"Ack, will work on those","commit_id":"1ea2795c0b1c8c1ea02edf8f67b85f94f7117db4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"f9a3d2cd8a0df69bd94fdeb3475c1abae8e59777","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        self.data \u003d \u0027\u0027.join(data)"},{"line_number":83,"context_line":"        if not size:"},{"line_number":84,"context_line":"            size \u003d len(self.data)"},{"line_number":85,"context_line":"        if size \u003e len(self.data) or size \u003c len(self.data):"},{"line_number":86,"context_line":"            raise webob.exc.HTTPBadRequest()"},{"line_number":87,"context_line":"        self.size \u003d size"},{"line_number":88,"context_line":"        self.status \u003d \u0027modified-by-fake\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff00386e_fca2e4dd","line":85,"range":{"start_line":85,"start_character":57,"end_line":85,"end_character":58},"updated":"2025-08-04 13:17:04.000000000","message":"I think 5 years from now we\u0027ll read this and wonder why this is not just \"if size !\u003d len(data)\" :) Can we please change it?","commit_id":"0996290c02d98e42b9b31109e7caf7ba7fe175ee"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"490da6e3614fef2255ff92bbe1df7a1e7b820b6b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.data \u003d \u0027\u0027.join(data)"},{"line_number":83,"context_line":"        if not size:"},{"line_number":84,"context_line":"            size \u003d len(self.data)"},{"line_number":85,"context_line":"        if size \u003e len(self.data) or size \u003c len(self.data):"},{"line_number":86,"context_line":"            raise webob.exc.HTTPBadRequest()"},{"line_number":87,"context_line":"        self.size \u003d size"},{"line_number":88,"context_line":"        self.status \u003d \u0027modified-by-fake\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"53084ae5_03539d0e","line":85,"range":{"start_line":85,"start_character":57,"end_line":85,"end_character":58},"in_reply_to":"ff00386e_fca2e4dd","updated":"2025-08-04 14:04:11.000000000","message":"Acknowledged","commit_id":"0996290c02d98e42b9b31109e7caf7ba7fe175ee"}]}
