)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a36a997ccb6407bea3b15c689ce0f1d49ad70c23","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9394a404_17726420","updated":"2022-02-17 17:52:43.000000000","message":"Are there no tests for shell stuff in glanceclient?","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e7aba1a8fbebd1bc6dbd9ac9173cbe52ec2706ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3a107866_8a0a28e9","updated":"2022-02-21 14:22:20.000000000","message":"Hi Dan,\nThank you for review, made changes as per suggestion and also added tests for v2_shell code changes.\nKindly have a look at new PS.","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"1dc1a7907fa276b9dc45816c4669d35a1a94ff75","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"66babe21_8e25ebfd","updated":"2022-02-22 16:15:12.000000000","message":"A couple of questions","commit_id":"726f7c2254511c3523aa56735d95a32ddb1ff2f9"}],"glanceclient/common/utils.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"a60ed5bac4de0c9012b151d2f27f789319c3eebc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"111ee30d_f7344eb8","updated":"2021-08-10 13:25:31.000000000","message":"Nice one, thanks!","commit_id":"f3f36414e5fa45de3542355c035616150ec4f1f2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ba4fbf9b615905ddae9066579b423d0de5fbc1d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"effe2965_8fdd62cb","in_reply_to":"111ee30d_f7344eb8","updated":"2022-02-16 06:07:53.000000000","message":"Ack","commit_id":"f3f36414e5fa45de3542355c035616150ec4f1f2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a36a997ccb6407bea3b15c689ce0f1d49ad70c23","unresolved":true,"context_lines":[{"line_number":189,"context_line":"                                        \"Last Modified (UTC)\","},{"line_number":190,"context_line":"                                        \"Size\","},{"line_number":191,"context_line":"                                        \"Hits\"))"},{"line_number":192,"context_line":"    queue_pt \u003d prettytable.PrettyTable((\"ID\",))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    for item in cached_images:"},{"line_number":195,"context_line":"        if item \u003d\u003d \u0027cached_images\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"a9141e17_4b581021","line":192,"updated":"2022-02-17 17:52:43.000000000","message":"If it were me, I\u0027d join these two tables together as if they\u0027re one set of data. Just print one table, with all the values blank (or N/A) for the queued images. A \u0027state\u0027 column of \u0027queued\u0027 or \u0027cached\u0027 would be easy to generate and nice to have.\n\nI\u0027ve written tools to scrape prettytable output before, and this is a kinda weird one-off dual-table dump. Just something to think about, maybe?","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e7aba1a8fbebd1bc6dbd9ac9173cbe52ec2706ff","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                        \"Last Modified (UTC)\","},{"line_number":190,"context_line":"                                        \"Size\","},{"line_number":191,"context_line":"                                        \"Hits\"))"},{"line_number":192,"context_line":"    queue_pt \u003d prettytable.PrettyTable((\"ID\",))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    for item in cached_images:"},{"line_number":195,"context_line":"        if item \u003d\u003d \u0027cached_images\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"98683da0_31645455","line":192,"in_reply_to":"a9141e17_4b581021","updated":"2022-02-21 14:22:20.000000000","message":"Done","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"1dc1a7907fa276b9dc45816c4669d35a1a94ff75","unresolved":true,"context_lines":[{"line_number":211,"context_line":"                                      datetime.datetime.utcfromtimestamp("},{"line_number":212,"context_line":"                                          image[\u0027last_modified\u0027]).isoformat(),"},{"line_number":213,"context_line":"                                      image[\u0027size\u0027],"},{"line_number":214,"context_line":"                                      image[\u0027hits\u0027]))"},{"line_number":215,"context_line":"        else:"},{"line_number":216,"context_line":"            for image in cached_images[item]:"},{"line_number":217,"context_line":"                cache_pt.add_row((image,"}],"source_content_type":"text/x-python","patch_set":6,"id":"2d6f0186_92ce6bcc","line":214,"updated":"2022-02-22 16:15:12.000000000","message":"Shouldn\u0027t this instruction be 4 spaces to the left?","commit_id":"726f7c2254511c3523aa56735d95a32ddb1ff2f9"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"65da38d749aaae1d88bfddc90c0493471efd8218","unresolved":true,"context_lines":[{"line_number":211,"context_line":"                                      datetime.datetime.utcfromtimestamp("},{"line_number":212,"context_line":"                                          image[\u0027last_modified\u0027]).isoformat(),"},{"line_number":213,"context_line":"                                      image[\u0027size\u0027],"},{"line_number":214,"context_line":"                                      image[\u0027hits\u0027]))"},{"line_number":215,"context_line":"        else:"},{"line_number":216,"context_line":"            for image in cached_images[item]:"},{"line_number":217,"context_line":"                cache_pt.add_row((image,"}],"source_content_type":"text/x-python","patch_set":6,"id":"e43aa5cd_ff6d7e4a","line":214,"in_reply_to":"2d6f0186_92ce6bcc","updated":"2022-02-22 16:18:54.000000000","message":"no, this is at right place, it should be indent with line 208,209, 210","commit_id":"726f7c2254511c3523aa56735d95a32ddb1ff2f9"}],"glanceclient/tests/unit/v2/test_cache.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a36a997ccb6407bea3b15c689ce0f1d49ad70c23","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        images \u003d self.controller.list()"},{"line_number":80,"context_line":"        # Verify that we have 2 cached and 2 queued images"},{"line_number":81,"context_line":"        self.assertEqual(2, len(images[\u0027cached_images\u0027]))"},{"line_number":82,"context_line":"        self.assertEqual(2, len(images[\u0027queued_images\u0027]))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @mock.patch.object(common_utils, \u0027has_version\u0027)"},{"line_number":85,"context_line":"    def test_queue_image(self, mock_has_version):"}],"source_content_type":"text/x-python","patch_set":5,"id":"212d6303_04af4259","line":82,"updated":"2022-02-17 17:52:43.000000000","message":"Need a test for the empty case? What about the not supported case?","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cdb2d71f82343f38128219647599e267b66b0365","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        images \u003d self.controller.list()"},{"line_number":80,"context_line":"        # Verify that we have 2 cached and 2 queued images"},{"line_number":81,"context_line":"        self.assertEqual(2, len(images[\u0027cached_images\u0027]))"},{"line_number":82,"context_line":"        self.assertEqual(2, len(images[\u0027queued_images\u0027]))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @mock.patch.object(common_utils, \u0027has_version\u0027)"},{"line_number":85,"context_line":"    def test_queue_image(self, mock_has_version):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3d9bed43_a2375ae1","line":82,"in_reply_to":"0b4c2980_53449f02","updated":"2022-02-21 16:52:15.000000000","message":"Ack","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e7aba1a8fbebd1bc6dbd9ac9173cbe52ec2706ff","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        images \u003d self.controller.list()"},{"line_number":80,"context_line":"        # Verify that we have 2 cached and 2 queued images"},{"line_number":81,"context_line":"        self.assertEqual(2, len(images[\u0027cached_images\u0027]))"},{"line_number":82,"context_line":"        self.assertEqual(2, len(images[\u0027queued_images\u0027]))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @mock.patch.object(common_utils, \u0027has_version\u0027)"},{"line_number":85,"context_line":"    def test_queue_image(self, mock_has_version):"}],"source_content_type":"text/x-python","patch_set":5,"id":"0b4c2980_53449f02","line":82,"in_reply_to":"212d6303_04af4259","updated":"2022-02-21 14:22:20.000000000","message":"Not supported is covered in the last test case in this file.\ntest_cache_not_supported","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"1dc1a7907fa276b9dc45816c4669d35a1a94ff75","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        self.controller.delete(image_id)"},{"line_number":127,"context_line":"        expect \u003d [(\u0027DELETE\u0027, \u0027/v2/cache/%s\u0027 % image_id,"},{"line_number":128,"context_line":"                   {}, None)]"},{"line_number":129,"context_line":"        self.assertEqual(expect, self.api.calls)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @mock.patch.object(common_utils, \u0027has_version\u0027)"},{"line_number":132,"context_line":"    def test_cache_not_supported(self, mock_has_version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"4795e205_4e238a7d","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":24},"updated":"2022-02-22 16:15:12.000000000","message":"Couldn\u0027t we list images here, and make sure we only have one left instead of 2?","commit_id":"726f7c2254511c3523aa56735d95a32ddb1ff2f9"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"65da38d749aaae1d88bfddc90c0493471efd8218","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        self.controller.delete(image_id)"},{"line_number":127,"context_line":"        expect \u003d [(\u0027DELETE\u0027, \u0027/v2/cache/%s\u0027 % image_id,"},{"line_number":128,"context_line":"                   {}, None)]"},{"line_number":129,"context_line":"        self.assertEqual(expect, self.api.calls)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @mock.patch.object(common_utils, \u0027has_version\u0027)"},{"line_number":132,"context_line":"    def test_cache_not_supported(self, mock_has_version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf15b64d_30b86bf9","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":24},"in_reply_to":"4795e205_4e238a7d","updated":"2022-02-22 16:18:54.000000000","message":"This is not actually giving call to API side, it is just mocking the API call and make sure that it is called with expected method/parameters/inputs/","commit_id":"726f7c2254511c3523aa56735d95a32ddb1ff2f9"}],"glanceclient/v2/cache.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"a60ed5bac4de0c9012b151d2f27f789319c3eebc","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @utils.add_req_id_to_object()"},{"line_number":34,"context_line":"    def list(self):"},{"line_number":35,"context_line":"        if self.is_supported(\u0027v2.14\u0027):"},{"line_number":36,"context_line":"            url \u003d \u0027/v2/cache\u0027"},{"line_number":37,"context_line":"            resp, body \u003d self.http_client.get(url)"},{"line_number":38,"context_line":"            return body, resp"}],"source_content_type":"text/x-python","patch_set":2,"id":"cbca7aec_a4c98147","line":35,"range":{"start_line":35,"start_character":30,"end_line":35,"end_character":35},"updated":"2021-08-10 13:25:31.000000000","message":"\"v2.13\" Unfortunately the tests passes due to this check being mocked out. Perhaps we should assert the mocked function was called with correct parameter?","commit_id":"f3f36414e5fa45de3542355c035616150ec4f1f2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7de72085d45ff6fcc3a058f071160b59f93fb93f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @utils.add_req_id_to_object()"},{"line_number":34,"context_line":"    def list(self):"},{"line_number":35,"context_line":"        if self.is_supported(\u0027v2.14\u0027):"},{"line_number":36,"context_line":"            url \u003d \u0027/v2/cache\u0027"},{"line_number":37,"context_line":"            resp, body \u003d self.http_client.get(url)"},{"line_number":38,"context_line":"            return body, resp"}],"source_content_type":"text/x-python","patch_set":2,"id":"02a6ffdc_3ff02502","line":35,"range":{"start_line":35,"start_character":30,"end_line":35,"end_character":35},"in_reply_to":"cbca7aec_a4c98147","updated":"2021-08-10 14:29:24.000000000","message":"Ack","commit_id":"f3f36414e5fa45de3542355c035616150ec4f1f2"}],"glanceclient/v2/shell.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b586e51106bab0dc31e8f08216ea02ff9b9c355a","unresolved":true,"context_lines":[{"line_number":1465,"context_line":"    utils.print_list(tags, columns, field_settings\u003dcolumn_settings)"},{"line_number":1466,"context_line":""},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"@utils.arg(\u0027--target\u0027, default\u003d\u0027both\u0027,"},{"line_number":1469,"context_line":"           choices\u003dcache.TARGET_VALUES,"},{"line_number":1470,"context_line":"           help\u003d_(\u0027Specify which target you want to clear\u0027))"},{"line_number":1471,"context_line":"def do_cache_clear(gc, args):"}],"source_content_type":"text/x-python","patch_set":3,"id":"f9680400_311037bb","line":1468,"updated":"2021-08-27 14:18:13.000000000","message":"We need unit tests to cover this code.","commit_id":"b3fc78920747d40a80097ada94c7a7cd0e60ef0b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ba4fbf9b615905ddae9066579b423d0de5fbc1d6","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"    utils.print_list(tags, columns, field_settings\u003dcolumn_settings)"},{"line_number":1466,"context_line":""},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"@utils.arg(\u0027--target\u0027, default\u003d\u0027both\u0027,"},{"line_number":1469,"context_line":"           choices\u003dcache.TARGET_VALUES,"},{"line_number":1470,"context_line":"           help\u003d_(\u0027Specify which target you want to clear\u0027))"},{"line_number":1471,"context_line":"def do_cache_clear(gc, args):"}],"source_content_type":"text/x-python","patch_set":3,"id":"0587cb23_2eb0bd30","line":1468,"in_reply_to":"f9680400_311037bb","updated":"2022-02-16 06:07:53.000000000","message":"Ack","commit_id":"b3fc78920747d40a80097ada94c7a7cd0e60ef0b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a36a997ccb6407bea3b15c689ce0f1d49ad70c23","unresolved":true,"context_lines":[{"line_number":1512,"context_line":"        utils.exit(\"Direct server endpoint needs to be provided. Do not use \""},{"line_number":1513,"context_line":"                   \"loadbalanced or catalog endpoints.\")"},{"line_number":1514,"context_line":"    cached_images \u003d gc.cache.list()"},{"line_number":1515,"context_line":"    utils.print_cached_images(cached_images)"},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"@utils.arg(\u0027id\u0027, metavar\u003d\u0027\u003cIMAGE_ID\u003e\u0027, nargs\u003d\u0027+\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"821b6f47_ec4f5db6","line":1515,"updated":"2022-02-17 17:52:43.000000000","message":"This will crash if the api is not supported because cached_images will be none.","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e7aba1a8fbebd1bc6dbd9ac9173cbe52ec2706ff","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"        utils.exit(\"Direct server endpoint needs to be provided. Do not use \""},{"line_number":1513,"context_line":"                   \"loadbalanced or catalog endpoints.\")"},{"line_number":1514,"context_line":"    cached_images \u003d gc.cache.list()"},{"line_number":1515,"context_line":"    utils.print_cached_images(cached_images)"},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"@utils.arg(\u0027id\u0027, metavar\u003d\u0027\u003cIMAGE_ID\u003e\u0027, nargs\u003d\u0027+\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"d9ac87be_247c28cd","line":1515,"in_reply_to":"821b6f47_ec4f5db6","updated":"2022-02-21 14:22:20.000000000","message":"I think it will HTTPNotImplemented with message, Glance does not support image caching API (v2.14)","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cdb2d71f82343f38128219647599e267b66b0365","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"        utils.exit(\"Direct server endpoint needs to be provided. Do not use \""},{"line_number":1513,"context_line":"                   \"loadbalanced or catalog endpoints.\")"},{"line_number":1514,"context_line":"    cached_images \u003d gc.cache.list()"},{"line_number":1515,"context_line":"    utils.print_cached_images(cached_images)"},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"@utils.arg(\u0027id\u0027, metavar\u003d\u0027\u003cIMAGE_ID\u003e\u0027, nargs\u003d\u0027+\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ea03ac7_c1ff7ea6","line":1515,"in_reply_to":"d9ac87be_247c28cd","updated":"2022-02-21 16:52:15.000000000","message":"Ah, yep, I see, it returns \"True if supported, else raise\".","commit_id":"5e828e0d4ff6d33311d09f35ff104e6dd9539733"}]}
