)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"7ded8c190243496c949c6aa639b65e5761da44c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"92178b28_6c136d94","updated":"2026-03-24 16:16:08.000000000","message":"I just rebased this, fixed some pep8 issue and a conflict in the doc.\n\nI\u0027ll check with Abhishek whether we can remove the DNF flag.","commit_id":"b3f05340f6712dd3edb6ddaa1688d72648b30dde"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d5205b5c6ff43d0622e2abedd016a1b391775399","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0a3ce5b0_60180a01","updated":"2026-06-12 19:17:47.000000000","message":"I rebased this patch so it is current and here is my initial review, hoping we can move this forward and improve Glance support in the SDK.","commit_id":"1943f897066f2d5e4b92b6643452f6d247479bb0"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"61e20f293b60d2339a08fc81e78dbaa1070a398b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1ef0aed4_1c89cc7d","updated":"2026-06-23 12:15:28.000000000","message":"I will fix these soon","commit_id":"1943f897066f2d5e4b92b6643452f6d247479bb0"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d9f034b3f60b316f13dd166019a5eea012c90d99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"621d8f7d_fd91838e","updated":"2026-06-23 18:04:56.000000000","message":"Need to look at tests","commit_id":"67b86de63ea4ae139519b2e0e08ff1209deb313f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"70c678a3_82ebe8d2","updated":"2026-06-24 11:42:45.000000000","message":"Change seems fine. I think the LLM went a bit overboard on the docs changes though","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c94c9252_ef18033e","updated":"2026-06-24 11:56:45.000000000","message":"Thank you for inputs Stephen made changes as per your suggestion!!","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70a3579b55306410d4691215f85e5a272fe76dd3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b41c76ef_1dd07d26","updated":"2026-06-24 14:22:24.000000000","message":"I\u0027ll give @cyril@redhat.com another chance to review this. lgtm now though","commit_id":"1d608ca0d5f2928511041d9c76047753fe976847"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a32ff9667c3212bf2fa8bd802a49ce44735d7f60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"dff5abec_8424997b","updated":"2026-06-26 13:27:19.000000000","message":"My comments have been addressed, looks good to go!","commit_id":"1d608ca0d5f2928511041d9c76047753fe976847"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"376740b159118035d2be166c0a483bf13aa2c672","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"94d3206b_8298be16","updated":"2026-06-25 19:17:37.000000000","message":"recheck","commit_id":"1d608ca0d5f2928511041d9c76047753fe976847"}],"README-size-parameter.md":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d5205b5c6ff43d0622e2abedd016a1b391775399","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Image Size Parameter Support"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This document describes the new size parameter support added to the OpenStack Image service operations."},{"line_number":4,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":3,"id":"ce10569a_0db280fd","line":1,"range":{"start_line":1,"start_character":23,"end_line":1,"end_character":30},"updated":"2026-06-12 19:17:47.000000000","message":"I think we can remove this whole file, right?","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"61e20f293b60d2339a08fc81e78dbaa1070a398b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Image Size Parameter Support"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This document describes the new size parameter support added to the OpenStack Image service operations."},{"line_number":4,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":3,"id":"0f3c11a5_aafd09f2","line":1,"range":{"start_line":1,"start_character":23,"end_line":1,"end_character":30},"in_reply_to":"ce10569a_0db280fd","updated":"2026-06-23 12:15:28.000000000","message":"Acknowledged","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"}],"doc/source/user/guides/image.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":31,"context_line":"   :pyobject: upload_image"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Full example: `image resource create`_"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Create Image with Size Parameter"},{"line_number":36,"context_line":"--------------------------------"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Create an image with explicit size specification for improved upload"},{"line_number":39,"context_line":"performance. The size parameter can be provided explicitly or calculated"},{"line_number":40,"context_line":"automatically from the file."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":".. literalinclude:: ../examples/image/create_with_size.py"},{"line_number":43,"context_line":"   :pyobject: upload_image_with_size"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Full example: `image resource create with size`_"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Stage Image with Size Parameter"},{"line_number":48,"context_line":"-------------------------------"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Stage binary image data with explicit size specification for improved"},{"line_number":51,"context_line":"performance. The size parameter can be provided explicitly or calculated"},{"line_number":52,"context_line":"automatically from the file."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. literalinclude:: ../examples/image/stage_with_size.py"},{"line_number":55,"context_line":"   :pyobject: stage_image_with_size"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Full example: `image resource stage with size`_"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Create Image via interoperable image import process"},{"line_number":60,"context_line":"---------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"8ade2de8_d777d39d","line":57,"range":{"start_line":34,"start_character":1,"end_line":57,"end_character":47},"updated":"2026-06-24 11:42:45.000000000","message":"This is overkill IMO. It\u0027s not particularly complicated. Would you mind dropping this an the example?","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":31,"context_line":"   :pyobject: upload_image"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Full example: `image resource create`_"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Create Image with Size Parameter"},{"line_number":36,"context_line":"--------------------------------"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Create an image with explicit size specification for improved upload"},{"line_number":39,"context_line":"performance. The size parameter can be provided explicitly or calculated"},{"line_number":40,"context_line":"automatically from the file."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":".. literalinclude:: ../examples/image/create_with_size.py"},{"line_number":43,"context_line":"   :pyobject: upload_image_with_size"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Full example: `image resource create with size`_"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Stage Image with Size Parameter"},{"line_number":48,"context_line":"-------------------------------"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Stage binary image data with explicit size specification for improved"},{"line_number":51,"context_line":"performance. The size parameter can be provided explicitly or calculated"},{"line_number":52,"context_line":"automatically from the file."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. literalinclude:: ../examples/image/stage_with_size.py"},{"line_number":55,"context_line":"   :pyobject: stage_image_with_size"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Full example: `image resource stage with size`_"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Create Image via interoperable image import process"},{"line_number":60,"context_line":"---------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"73103777_609d8557","line":57,"range":{"start_line":34,"start_character":1,"end_line":57,"end_character":47},"in_reply_to":"8ade2de8_d777d39d","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"doc/source/user/proxies/image_v2.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":23,"context_line":"            add_tag, remove_tag"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":".. note::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"   The ``create_image``, ``upload_image``, and ``stage_image`` methods now support"},{"line_number":28,"context_line":"   a ``size`` parameter that allows you to specify the size of image data in bytes."},{"line_number":29,"context_line":"   This can improve upload performance and reliability. When the size is not provided"},{"line_number":30,"context_line":"   but data is available, the size will be automatically calculated."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Image Task Operations"},{"line_number":33,"context_line":"^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":6,"id":"af198ced_5da6dfe2","line":30,"range":{"start_line":26,"start_character":1,"end_line":30,"end_character":68},"updated":"2026-06-24 11:42:45.000000000","message":"Can we drop this? It belongs in the doc strings, not here.","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":23,"context_line":"            add_tag, remove_tag"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":".. note::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"   The ``create_image``, ``upload_image``, and ``stage_image`` methods now support"},{"line_number":28,"context_line":"   a ``size`` parameter that allows you to specify the size of image data in bytes."},{"line_number":29,"context_line":"   This can improve upload performance and reliability. When the size is not provided"},{"line_number":30,"context_line":"   but data is available, the size will be automatically calculated."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Image Task Operations"},{"line_number":33,"context_line":"^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":6,"id":"add962cc_72a101bd","line":30,"range":{"start_line":26,"start_character":1,"end_line":30,"end_character":68},"in_reply_to":"af198ced_5da6dfe2","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"doc/source/user/utils.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":".. automodule:: openstack.utils"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"File Size Calculation"},{"line_number":7,"context_line":"----------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ``get_file_size()`` function analyzes a file-like object and attempts to"},{"line_number":10,"context_line":"determine its size."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":".. autofunction:: openstack.utils.get_file_size"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This function is used internally by the image service to calculate file sizes"},{"line_number":15,"context_line":"when the size parameter is not provided but data is available."}],"source_content_type":"text/x-rst","patch_set":6,"id":"f8d2925b_3e60c53f","line":15,"range":{"start_line":5,"start_character":1,"end_line":15,"end_character":62},"updated":"2026-06-24 11:42:45.000000000","message":"This is already automatically documented with `automodule`. It should be dropped","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":".. automodule:: openstack.utils"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"File Size Calculation"},{"line_number":7,"context_line":"----------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ``get_file_size()`` function analyzes a file-like object and attempts to"},{"line_number":10,"context_line":"determine its size."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":".. autofunction:: openstack.utils.get_file_size"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This function is used internally by the image service to calculate file sizes"},{"line_number":15,"context_line":"when the size parameter is not provided but data is available."}],"source_content_type":"text/x-rst","patch_set":6,"id":"dee2f53e_290f93f1","line":15,"range":{"start_line":5,"start_character":1,"end_line":15,"end_character":62},"in_reply_to":"f8d2925b_3e60c53f","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"examples/image/create_with_size.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a8d1b956_498adb0b","updated":"2026-06-24 11:42:45.000000000","message":"Per my earlier request, can we drop this example? Feel free to modify the existing create script if you really want to show this off","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9f15201a_a005d654","in_reply_to":"a8d1b956_498adb0b","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"examples/image/stage_with_size.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","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":6,"id":"40af635d_4524c81a","line":1,"updated":"2026-06-24 11:42:45.000000000","message":"As with the previous file, let\u0027s drop this","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","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":6,"id":"88a60d9e_40f0a1b3","line":1,"in_reply_to":"40af635d_4524c81a","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"openstack/image/v2/_proxy.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d5205b5c6ff43d0622e2abedd016a1b391775399","unresolved":true,"context_lines":[{"line_number":402,"context_line":"                    all_stores\u003dall_stores,"},{"line_number":403,"context_line":"                    all_stores_must_succeed\u003dall_stores_must_succeed,"},{"line_number":404,"context_line":"                    **image_kwargs,"},{"line_number":405,"context_line":"                )"},{"line_number":406,"context_line":"        else:"},{"line_number":407,"context_line":"            properties \u003d image_kwargs.pop(\u0027properties\u0027, {})"},{"line_number":408,"context_line":"            image_kwargs.update(self._make_v2_image_params(meta, properties))"}],"source_content_type":"text/x-python","patch_set":3,"id":"017f64f6_5b09cb98","line":405,"range":{"start_line":405,"start_character":16,"end_line":405,"end_character":17},"updated":"2026-06-12 19:17:47.000000000","message":"We could probably do:\n\n    params \u003d dict(...)\n    if size is not None:\n        params[\u0027size\u0027] \u003d size\n    image \u003d self._upload_image(**params)\n    \nOr, since _upload_image() can handle size when it\u0027s None, we could add size to the parameters whether it is None or not. What do you think?","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"61e20f293b60d2339a08fc81e78dbaa1070a398b","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                    all_stores\u003dall_stores,"},{"line_number":403,"context_line":"                    all_stores_must_succeed\u003dall_stores_must_succeed,"},{"line_number":404,"context_line":"                    **image_kwargs,"},{"line_number":405,"context_line":"                )"},{"line_number":406,"context_line":"        else:"},{"line_number":407,"context_line":"            properties \u003d image_kwargs.pop(\u0027properties\u0027, {})"},{"line_number":408,"context_line":"            image_kwargs.update(self._make_v2_image_params(meta, properties))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ba02a75_503e2747","line":405,"range":{"start_line":405,"start_character":16,"end_line":405,"end_character":17},"in_reply_to":"017f64f6_5b09cb98","updated":"2026-06-23 12:15:28.000000000","message":"Acknowledged","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d5205b5c6ff43d0622e2abedd016a1b391775399","unresolved":true,"context_lines":[{"line_number":543,"context_line":"        if size is not None:"},{"line_number":544,"context_line":"            image.stage(self, size\u003dsize)"},{"line_number":545,"context_line":"        else:"},{"line_number":546,"context_line":"            image.stage(self)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        # Stage does not return content, but updates the object"},{"line_number":549,"context_line":"        image.fetch(self)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d812a140_7d6a3f81","line":546,"range":{"start_line":546,"start_character":24,"end_line":546,"end_character":28},"updated":"2026-06-12 19:17:47.000000000","message":"Same here, stage() can handle size\u003d\u003dNone, can it not?","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"61e20f293b60d2339a08fc81e78dbaa1070a398b","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        if size is not None:"},{"line_number":544,"context_line":"            image.stage(self, size\u003dsize)"},{"line_number":545,"context_line":"        else:"},{"line_number":546,"context_line":"            image.stage(self)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        # Stage does not return content, but updates the object"},{"line_number":549,"context_line":"        image.fetch(self)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3d3669ec_0a800ae2","line":546,"range":{"start_line":546,"start_character":24,"end_line":546,"end_character":28},"in_reply_to":"d812a140_7d6a3f81","updated":"2026-06-23 12:15:28.000000000","message":"Acknowledged","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d5205b5c6ff43d0622e2abedd016a1b391775399","unresolved":true,"context_lines":[{"line_number":613,"context_line":"        if size is not None:"},{"line_number":614,"context_line":"            img.upload(self, size\u003dsize)"},{"line_number":615,"context_line":"        else:"},{"line_number":616,"context_line":"            img.upload(self)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        return img"},{"line_number":619,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"4cfc154d_47992ebf","line":616,"range":{"start_line":616,"start_character":12,"end_line":616,"end_character":22},"updated":"2026-06-12 19:17:47.000000000","message":"Ditto","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"61e20f293b60d2339a08fc81e78dbaa1070a398b","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        if size is not None:"},{"line_number":614,"context_line":"            img.upload(self, size\u003dsize)"},{"line_number":615,"context_line":"        else:"},{"line_number":616,"context_line":"            img.upload(self)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        return img"},{"line_number":619,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"29784fd8_a6882c3b","line":616,"range":{"start_line":616,"start_character":12,"end_line":616,"end_character":22},"in_reply_to":"4cfc154d_47992ebf","updated":"2026-06-23 12:15:28.000000000","message":"Acknowledged","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d5205b5c6ff43d0622e2abedd016a1b391775399","unresolved":true,"context_lines":[{"line_number":764,"context_line":"                if size is not None:"},{"line_number":765,"context_line":"                    response \u003d image.upload(self, size\u003dsize)"},{"line_number":766,"context_line":"                else:"},{"line_number":767,"context_line":"                    response \u003d image.upload(self)"},{"line_number":768,"context_line":"                exceptions.raise_from_response(response)"},{"line_number":769,"context_line":"            if use_import:"},{"line_number":770,"context_line":"                kwargs \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"351d678f_918816e5","line":767,"range":{"start_line":767,"start_character":20,"end_line":767,"end_character":28},"updated":"2026-06-12 19:17:47.000000000","message":"Ditto","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"61e20f293b60d2339a08fc81e78dbaa1070a398b","unresolved":false,"context_lines":[{"line_number":764,"context_line":"                if size is not None:"},{"line_number":765,"context_line":"                    response \u003d image.upload(self, size\u003dsize)"},{"line_number":766,"context_line":"                else:"},{"line_number":767,"context_line":"                    response \u003d image.upload(self)"},{"line_number":768,"context_line":"                exceptions.raise_from_response(response)"},{"line_number":769,"context_line":"            if use_import:"},{"line_number":770,"context_line":"                kwargs \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"dd238c73_6f7f8c7c","line":767,"range":{"start_line":767,"start_character":20,"end_line":767,"end_character":28},"in_reply_to":"351d678f_918816e5","updated":"2026-06-23 12:15:28.000000000","message":"Acknowledged","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d5205b5c6ff43d0622e2abedd016a1b391775399","unresolved":true,"context_lines":[{"line_number":780,"context_line":"                    if size is not None:"},{"line_number":781,"context_line":"                        image.stage(self, size\u003dsize)"},{"line_number":782,"context_line":"                    else:"},{"line_number":783,"context_line":"                        image.stage(self)"},{"line_number":784,"context_line":"                elif import_method \u003d\u003d \u0027web-download\u0027:"},{"line_number":785,"context_line":"                    kwargs[\u0027uri\u0027] \u003d uri"},{"line_number":786,"context_line":"                elif import_method \u003d\u003d \u0027glance-download\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"a5aa2b3b_6f4f407c","line":783,"range":{"start_line":783,"start_character":24,"end_line":783,"end_character":35},"updated":"2026-06-12 19:17:47.000000000","message":"Ditto","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"61e20f293b60d2339a08fc81e78dbaa1070a398b","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                    if size is not None:"},{"line_number":781,"context_line":"                        image.stage(self, size\u003dsize)"},{"line_number":782,"context_line":"                    else:"},{"line_number":783,"context_line":"                        image.stage(self)"},{"line_number":784,"context_line":"                elif import_method \u003d\u003d \u0027web-download\u0027:"},{"line_number":785,"context_line":"                    kwargs[\u0027uri\u0027] \u003d uri"},{"line_number":786,"context_line":"                elif import_method \u003d\u003d \u0027glance-download\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fbe6764b_12d8f18e","line":783,"range":{"start_line":783,"start_character":24,"end_line":783,"end_character":35},"in_reply_to":"a5aa2b3b_6f4f407c","updated":"2026-06-23 12:15:28.000000000","message":"Acknowledged","commit_id":"605e713c28c0a3399fb058b32375fd9e6c6ae6dd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":270,"context_line":"            the data has been correctly uploaded."},{"line_number":271,"context_line":"            Default is True."},{"line_number":272,"context_line":"            Implies ``use_import`` equals ``True``."},{"line_number":273,"context_line":"        :param size: Size of the image in bytes."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        Additional kwargs will be passed to the image creation as additional"},{"line_number":276,"context_line":"        metadata for the image and will have all values converted to string"}],"source_content_type":"text/x-python","patch_set":6,"id":"975392b4_e6d7e0c8","line":273,"updated":"2026-06-24 11:42:45.000000000","message":"Do you want to provide that context here as to why you might want to specify this (performance)","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            the data has been correctly uploaded."},{"line_number":271,"context_line":"            Default is True."},{"line_number":272,"context_line":"            Implies ``use_import`` equals ``True``."},{"line_number":273,"context_line":"        :param size: Size of the image in bytes."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        Additional kwargs will be passed to the image creation as additional"},{"line_number":276,"context_line":"        metadata for the image and will have all values converted to string"}],"source_content_type":"text/x-python","patch_set":6,"id":"881d267d_64404958","line":273,"in_reply_to":"975392b4_e6d7e0c8","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":520,"context_line":"        :param data: Optional data to be uploaded as an image."},{"line_number":521,"context_line":"        :param size: Optional size of the data in bytes. If not provided"},{"line_number":522,"context_line":"            and data is a file-like object, the size will be calculated"},{"line_number":523,"context_line":"            automatically."},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        :returns: The results of image creation"},{"line_number":526,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"add5bec9_ec1c413a","line":523,"updated":"2026-06-24 11:42:45.000000000","message":"As above, maybe indicate *why* you would specify this?","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        :param data: Optional data to be uploaded as an image."},{"line_number":521,"context_line":"        :param size: Optional size of the data in bytes. If not provided"},{"line_number":522,"context_line":"            and data is a file-like object, the size will be calculated"},{"line_number":523,"context_line":"            automatically."},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        :returns: The results of image creation"},{"line_number":526,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"0d4fb1ab_e0194ddb","line":523,"in_reply_to":"add5bec9_ec1c413a","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"openstack/image/v2/image.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":309,"context_line":"                raise TypeError("},{"line_number":310,"context_line":"                    f\"size must be an integer, got {type(size).__name__}\""},{"line_number":311,"context_line":"                )"},{"line_number":312,"context_line":"            headers[\u0027x-openstack-image-size\u0027] \u003d str(size)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027file\u0027)"},{"line_number":315,"context_line":"        return session.put("}],"source_content_type":"text/x-python","patch_set":6,"id":"3bef5a3c_0d0d5386","line":312,"updated":"2026-06-24 11:42:45.000000000","message":"nit: Seeing as it doesn\u0027t matter server-side (they\u0027re case-insensitive) can we be consistent with the other headers here?\n\n\n```suggestion\n            headers[\u0027X-OpenStack-Image-Size\u0027] \u003d str(size)\n```","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                raise TypeError("},{"line_number":310,"context_line":"                    f\"size must be an integer, got {type(size).__name__}\""},{"line_number":311,"context_line":"                )"},{"line_number":312,"context_line":"            headers[\u0027x-openstack-image-size\u0027] \u003d str(size)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027file\u0027)"},{"line_number":315,"context_line":"        return session.put("}],"source_content_type":"text/x-python","patch_set":6,"id":"04487ea1_35f8a652","line":312,"in_reply_to":"3bef5a3c_0d0d5386","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":349,"context_line":"                raise TypeError("},{"line_number":350,"context_line":"                    f\"size must be an integer, got {type(size).__name__}\""},{"line_number":351,"context_line":"                )"},{"line_number":352,"context_line":"            headers[\u0027x-openstack-image-size\u0027] \u003d str(size)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027stage\u0027)"},{"line_number":355,"context_line":"        response \u003d session.put("}],"source_content_type":"text/x-python","patch_set":6,"id":"faf2d92b_98d7c82d","line":352,"updated":"2026-06-24 11:42:45.000000000","message":"nit: As above\n\n```suggestion\n            headers[\u0027X-OpenStack-Image-Size\u0027] \u003d str(size)\n```","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                raise TypeError("},{"line_number":350,"context_line":"                    f\"size must be an integer, got {type(size).__name__}\""},{"line_number":351,"context_line":"                )"},{"line_number":352,"context_line":"            headers[\u0027x-openstack-image-size\u0027] \u003d str(size)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027stage\u0027)"},{"line_number":355,"context_line":"        response \u003d session.put("}],"source_content_type":"text/x-python","patch_set":6,"id":"0667efe7_0c38808a","line":352,"in_reply_to":"faf2d92b_98d7c82d","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"openstack/tests/unit/image/v2/test_image.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":377,"context_line":"            headers\u003d{\"Content-Type\": \"application/octet-stream\", \"Accept\": \"\"},"},{"line_number":378,"context_line":"        )"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_upload_with_size(self):"},{"line_number":381,"context_line":"        sot \u003d image.Image(**EXAMPLE)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        self.assertIsNotNone(sot.upload(self.sess, size\u003d1024))"}],"source_content_type":"text/x-python","patch_set":6,"id":"393330cf_c2c77b1b","line":380,"updated":"2026-06-24 11:42:45.000000000","message":"nit: Can you group all `test_upload*` tests together, please. Ditto for `test_stage*` etc.","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            headers\u003d{\"Content-Type\": \"application/octet-stream\", \"Accept\": \"\"},"},{"line_number":378,"context_line":"        )"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_upload_with_size(self):"},{"line_number":381,"context_line":"        sot \u003d image.Image(**EXAMPLE)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        self.assertIsNotNone(sot.upload(self.sess, size\u003d1024))"}],"source_content_type":"text/x-python","patch_set":6,"id":"c792deb7_6cc203e4","line":380,"in_reply_to":"393330cf_c2c77b1b","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}],"releasenotes/notes/set-size-on-upload-1234567890abcdef.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"417809e8d25f2781ac1d06d519963f0e6952c5a2","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for passing image size to Glance API during upload and stage operations"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    - Add `size` parameter to `Image.upload()` and `Image.stage()` methods"},{"line_number":7,"context_line":"    - Add `size` parameter to `Proxy.stage_image()` method"},{"line_number":8,"context_line":"    - Add `get_file_size()` utility function to calculate file size from file-like objects"},{"line_number":9,"context_line":"    - Automatically calculate and pass size header when size is not provided but data is available"},{"line_number":10,"context_line":"    - Pass size as `x-openstack-image-size` header to Glance API"},{"line_number":11,"context_line":"    - Add comprehensive unit tests for size parameter functionality"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    This change allows users to explicitly specify the size of image data being"},{"line_number":14,"context_line":"    uploaded, which can improve performance and reliability of image uploads."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"ca02788b_491750a5","line":11,"range":{"start_line":3,"start_character":5,"end_line":11,"end_character":67},"updated":"2026-06-24 11:42:45.000000000","message":"an you wrap at \u003c\u003d 79 characters","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"74fede0ed893aa1553d73953dbbf15081ec78371","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for passing image size to Glance API during upload and stage operations"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    - Add `size` parameter to `Image.upload()` and `Image.stage()` methods"},{"line_number":7,"context_line":"    - Add `size` parameter to `Proxy.stage_image()` method"},{"line_number":8,"context_line":"    - Add `get_file_size()` utility function to calculate file size from file-like objects"},{"line_number":9,"context_line":"    - Automatically calculate and pass size header when size is not provided but data is available"},{"line_number":10,"context_line":"    - Pass size as `x-openstack-image-size` header to Glance API"},{"line_number":11,"context_line":"    - Add comprehensive unit tests for size parameter functionality"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    This change allows users to explicitly specify the size of image data being"},{"line_number":14,"context_line":"    uploaded, which can improve performance and reliability of image uploads."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7b9c2ab8_4ce8c8dd","line":11,"range":{"start_line":3,"start_character":5,"end_line":11,"end_character":67},"in_reply_to":"ca02788b_491750a5","updated":"2026-06-24 11:56:45.000000000","message":"Acknowledged","commit_id":"c7c1b594829b7b630f48c765e387d5d9c636f916"}]}
