)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"da02b42750fc090590d2428cd7d25912bd6c71ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8f0aaac6_a0d1e673","updated":"2025-04-27 12:35:34.000000000","message":"recheck","commit_id":"5932aa44b4b80646cce81ffc46907f8aa6cc40af"}],"glance/tests/functional/__init__.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"2bfe5ea56db3c66586cac9a1fcc09fe3dd5d13a6","unresolved":true,"context_lines":[{"line_number":1559,"context_line":"                                                \u0027property-protections.conf\u0027)"},{"line_number":1560,"context_line":"        property_policies \u003d \u0027property-protections-policies.conf\u0027"},{"line_number":1561,"context_line":"        self.property_file_policies \u003d os.path.join(conf_dir,"},{"line_number":1562,"context_line":"                                                   property_policies)"},{"line_number":1563,"context_line":""},{"line_number":1564,"context_line":"    def copy_data_file(self, file_name, dst_dir):"},{"line_number":1565,"context_line":"        src_file_name \u003d os.path.join(\u0027glance/tests/etc\u0027, file_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"19ecf763_9bfa8f49","line":1562,"range":{"start_line":1562,"start_character":0,"end_line":1562,"end_character":51},"updated":"2025-04-30 15:42:36.000000000","message":"Should we add a cleanUp() call to remove the files we copied?","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0bb833d1a7c7072711aec5257db110b4dce0679","unresolved":true,"context_lines":[{"line_number":1559,"context_line":"                                                \u0027property-protections.conf\u0027)"},{"line_number":1560,"context_line":"        property_policies \u003d \u0027property-protections-policies.conf\u0027"},{"line_number":1561,"context_line":"        self.property_file_policies \u003d os.path.join(conf_dir,"},{"line_number":1562,"context_line":"                                                   property_policies)"},{"line_number":1563,"context_line":""},{"line_number":1564,"context_line":"    def copy_data_file(self, file_name, dst_dir):"},{"line_number":1565,"context_line":"        src_file_name \u003d os.path.join(\u0027glance/tests/etc\u0027, file_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f0a41e9_7cf87ecd","line":1562,"range":{"start_line":1562,"start_character":0,"end_line":1562,"end_character":51},"in_reply_to":"19ecf763_9bfa8f49","updated":"2025-04-30 16:05:26.000000000","message":"IN the end, entire test_dir is removed so we don\u0027t need to do this explicitly","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"14089e9088a2d103d9f47c0e309eb3928bb53bb4","unresolved":false,"context_lines":[{"line_number":1559,"context_line":"                                                \u0027property-protections.conf\u0027)"},{"line_number":1560,"context_line":"        property_policies \u003d \u0027property-protections-policies.conf\u0027"},{"line_number":1561,"context_line":"        self.property_file_policies \u003d os.path.join(conf_dir,"},{"line_number":1562,"context_line":"                                                   property_policies)"},{"line_number":1563,"context_line":""},{"line_number":1564,"context_line":"    def copy_data_file(self, file_name, dst_dir):"},{"line_number":1565,"context_line":"        src_file_name \u003d os.path.join(\u0027glance/tests/etc\u0027, file_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c8bf05a9_4523ce0d","line":1562,"range":{"start_line":1562,"start_character":0,"end_line":1562,"end_character":51},"in_reply_to":"1f0a41e9_7cf87ecd","updated":"2025-04-30 16:21:04.000000000","message":"Done","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"2bfe5ea56db3c66586cac9a1fcc09fe3dd5d13a6","unresolved":true,"context_lines":[{"line_number":1700,"context_line":"        \"\"\""},{"line_number":1701,"context_line":"        json \u003d patches"},{"line_number":1702,"context_line":"        if not isinstance(patches, list):"},{"line_number":1703,"context_line":"            json \u003d list(patches)"},{"line_number":1704,"context_line":""},{"line_number":1705,"context_line":"        if not headers:"},{"line_number":1706,"context_line":"            headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"37f4c0bc_825d96f0","line":1703,"range":{"start_line":1703,"start_character":0,"end_line":1703,"end_character":32},"updated":"2025-04-30 15:42:36.000000000","message":"So, the \"patches\" parameter is either a dict, or a list of dicts. Why not request the caller to always send a list of dicts? This means we\u0027d only handle one type, the code would be clearer, the interface would be stricter.\n\n\nIn glance/tests/functional/v2/test_images_api_policy.py you always use a list of dicts instead of a single dict.","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0bb833d1a7c7072711aec5257db110b4dce0679","unresolved":true,"context_lines":[{"line_number":1700,"context_line":"        \"\"\""},{"line_number":1701,"context_line":"        json \u003d patches"},{"line_number":1702,"context_line":"        if not isinstance(patches, list):"},{"line_number":1703,"context_line":"            json \u003d list(patches)"},{"line_number":1704,"context_line":""},{"line_number":1705,"context_line":"        if not headers:"},{"line_number":1706,"context_line":"            headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"5213c2c7_c5d71810","line":1703,"range":{"start_line":1703,"start_character":0,"end_line":1703,"end_character":32},"in_reply_to":"37f4c0bc_825d96f0","updated":"2025-04-30 16:05:26.000000000","message":"I will try to implement this, will done this to avoid making lots of changes.","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b758e237e12c50855790a0fa3e464b234d1720d3","unresolved":false,"context_lines":[{"line_number":1700,"context_line":"        \"\"\""},{"line_number":1701,"context_line":"        json \u003d patches"},{"line_number":1702,"context_line":"        if not isinstance(patches, list):"},{"line_number":1703,"context_line":"            json \u003d list(patches)"},{"line_number":1704,"context_line":""},{"line_number":1705,"context_line":"        if not headers:"},{"line_number":1706,"context_line":"            headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"bd41ee96_01eceb3e","line":1703,"range":{"start_line":1703,"start_character":0,"end_line":1703,"end_character":32},"in_reply_to":"4071c10f_b5dba523","updated":"2025-05-16 15:34:11.000000000","message":"Done","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"14089e9088a2d103d9f47c0e309eb3928bb53bb4","unresolved":true,"context_lines":[{"line_number":1700,"context_line":"        \"\"\""},{"line_number":1701,"context_line":"        json \u003d patches"},{"line_number":1702,"context_line":"        if not isinstance(patches, list):"},{"line_number":1703,"context_line":"            json \u003d list(patches)"},{"line_number":1704,"context_line":""},{"line_number":1705,"context_line":"        if not headers:"},{"line_number":1706,"context_line":"            headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"4071c10f_b5dba523","line":1703,"range":{"start_line":1703,"start_character":0,"end_line":1703,"end_character":32},"in_reply_to":"5213c2c7_c5d71810","updated":"2025-04-30 16:21:04.000000000","message":"On the second thought I think I will keep it as it is, will refactor it, but if I make this change then I need to make huge changes in test_images.py as it is passing list as an input to patch method in so many cases. Also other tests like, members, metadefs etc are passing list as well.","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"}],"glance/tests/functional/ft_utils.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"2bfe5ea56db3c66586cac9a1fcc09fe3dd5d13a6","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        response \u003d requests.get(path, headers\u003dtest_obj._headers())"},{"line_number":44,"context_line":"    else:"},{"line_number":45,"context_line":"        path \u003d \u0027/v2/images/%s\u0027 % image_id"},{"line_number":46,"context_line":"        response \u003d test_obj.api_get(path, headers\u003dtest_obj._headers())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    test_obj.assertEqual(http.OK, response.status_code)"},{"line_number":49,"context_line":"    image \u003d jsonutils.loads(response.text)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f3578cb_d0494462","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":16},"updated":"2025-04-30 15:42:36.000000000","message":"So once we\u0027re done moving all tests, we\u0027ll always be calling test_obj.api_get, right?","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0bb833d1a7c7072711aec5257db110b4dce0679","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        response \u003d requests.get(path, headers\u003dtest_obj._headers())"},{"line_number":44,"context_line":"    else:"},{"line_number":45,"context_line":"        path \u003d \u0027/v2/images/%s\u0027 % image_id"},{"line_number":46,"context_line":"        response \u003d test_obj.api_get(path, headers\u003dtest_obj._headers())"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    test_obj.assertEqual(http.OK, response.status_code)"},{"line_number":49,"context_line":"    image \u003d jsonutils.loads(response.text)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fe53404_6b10c24c","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":16},"in_reply_to":"1f3578cb_d0494462","updated":"2025-04-30 16:05:26.000000000","message":"Correct","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"}],"glance/tests/functional/v2/test_images.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"2bfe5ea56db3c66586cac9a1fcc09fe3dd5d13a6","unresolved":true,"context_lines":[{"line_number":68,"context_line":"    return headers"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class ImageAPIMethods(test_utils.BaseTestCase):"},{"line_number":72,"context_line":"    def __init__(self, api_get, api_post, api_put, api_delete):"},{"line_number":73,"context_line":"        self.api_get \u003d api_get"},{"line_number":74,"context_line":"        self.api_post \u003d api_post"}],"source_content_type":"text/x-python","patch_set":3,"id":"8cfabf48_ecda837c","line":71,"range":{"start_line":71,"start_character":6,"end_line":71,"end_character":21},"updated":"2025-04-30 15:42:36.000000000","message":"I\u0027m not sure I understand the idea behind this class. Could you add a docstring?","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b0869ff27ae6e58d9fe9ea16d5cb9d9d507179f7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    return headers"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class ImageAPIMethods(test_utils.BaseTestCase):"},{"line_number":72,"context_line":"    def __init__(self, api_get, api_post, api_put, api_delete):"},{"line_number":73,"context_line":"        self.api_get \u003d api_get"},{"line_number":74,"context_line":"        self.api_post \u003d api_post"}],"source_content_type":"text/x-python","patch_set":3,"id":"68bdf8c9_e9a4a3a5","line":71,"range":{"start_line":71,"start_character":6,"end_line":71,"end_character":21},"in_reply_to":"8c4f2487_a00dc839","updated":"2025-04-30 16:30:15.000000000","message":"Done","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0bb833d1a7c7072711aec5257db110b4dce0679","unresolved":true,"context_lines":[{"line_number":68,"context_line":"    return headers"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class ImageAPIMethods(test_utils.BaseTestCase):"},{"line_number":72,"context_line":"    def __init__(self, api_get, api_post, api_put, api_delete):"},{"line_number":73,"context_line":"        self.api_get \u003d api_get"},{"line_number":74,"context_line":"        self.api_post \u003d api_post"}],"source_content_type":"text/x-python","patch_set":3,"id":"8c4f2487_a00dc839","line":71,"range":{"start_line":71,"start_character":6,"end_line":71,"end_character":21},"in_reply_to":"8cfabf48_ecda837c","updated":"2025-04-30 16:05:26.000000000","message":"This is a helper class, lots of code is duplicated at many tests as well as different classes as well. It will be used there instead of duplicating.","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"2bfe5ea56db3c66586cac9a1fcc09fe3dd5d13a6","unresolved":true,"context_lines":[{"line_number":311,"context_line":"        )"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def create_qcow(self, size):"},{"line_number":314,"context_line":"        fn \u003d tempfile.mktemp(prefix\u003d\u0027glance-unittest-images-\u0027,"},{"line_number":315,"context_line":"                             suffix\u003d\u0027.qcow2\u0027)"},{"line_number":316,"context_line":"        subprocess.check_output("},{"line_number":317,"context_line":"            \u0027qemu-img create -f qcow2 %s %i\u0027 % (fn, size),"}],"source_content_type":"text/x-python","patch_set":3,"id":"e5ad9c18_d64960d4","line":314,"range":{"start_line":314,"start_character":22,"end_line":314,"end_character":28},"updated":"2025-04-30 15:42:36.000000000","message":"tempfile.mktemp has been deprecated since 2.3 (https://docs.python.org/3/library/tempfile.html#tempfile.mktemp), please use mkstemp.","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"310e14c400c5e16136180f3203a6a7a411594860","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        )"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def create_qcow(self, size):"},{"line_number":314,"context_line":"        fn \u003d tempfile.mktemp(prefix\u003d\u0027glance-unittest-images-\u0027,"},{"line_number":315,"context_line":"                             suffix\u003d\u0027.qcow2\u0027)"},{"line_number":316,"context_line":"        subprocess.check_output("},{"line_number":317,"context_line":"            \u0027qemu-img create -f qcow2 %s %i\u0027 % (fn, size),"}],"source_content_type":"text/x-python","patch_set":3,"id":"0a7bace7_4f5ad61c","line":314,"range":{"start_line":314,"start_character":22,"end_line":314,"end_character":28},"in_reply_to":"8221dd96_757aa4af","updated":"2025-04-30 17:32:26.000000000","message":"Done","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0bb833d1a7c7072711aec5257db110b4dce0679","unresolved":true,"context_lines":[{"line_number":311,"context_line":"        )"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def create_qcow(self, size):"},{"line_number":314,"context_line":"        fn \u003d tempfile.mktemp(prefix\u003d\u0027glance-unittest-images-\u0027,"},{"line_number":315,"context_line":"                             suffix\u003d\u0027.qcow2\u0027)"},{"line_number":316,"context_line":"        subprocess.check_output("},{"line_number":317,"context_line":"            \u0027qemu-img create -f qcow2 %s %i\u0027 % (fn, size),"}],"source_content_type":"text/x-python","patch_set":3,"id":"8221dd96_757aa4af","line":314,"range":{"start_line":314,"start_character":22,"end_line":314,"end_character":28},"in_reply_to":"e5ad9c18_d64960d4","updated":"2025-04-30 16:05:26.000000000","message":"ACK, I used the previous code as it is, will correct it though","commit_id":"34d2de82c9d2406d39a3a319f2a53ea914b4997d"}]}
