)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7070a8fab7b73e2c4f1fea9b30ffbeb587e9a6d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"932ac3e7_babf26e2","updated":"2023-05-16 17:50:45.000000000","message":"I think you should add example as well\nsimilar to this, https://github.com/openstack/openstacksdk/blob/master/examples/image/import.py\n\nReleasenotes should also be added","commit_id":"9e535a8fa5c902f257b6fc35c982e67ccf46461a"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"100e730a61a3e3dd1fb6b70fcf3b661b0928c033","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7f029591_ea9101d5","in_reply_to":"932ac3e7_babf26e2","updated":"2023-05-17 08:03:59.000000000","message":"Tried to add the example as suggested, not sure it\u0027s right way to add it.\nReleasenote added.","commit_id":"9e535a8fa5c902f257b6fc35c982e67ccf46461a"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"100e730a61a3e3dd1fb6b70fcf3b661b0928c033","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"20d7fa99_19faeef4","updated":"2023-05-17 08:03:59.000000000","message":"Thanks for the review Abhishek !","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a27beee36f8d86f674d869e497d9e029a566e801","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"71c13011_5eeddb2e","updated":"2023-08-04 11:18:45.000000000","message":"Thanks for the review!","commit_id":"fad9cd6c92ecfacb0e4e1987b13d5236ff5d165c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7e6dc3ded05203c80a2d336a01edc67f7dd3378","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"21b2bb3d_fc25d327","updated":"2023-08-10 10:22:04.000000000","message":"Thinking on this more, I think this should be a separate resource.","commit_id":"fad9cd6c92ecfacb0e4e1987b13d5236ff5d165c"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"36655c4d88e92feb3a03782624493b752536af63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"cd6e9daa_cd124c3b","updated":"2024-07-31 07:20:51.000000000","message":"I have a huge problem with the change in the glance itself. As commented in https://review.opendev.org/c/openstack/glance/+/881940/89/glance/api/v2/images.py#1959 it feels like the change does quite an additional harm and I would like to clarify this before we start adding corresponding implementation into sdk (since that change broke new approach of auto-generation of sdk/cli)","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d7609d35368b991a91d71d62563252e3cde3eb8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0bd8d82e_0102f9be","updated":"2024-04-26 10:58:58.000000000","message":"Noted on the review but is https://review.opendev.org/c/openstack/openstacksdk/+/906471 a dupe?","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"89d2faff389a916f5aa5f2252de9949f048f0816","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8e0ac43b_4d44a46a","in_reply_to":"0bd8d82e_0102f9be","updated":"2024-07-31 06:00:57.000000000","message":"Abandoned https://review.opendev.org/c/openstack/openstacksdk/+/906471 with the reason.","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0dd25621f4e3118c7a332a2de1fb15c7307d41dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"dd6d1635_0304f3b2","in_reply_to":"cd6e9daa_cd124c3b","updated":"2024-08-01 13:52:50.000000000","message":"Since this issue has been fixed by https://review.opendev.org/c/openstack/glance/+/925333, I think we are good to go with this change now.","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"748d995f655544daee221243283c742dae82d58c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2dab2505_3292723b","updated":"2024-08-01 15:13:05.000000000","message":"The patch looks good to me, but I would love to learn more about _max_microversion.","commit_id":"7ddacf46939e3cce43d92b1d9ed368c5b5beddae"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0857150ac39aa55cac63d484221eb37611a83fe1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"c2b08349_29f432e9","updated":"2026-02-24 07:26:09.000000000","message":"Thanks for the review ! Please see the inline comments.","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"f75929a3878eeedd626b76d6564335b490b87a44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0714aa05_ae28dbcb","updated":"2026-02-17 11:45:15.000000000","message":"recheck","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a393b6f132c1d737294f699a8bdc690278a2abae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3c911cb5_21b86bca","updated":"2026-02-10 07:49:08.000000000","message":"recheck","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b45ca4018dda2409b5b904ef3ee9c3d785daf658","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"681ccbe9_926c0f7f","updated":"2026-03-23 13:32:18.000000000","message":"Looks pretty good. We need to change one method name though","commit_id":"5354cf12a1907fdab1a174ebf73d2123aa8fec32"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"40b2401603906f0eff7b5f55cb5b141dce133ab1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"b19ac57a_eed59d13","updated":"2026-03-23 14:43:53.000000000","message":"Stephen, Thanks for the review!","commit_id":"46844a98c3b641e02526b9a2c3e4f7279d2de38c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"081b71934a28eb2734792e01b9c12054d685fff9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"6c32d05a_8c6d7582","updated":"2026-04-09 15:58:50.000000000","message":"Actually, I found a bug while testing this.","commit_id":"7044bb944f0537dc8ff5374c4ba1089d31f834dc"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"1f25e125ce283a018055430cf80539624e90fd29","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"200ff373_7b8079db","updated":"2026-03-30 15:19:50.000000000","message":"Looks good to me, this can probably be merged. Thanks Pranali!","commit_id":"7044bb944f0537dc8ff5374c4ba1089d31f834dc"}],"openstack/image/v2/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77002ed0cc33a9bd9b8602bb4e6910563bf7997b","unresolved":true,"context_lines":[{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        :param image: Either the ID of a image or a"},{"line_number":904,"context_line":"            :class:`~openstack.image.v2.image.Image` instance."},{"line_number":905,"context_line":"        : param url: A valid location url"},{"line_number":906,"context_line":"        : do_scure_hash: When set to True, will compute checksum and"},{"line_number":907,"context_line":"            hash for the image"},{"line_number":908,"context_line":"        : validation_data: Values to be used to populate the corresponding"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ebf9c5e_0cef3b15","line":905,"updated":"2023-05-17 09:15:25.000000000","message":"no space between colon (:) and \u0027param\u0027","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a27beee36f8d86f674d869e497d9e029a566e801","unresolved":false,"context_lines":[{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        :param image: Either the ID of a image or a"},{"line_number":904,"context_line":"            :class:`~openstack.image.v2.image.Image` instance."},{"line_number":905,"context_line":"        : param url: A valid location url"},{"line_number":906,"context_line":"        : do_scure_hash: When set to True, will compute checksum and"},{"line_number":907,"context_line":"            hash for the image"},{"line_number":908,"context_line":"        : validation_data: Values to be used to populate the corresponding"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f0fc94b_1a53a145","line":905,"in_reply_to":"3ebf9c5e_0cef3b15","updated":"2023-08-04 11:18:45.000000000","message":"Done","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77002ed0cc33a9bd9b8602bb4e6910563bf7997b","unresolved":true,"context_lines":[{"line_number":906,"context_line":"        : do_scure_hash: When set to True, will compute checksum and"},{"line_number":907,"context_line":"            hash for the image"},{"line_number":908,"context_line":"        : validation_data: Values to be used to populate the corresponding"},{"line_number":909,"context_line":"            image properties."},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        :returns: The updated image"},{"line_number":912,"context_line":"        :rtype: :class:`~openstack.image.v2.image.Image`"}],"source_content_type":"text/x-python","patch_set":3,"id":"5920f9c3_bf5b0007","line":909,"updated":"2023-05-17 09:15:25.000000000","message":"Looks like your docstring has been messed up somewhat?","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a27beee36f8d86f674d869e497d9e029a566e801","unresolved":false,"context_lines":[{"line_number":906,"context_line":"        : do_scure_hash: When set to True, will compute checksum and"},{"line_number":907,"context_line":"            hash for the image"},{"line_number":908,"context_line":"        : validation_data: Values to be used to populate the corresponding"},{"line_number":909,"context_line":"            image properties."},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        :returns: The updated image"},{"line_number":912,"context_line":"        :rtype: :class:`~openstack.image.v2.image.Image`"}],"source_content_type":"text/x-python","patch_set":3,"id":"08eacf0f_ae0b1734","line":909,"in_reply_to":"5920f9c3_bf5b0007","updated":"2023-08-04 11:18:45.000000000","message":"Done","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77002ed0cc33a9bd9b8602bb4e6910563bf7997b","unresolved":true,"context_lines":[{"line_number":911,"context_line":"        :returns: The updated image"},{"line_number":912,"context_line":"        :rtype: :class:`~openstack.image.v2.image.Image`"},{"line_number":913,"context_line":"        \"\"\""},{"line_number":914,"context_line":"        image \u003d self._get_resource(_image.Image, image)"},{"line_number":915,"context_line":"        if not url:"},{"line_number":916,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":917,"context_line":"                \"Location url is required to add the location to image.\""}],"source_content_type":"text/x-python","patch_set":3,"id":"116d03c8_4dc812f8","line":914,"updated":"2023-05-17 09:15:25.000000000","message":"nit: don\u0027t fetch the image until after you\u0027ve done initial validation of parameters","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a27beee36f8d86f674d869e497d9e029a566e801","unresolved":false,"context_lines":[{"line_number":911,"context_line":"        :returns: The updated image"},{"line_number":912,"context_line":"        :rtype: :class:`~openstack.image.v2.image.Image`"},{"line_number":913,"context_line":"        \"\"\""},{"line_number":914,"context_line":"        image \u003d self._get_resource(_image.Image, image)"},{"line_number":915,"context_line":"        if not url:"},{"line_number":916,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":917,"context_line":"                \"Location url is required to add the location to image.\""}],"source_content_type":"text/x-python","patch_set":3,"id":"271413a6_c11eeed7","line":914,"in_reply_to":"116d03c8_4dc812f8","updated":"2023-08-04 11:18:45.000000000","message":"Done","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b22f98664350579a5e1edf6a0bbcad40f760f532","unresolved":true,"context_lines":[{"line_number":978,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":979,"context_line":"                \"Location url is required to add the location to image.\""},{"line_number":980,"context_line":"            )"},{"line_number":981,"context_line":"        if not validation_data:"},{"line_number":982,"context_line":"            validation_data \u003d {}"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        image_id \u003d resource.Resource._get_id(image)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"d628340c_b23efa99","line":982,"range":{"start_line":981,"start_character":0,"end_line":982,"end_character":32},"updated":"2026-02-18 15:18:25.000000000","message":"why not define validation_data\u003d{} at line 965?","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0857150ac39aa55cac63d484221eb37611a83fe1","unresolved":true,"context_lines":[{"line_number":978,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":979,"context_line":"                \"Location url is required to add the location to image.\""},{"line_number":980,"context_line":"            )"},{"line_number":981,"context_line":"        if not validation_data:"},{"line_number":982,"context_line":"            validation_data \u003d {}"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        image_id \u003d resource.Resource._get_id(image)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"dd400a69_99620e9d","line":982,"range":{"start_line":981,"start_character":0,"end_line":982,"end_character":32},"in_reply_to":"d628340c_b23efa99","updated":"2026-02-24 07:26:09.000000000","message":"Using `validation_data\u003d{}` as a default would create a mutable default argument, which is a Python anti-pattern. Using `None` and creating a new dict when needed avoids this issue.","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6cdf65fe618ffa39f73279deb179b08983f79548","unresolved":false,"context_lines":[{"line_number":978,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":979,"context_line":"                \"Location url is required to add the location to image.\""},{"line_number":980,"context_line":"            )"},{"line_number":981,"context_line":"        if not validation_data:"},{"line_number":982,"context_line":"            validation_data \u003d {}"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        image_id \u003d resource.Resource._get_id(image)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7cde74e1_1f0f42dd","line":982,"range":{"start_line":981,"start_character":0,"end_line":982,"end_character":32},"in_reply_to":"dd400a69_99620e9d","updated":"2026-02-24 08:30:01.000000000","message":"Acknowledged","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6cdf65fe618ffa39f73279deb179b08983f79548","unresolved":true,"context_lines":[{"line_number":978,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":979,"context_line":"                \"Location url is required to add the location to image.\""},{"line_number":980,"context_line":"            )"},{"line_number":981,"context_line":"        if validation_data is None:"},{"line_number":982,"context_line":"            validation_data \u003d {}"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        image_id \u003d resource.Resource._get_id(image)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bbdbe23e_7738a766","line":982,"range":{"start_line":981,"start_character":0,"end_line":982,"end_character":32},"updated":"2026-02-24 08:30:01.000000000","message":"I was checking how this is handled in glanceclient. I think we are not allowing any other value than [\u0027os_hash_algo\u0027, \u0027os_hash_value\u0027] and for allowed_hash_algo \u003d [\u0027sha512\u0027, \u0027sha256\u0027, \u0027sha1\u0027, \u0027md5\u0027] should we handle this here as well?","commit_id":"5354cf12a1907fdab1a174ebf73d2123aa8fec32"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b45ca4018dda2409b5b904ef3ee9c3d785daf658","unresolved":true,"context_lines":[{"line_number":978,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":979,"context_line":"                \"Location url is required to add the location to image.\""},{"line_number":980,"context_line":"            )"},{"line_number":981,"context_line":"        if validation_data is None:"},{"line_number":982,"context_line":"            validation_data \u003d {}"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        image_id \u003d resource.Resource._get_id(image)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"93114f98_f9f7e35b","line":982,"range":{"start_line":981,"start_character":0,"end_line":982,"end_character":32},"in_reply_to":"84a54f4f_f4b028d3","updated":"2026-03-23 13:32:18.000000000","message":"We haven\u0027t historically done this kind of validation in SDK since we don\u0027t have the capacity to maintain them. The OpenAPI work should help fix that but for now I would suggest not adding this, as @pdeore@redhat.com notes","commit_id":"5354cf12a1907fdab1a174ebf73d2123aa8fec32"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"82319792b7c9b4c1b7835b6d0b796c3ecf32d928","unresolved":false,"context_lines":[{"line_number":978,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":979,"context_line":"                \"Location url is required to add the location to image.\""},{"line_number":980,"context_line":"            )"},{"line_number":981,"context_line":"        if validation_data is None:"},{"line_number":982,"context_line":"            validation_data \u003d {}"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        image_id \u003d resource.Resource._get_id(image)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"de2379ae_af89bb59","line":982,"range":{"start_line":981,"start_character":0,"end_line":982,"end_character":32},"in_reply_to":"93114f98_f9f7e35b","updated":"2026-03-23 16:32:33.000000000","message":"Done","commit_id":"5354cf12a1907fdab1a174ebf73d2123aa8fec32"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"1e679d082be6df74f37bd2a738119f8599879bcf","unresolved":true,"context_lines":[{"line_number":978,"context_line":"            raise exceptions.InvalidRequest("},{"line_number":979,"context_line":"                \"Location url is required to add the location to image.\""},{"line_number":980,"context_line":"            )"},{"line_number":981,"context_line":"        if validation_data is None:"},{"line_number":982,"context_line":"            validation_data \u003d {}"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        image_id \u003d resource.Resource._get_id(image)"},{"line_number":985,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"84a54f4f_f4b028d3","line":982,"range":{"start_line":981,"start_character":0,"end_line":982,"end_character":32},"in_reply_to":"bbdbe23e_7738a766","updated":"2026-03-02 10:37:09.000000000","message":"Should we really handle this here in _proxy ? this is similar to library layer, right?. In glanceclient we are doing this validation at CLI layer and not library layer. \nI think we would need a follow-up patch to python-openstackclient to add CLI commands for these new apis, right? so we can add this validation there as well?","commit_id":"5354cf12a1907fdab1a174ebf73d2123aa8fec32"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b45ca4018dda2409b5b904ef3ee9c3d785daf658","unresolved":true,"context_lines":[{"line_number":990,"context_line":"            validation_data\u003dvalidation_data,"},{"line_number":991,"context_line":"        )"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"    def get_locations(self, image):"},{"line_number":994,"context_line":"        \"\"\"Get locations associated to an Image"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"        :param image: Either the ID of a image or a"}],"source_content_type":"text/x-python","patch_set":12,"id":"7386641d_72829f13","line":993,"updated":"2026-03-23 13:32:18.000000000","message":"We use `resources` for list operations and `get_resource` for fetch operations. Since this is the former, this should be:\n\n```suggestion\n    def image_locations(self, image):\n```","commit_id":"5354cf12a1907fdab1a174ebf73d2123aa8fec32"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"40b2401603906f0eff7b5f55cb5b141dce133ab1","unresolved":false,"context_lines":[{"line_number":990,"context_line":"            validation_data\u003dvalidation_data,"},{"line_number":991,"context_line":"        )"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"    def get_locations(self, image):"},{"line_number":994,"context_line":"        \"\"\"Get locations associated to an Image"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"        :param image: Either the ID of a image or a"}],"source_content_type":"text/x-python","patch_set":12,"id":"0eafeed0_78ac3cae","line":993,"in_reply_to":"7386641d_72829f13","updated":"2026-03-23 14:43:53.000000000","message":"Acknowledged","commit_id":"5354cf12a1907fdab1a174ebf73d2123aa8fec32"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"081b71934a28eb2734792e01b9c12054d685fff9","unresolved":true,"context_lines":[{"line_number":969,"context_line":"        \"\"\""},{"line_number":970,"context_line":"        return self._update(_image.Image, image, **attrs)"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    def add_image_location(self, image, url, validation_data\u003dNone):"},{"line_number":973,"context_line":"        \"\"\"Add location to an image"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"        :param image: Either the ID of a image or a"}],"source_content_type":"text/x-python","patch_set":14,"id":"72282534_191deb99","line":972,"updated":"2026-04-09 15:58:50.000000000","message":"nit: \n```suggestion\n    def add_image_location(self, image, url, *, validation_data\u003dNone):\n```","commit_id":"7044bb944f0537dc8ff5374c4ba1089d31f834dc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"081b71934a28eb2734792e01b9c12054d685fff9","unresolved":true,"context_lines":[{"line_number":994,"context_line":"            _image_locations.ImageLocations,"},{"line_number":995,"context_line":"            image_id\u003dimage_id,"},{"line_number":996,"context_line":"            url\u003durl,"},{"line_number":997,"context_line":"            validation_data\u003dvalidation_data,"},{"line_number":998,"context_line":"        )"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    def image_locations(self, image):"}],"source_content_type":"text/x-python","patch_set":14,"id":"67ab2b43_0a84f29b","line":997,"updated":"2026-04-09 15:58:50.000000000","message":"I don\u0027t think this is getting passed through. I don\u0027t see it as a property on the `ImageLocations` resource class and from a quick test it looks wrong.\n\n```\n\u003e\u003e\u003e import openstack\n\u003e\u003e\u003e conn \u003d openstack.connect(cloud\u003d\u0027devstack-admin\u0027)\n\u003e\u003e\u003e openstack.enable_logging(debug\u003dTrue)                                                                                                                                                     \n\u003e\u003e\u003e conn.image.add_image_location(\u0027437e6dcb-ff41-434a-a212-fd1f48f6c02f\u0027, \u0027foo\u0027, validation_data\u003d{\u0027allowed_hash_algo\u0027: \u0027sha512\u0027})                                                            \nREQ: curl -g -i -X POST http://10.0.110.69/image/v2/images/437e6dcb-ff41-434a-a212-fd1f48f6c02f/locations -H \"Content-Type: application/json\" -H \"User-Agent: openstacksdk/4.11.0 keystoneauth1/5.13.1 python-requests/2.32.5 CPython/3.14.3\" -H \"X-Auth-Token: {SHA256}78b25c1de3b67d5c25ec1756a8572c07d061bf7e83b3700d44d3a6352cd3817b\" -d \u0027{\"url\": \"foo\"}\u0027\nRESP: [409] Connection: close Content-Length: 185 Content-Type: text/html; charset\u003dUTF-8 Date: Thu, 09 Apr 2026 15:56:08 GMT Server: Apache/2.4.58 (Ubuntu) x-openstack-request-id: req-a693fc42-afc3-48e8-b4a4-53e7bb66fb7d\nRESP BODY: Omitted, Content-Type is set to text/html; charset\u003dUTF-8. Only application/json, text/plain responses have their bodies logged.\nPOST call to image for http://10.0.110.69/image/v2/images/437e6dcb-ff41-434a-a212-fd1f48f6c02f/locations used request id req-a693fc42-afc3-48e8-b4a4-53e7bb66fb7d\n\nTraceback (most recent call last):\n  ...\nopenstack.exceptions.ConflictException: ConflictException: 409: Client Error for url: http://10.0.110.69/image/v2/images/437e6dcb-ff41-434a-a212-fd1f48f6c02f/locations, 409 Conflict: It\u0026#x27;s not allowed to add locations if image status is active.\n```\n\nThe traceback is expected since I just chose a random image, but the missing `validation_data` is not.","commit_id":"7044bb944f0537dc8ff5374c4ba1089d31f834dc"}],"openstack/image/v2/image.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77002ed0cc33a9bd9b8602bb4e6910563bf7997b","unresolved":true,"context_lines":[{"line_number":421,"context_line":"        )"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def add_location("},{"line_number":424,"context_line":"        self, session, loc_url, do_secure_hash\u003dFalse, validation_data\u003dNone"},{"line_number":425,"context_line":"    ):"},{"line_number":426,"context_line":"        \"\"\"Add location to an existing Image when in Queued state.\"\"\""},{"line_number":427,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"4ad341d1_78ba3e13","line":424,"updated":"2023-05-17 09:15:25.000000000","message":"Can you make the last two of these kwarg-only arguments? I don\u0027t think we ever want someone passing these positionally. Also, can we avoid abbreviations in parameter names if possible. Either \u0027url\u0027 or \u0027location\u0027 would work, IMO. e.g.\n\n  def add_location(\n      self,\n      session,\n      url,\n      *,\n      do_secure_hash\u003dFalse,\n      validation_data\u003dNone,\n  ):","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a27beee36f8d86f674d869e497d9e029a566e801","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        )"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def add_location("},{"line_number":424,"context_line":"        self, session, loc_url, do_secure_hash\u003dFalse, validation_data\u003dNone"},{"line_number":425,"context_line":"    ):"},{"line_number":426,"context_line":"        \"\"\"Add location to an existing Image when in Queued state.\"\"\""},{"line_number":427,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"04cbd639_b58fc9e0","line":424,"in_reply_to":"4ad341d1_78ba3e13","updated":"2023-08-04 11:18:45.000000000","message":"Done","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77002ed0cc33a9bd9b8602bb4e6910563bf7997b","unresolved":true,"context_lines":[{"line_number":430,"context_line":"            \u0027validation_data\u0027: validation_data,"},{"line_number":431,"context_line":"        }"},{"line_number":432,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":433,"context_line":"        return session.post(url, json\u003dbody)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def get_locations(self, session):"},{"line_number":436,"context_line":"        \"\"\"Get locations associated to an Image.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"88502cee_25297413","line":433,"updated":"2023-05-17 09:15:25.000000000","message":"Do we need to worry about microversions here? Is there a minimum API version? You can look at the \u0027openstack.compute.v2.server\u0027 module for examples where we use \u0027session.post\u0027 with a microversion, if so.","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7e6dc3ded05203c80a2d336a01edc67f7dd3378","unresolved":true,"context_lines":[{"line_number":430,"context_line":"            \u0027validation_data\u0027: validation_data,"},{"line_number":431,"context_line":"        }"},{"line_number":432,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":433,"context_line":"        return session.post(url, json\u003dbody)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def get_locations(self, session):"},{"line_number":436,"context_line":"        \"\"\"Get locations associated to an Image.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"b7401bb6_a37e7055","line":433,"in_reply_to":"5228ab40_660a039f","updated":"2023-08-10 10:22:04.000000000","message":"The basic idea is that you check is that if a minimum API version is required, you check the version set in the session and fail if not set. You can do this using the `require_microversion` helper from `openstack.utils`.","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a27beee36f8d86f674d869e497d9e029a566e801","unresolved":true,"context_lines":[{"line_number":430,"context_line":"            \u0027validation_data\u0027: validation_data,"},{"line_number":431,"context_line":"        }"},{"line_number":432,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":433,"context_line":"        return session.post(url, json\u003dbody)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def get_locations(self, session):"},{"line_number":436,"context_line":"        \"\"\"Get locations associated to an Image.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5228ab40_660a039f","line":433,"in_reply_to":"88502cee_25297413","updated":"2023-08-04 11:18:45.000000000","message":"I don\u0027t have much SDK expertise so not sure what is the best practice to add the microversion, so tried this.","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"b857f33dd68ae4ede865ae3abfbe25cc2ed43343","unresolved":false,"context_lines":[{"line_number":430,"context_line":"            \u0027validation_data\u0027: validation_data,"},{"line_number":431,"context_line":"        }"},{"line_number":432,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":433,"context_line":"        return session.post(url, json\u003dbody)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def get_locations(self, session):"},{"line_number":436,"context_line":"        \"\"\"Get locations associated to an Image.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"0e72fbcc_96d256ab","line":433,"in_reply_to":"b7401bb6_a37e7055","updated":"2024-02-08 10:34:32.000000000","message":"Done","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77002ed0cc33a9bd9b8602bb4e6910563bf7997b","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":438,"context_line":"        result \u003d session.get(url)"},{"line_number":439,"context_line":"        exceptions.raise_from_response(result)"},{"line_number":440,"context_line":"        return result.json()"}],"source_content_type":"text/x-python","patch_set":3,"id":"0174692e_8e5f4b77","line":440,"updated":"2023-05-17 09:15:25.000000000","message":"Why aren\u0027t we creating an \u0027ImageLocation\u0027 resource? Does it not have a standard structure?","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a27beee36f8d86f674d869e497d9e029a566e801","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":438,"context_line":"        result \u003d session.get(url)"},{"line_number":439,"context_line":"        exceptions.raise_from_response(result)"},{"line_number":440,"context_line":"        return result.json()"}],"source_content_type":"text/x-python","patch_set":3,"id":"77c0fbe3_d93cc4e4","line":440,"in_reply_to":"0174692e_8e5f4b77","updated":"2023-08-04 11:18:45.000000000","message":"Locations are part of image apis so I think we don\u0027t need a separate resource for it. \n\nhttps://review.opendev.org/c/openstack/glance/+/881940/26","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"b857f33dd68ae4ede865ae3abfbe25cc2ed43343","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":438,"context_line":"        result \u003d session.get(url)"},{"line_number":439,"context_line":"        exceptions.raise_from_response(result)"},{"line_number":440,"context_line":"        return result.json()"}],"source_content_type":"text/x-python","patch_set":3,"id":"f3185c07_8026c9ac","line":440,"in_reply_to":"1894ae72_472d4c95","updated":"2024-02-08 10:34:32.000000000","message":"Done","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7e6dc3ded05203c80a2d336a01edc67f7dd3378","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":438,"context_line":"        result \u003d session.get(url)"},{"line_number":439,"context_line":"        exceptions.raise_from_response(result)"},{"line_number":440,"context_line":"        return result.json()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1894ae72_472d4c95","line":440,"in_reply_to":"77c0fbe3_d93cc4e4","updated":"2023-08-10 10:22:04.000000000","message":"I\u0027m thinking it might make more sense to have a resource. You can reference parent resources in it. For an example, look at metadef resources in `openstack/image/v2/metadef_resource_type.py`: we have `namespace_name` in the URL and an equivalent `resource.URI` parameter. You\u0027d do something like that but with e.g. `image_id` instead.","commit_id":"74ad2f15b8476134b2b479c8c1a87c844553dc14"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7e6dc3ded05203c80a2d336a01edc67f7dd3378","unresolved":true,"context_lines":[{"line_number":433,"context_line":"            \u0027url\u0027: location,"},{"line_number":434,"context_line":"            \u0027validation_data\u0027: validation_data,"},{"line_number":435,"context_line":"        }"},{"line_number":436,"context_line":"        microversion \u003d self._get_microversion_for_location_apis("},{"line_number":437,"context_line":"            session, action\u003d\u0027create\u0027"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":440,"context_line":"        return session.post(url, json\u003dbody, microversion\u003dmicroversion)"},{"line_number":441,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe6aa58_a6279086","line":438,"range":{"start_line":436,"start_character":0,"end_line":438,"end_character":9},"updated":"2023-08-10 10:22:04.000000000","message":"Per comment above, this whole function should probably be replaced by a call to `utils.require_microversion`?\n\n\n```\nutils.require_microversion(session, \u00272.17\u0027)\n```","commit_id":"fad9cd6c92ecfacb0e4e1987b13d5236ff5d165c"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"b857f33dd68ae4ede865ae3abfbe25cc2ed43343","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            \u0027url\u0027: location,"},{"line_number":434,"context_line":"            \u0027validation_data\u0027: validation_data,"},{"line_number":435,"context_line":"        }"},{"line_number":436,"context_line":"        microversion \u003d self._get_microversion_for_location_apis("},{"line_number":437,"context_line":"            session, action\u003d\u0027create\u0027"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":440,"context_line":"        return session.post(url, json\u003dbody, microversion\u003dmicroversion)"},{"line_number":441,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"f5affebc_4f7de807","line":438,"range":{"start_line":436,"start_character":0,"end_line":438,"end_character":9},"in_reply_to":"ffe6aa58_a6279086","updated":"2024-02-08 10:34:32.000000000","message":"Done","commit_id":"fad9cd6c92ecfacb0e4e1987b13d5236ff5d165c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7e6dc3ded05203c80a2d336a01edc67f7dd3378","unresolved":true,"context_lines":[{"line_number":443,"context_line":"        \"\"\"Get locations associated to an Image.\"\"\""},{"line_number":444,"context_line":"        microversion \u003d self._get_microversion_for_location_apis("},{"line_number":445,"context_line":"            session, action\u003d\u0027list\u0027"},{"line_number":446,"context_line":"        )"},{"line_number":447,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":448,"context_line":"        result \u003d session.get(url, microversion\u003dmicroversion)"},{"line_number":449,"context_line":"        exceptions.raise_from_response(result)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5110b9a7_97a5163b","line":446,"updated":"2023-08-10 10:22:04.000000000","message":"ditto","commit_id":"fad9cd6c92ecfacb0e4e1987b13d5236ff5d165c"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"b857f33dd68ae4ede865ae3abfbe25cc2ed43343","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        \"\"\"Get locations associated to an Image.\"\"\""},{"line_number":444,"context_line":"        microversion \u003d self._get_microversion_for_location_apis("},{"line_number":445,"context_line":"            session, action\u003d\u0027list\u0027"},{"line_number":446,"context_line":"        )"},{"line_number":447,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027locations\u0027)"},{"line_number":448,"context_line":"        result \u003d session.get(url, microversion\u003dmicroversion)"},{"line_number":449,"context_line":"        exceptions.raise_from_response(result)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baf962c5_425d619e","line":446,"in_reply_to":"5110b9a7_97a5163b","updated":"2024-02-08 10:34:32.000000000","message":"Done","commit_id":"fad9cd6c92ecfacb0e4e1987b13d5236ff5d165c"}],"openstack/image/v2/image_locations.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fd63361425db6cc1abbf9d0454adb0e1c8285223","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"f3546214_937160d4","line":1,"updated":"2024-07-31 06:01:40.000000000","message":"missing copy-right statement","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0dd25621f4e3118c7a332a2de1fb15c7307d41dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"861c2703_96203279","line":1,"in_reply_to":"f3546214_937160d4","updated":"2024-08-01 13:52:50.000000000","message":"Done","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"748d995f655544daee221243283c742dae82d58c","unresolved":true,"context_lines":[{"line_number":22,"context_line":"    allow_create \u003d True"},{"line_number":23,"context_line":"    allow_list \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    _max_microversion \u003d \u00272.17\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    #: Image ID stored through the image API. Typically a UUID."},{"line_number":28,"context_line":"    image_id \u003d resource.URI(\u0027image_id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"e36ddcb6_4e87581d","line":25,"range":{"start_line":25,"start_character":25,"end_line":25,"end_character":29},"updated":"2024-08-01 15:13:05.000000000","message":"So I might be wrong, but this seems weird. Is it really the \"max\" microversion? Seems to me it\u0027s the \"min\" microversion, but:\n\n$ git grep \"\\b_min_microversion\\b\"\n\nreturns nothing.","commit_id":"7ddacf46939e3cce43d92b1d9ed368c5b5beddae"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"40b2401603906f0eff7b5f55cb5b141dce133ab1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    allow_create \u003d True"},{"line_number":23,"context_line":"    allow_list \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    _max_microversion \u003d \u00272.17\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    #: Image ID stored through the image API. Typically a UUID."},{"line_number":28,"context_line":"    image_id \u003d resource.URI(\u0027image_id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"857c9644_68ead393","line":25,"range":{"start_line":25,"start_character":25,"end_line":25,"end_character":29},"in_reply_to":"3e121927_d397e506","updated":"2026-03-23 14:43:53.000000000","message":"Done","commit_id":"7ddacf46939e3cce43d92b1d9ed368c5b5beddae"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0dba0962295558e61c5f10ad28f62bcd24fc1f7f","unresolved":true,"context_lines":[{"line_number":22,"context_line":"    allow_create \u003d True"},{"line_number":23,"context_line":"    allow_list \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    _max_microversion \u003d \u00272.17\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    #: Image ID stored through the image API. Typically a UUID."},{"line_number":28,"context_line":"    image_id \u003d resource.URI(\u0027image_id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3e121927_d397e506","line":25,"range":{"start_line":25,"start_character":25,"end_line":25,"end_character":29},"in_reply_to":"6aff77a6_f5f5d57b","updated":"2026-01-16 05:11:18.000000000","message":"Yes, Glance does not support microversions like Nova or other services, here we checks for feature capability support (whether the Glance service supports location import functionality), not microversion negotiation.","commit_id":"7ddacf46939e3cce43d92b1d9ed368c5b5beddae"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"effee3a1e5865e67cdf83e921b16a1d240b99dd4","unresolved":true,"context_lines":[{"line_number":22,"context_line":"    allow_create \u003d True"},{"line_number":23,"context_line":"    allow_list \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    _max_microversion \u003d \u00272.17\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    #: Image ID stored through the image API. Typically a UUID."},{"line_number":28,"context_line":"    image_id \u003d resource.URI(\u0027image_id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"6aff77a6_f5f5d57b","line":25,"range":{"start_line":25,"start_character":25,"end_line":25,"end_character":29},"in_reply_to":"e36ddcb6_4e87581d","updated":"2024-08-02 08:34:40.000000000","message":"Yeah, we don\u0027t have a `_min_microversion` property. Not yet anyway. `_max_microversion` indicates the latest version of the resource that we are currently aware of/have support for. It it used as the default microversion for requests to the resource unless overridden by the user. It can also be a proxy for the min version if the latest version we have support for is also the first version of the resource.\n\nOn a related point though, I didn\u0027t think Glance supported microversions? Assuming not, what is this actually implying?","commit_id":"7ddacf46939e3cce43d92b1d9ed368c5b5beddae"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b22f98664350579a5e1edf6a0bbcad40f760f532","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 RedHat Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"40162bb9_26145697","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":28},"updated":"2026-02-18 15:18:25.000000000","message":"2026?","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0857150ac39aa55cac63d484221eb37611a83fe1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 RedHat Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a809aab_1638c862","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":28},"in_reply_to":"40162bb9_26145697","updated":"2026-02-24 07:26:09.000000000","message":"Done","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"}],"openstack/tests/unit/image/v2/test_image_locations.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fd63361425db6cc1abbf9d0454adb0e1c8285223","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"bd161479_73d49e03","line":1,"updated":"2024-07-31 06:01:40.000000000","message":"missing copy-right statment","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0dd25621f4e3118c7a332a2de1fb15c7307d41dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"ae5cce2d_027d73be","line":1,"in_reply_to":"bd161479_73d49e03","updated":"2024-08-01 13:52:50.000000000","message":"Done","commit_id":"42b57deebfb34db8e0909fdc75e3fa18f938b904"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b22f98664350579a5e1edf6a0bbcad40f760f532","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 RedHat Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"774ffe79_ae9d8fc8","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":28},"updated":"2026-02-18 15:18:25.000000000","message":"ditto","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0857150ac39aa55cac63d484221eb37611a83fe1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 RedHat Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"ca88e9c4_7f81f256","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":28},"in_reply_to":"774ffe79_ae9d8fc8","updated":"2026-02-24 07:26:09.000000000","message":"Done","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"}],"openstack/tests/unit/image/v2/test_proxy.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b22f98664350579a5e1edf6a0bbcad40f760f532","unresolved":true,"context_lines":[{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def test_image_add_location_with_url(self):"},{"line_number":546,"context_line":"        url \u003d \u0027http://spam.com/\u0027"},{"line_number":547,"context_line":"        validation_data \u003d {}"},{"line_number":548,"context_line":"        self.verify_create("},{"line_number":549,"context_line":"            self.proxy.add_image_location,"},{"line_number":550,"context_line":"            _image_locations.ImageLocations,"}],"source_content_type":"text/x-python","patch_set":11,"id":"0e5ce6e4_0d6f94eb","line":547,"range":{"start_line":547,"start_character":0,"end_line":547,"end_character":28},"updated":"2026-02-18 15:18:25.000000000","message":"don\u0027t we need to test with actual validation data?","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"0857150ac39aa55cac63d484221eb37611a83fe1","unresolved":false,"context_lines":[{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def test_image_add_location_with_url(self):"},{"line_number":546,"context_line":"        url \u003d \u0027http://spam.com/\u0027"},{"line_number":547,"context_line":"        validation_data \u003d {}"},{"line_number":548,"context_line":"        self.verify_create("},{"line_number":549,"context_line":"            self.proxy.add_image_location,"},{"line_number":550,"context_line":"            _image_locations.ImageLocations,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9abb7d37_00a598b9","line":547,"range":{"start_line":547,"start_character":0,"end_line":547,"end_character":28},"in_reply_to":"0e5ce6e4_0d6f94eb","updated":"2026-02-24 07:26:09.000000000","message":"Done","commit_id":"ebc98d7dd20189c1cc9cea4de9ed1825dd352e10"}]}
