)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"207f2108095df1477a5c26eed7e29abe4ea50f05","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"53e3fadd_81315e59","updated":"2025-12-04 19:17:35.000000000","message":"This is related to https://review.opendev.org/c/openstack/glance/+/967878","commit_id":"223e6cc2323e905b38ee70da2acb23131235f995"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4da8de091ae751f4c360633f98bca6b6c6a603cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"01c67708_c7a30628","updated":"2026-03-02 10:47:59.000000000","message":"And I guess this won\u0027t merge until next cycle now either. Maybe mark it as draft until it\u0027s ready to go?","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a6f3c9e8e037ebf5f5764658d4f95c2127b10bd6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4f3e1365_a54bb4c3","updated":"2026-02-24 08:06:54.000000000","message":"LGTM ! correctly calling glance api.\nReleasenote should be added here.","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfcbd2449ba700ae882bd00bfac66330e1afbc5a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"161dd45f_2ea4db82","updated":"2026-03-04 16:51:44.000000000","message":"Thanks for the reviews!","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0f59fd9fa866ace5a6e81777b2252fd1bda98b6e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3564fa2c_7dc911f8","updated":"2026-03-02 10:47:13.000000000","message":"This is looking good. Just have some nits and we need a release note.","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ae4be121242fe98ad2becf36fce51c3add82429e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e26ecae9_28e7e8b4","updated":"2026-02-11 11:43:08.000000000","message":"recheck\n\nmanila gate should be fixed now","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"fe0cb337700ae0f5e549fcf401778fd1bee83fc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"738717f5_964463f0","updated":"2026-03-09 10:52:31.000000000","message":"lgtm, Thank you !","commit_id":"675794d1af43af1a773f2e6e866f24736d740c7d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dc643b56af58cd8e27158528199bb1f8e3a0c4d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1a771508_67db6ba2","updated":"2026-06-17 09:54:04.000000000","message":"Two tiny nits in the signatures","commit_id":"6716dafaa9ab4ca9e974138b20e5e7ca71ca2da2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b6dd542b8149460ca30752c6e22ace87ed9cb5af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6d708519_afcd3065","updated":"2026-06-17 14:41:00.000000000","message":"Fixed the missing import","commit_id":"3134cf5ece79694a242a58c88cd4afa7b7d7482f"}],"openstack/image/_download.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0f59fd9fa866ace5a6e81777b2252fd1bda98b6e","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def download("},{"line_number":90,"context_line":"        self,"},{"line_number":91,"context_line":"        session,"},{"line_number":92,"context_line":"        stream\u003dFalse,"},{"line_number":93,"context_line":"        output\u003dNone,"},{"line_number":94,"context_line":"        chunk_size\u003d1024 * 1024,"}],"source_content_type":"text/x-python","patch_set":4,"id":"181ccc54_51c963ab","line":91,"updated":"2026-03-02 10:47:13.000000000","message":"Can we make these kwarg-only like their caller?\n\n```suggestion\n        session,\n        *,\n```","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfcbd2449ba700ae882bd00bfac66330e1afbc5a","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def download("},{"line_number":90,"context_line":"        self,"},{"line_number":91,"context_line":"        session,"},{"line_number":92,"context_line":"        stream\u003dFalse,"},{"line_number":93,"context_line":"        output\u003dNone,"},{"line_number":94,"context_line":"        chunk_size\u003d1024 * 1024,"}],"source_content_type":"text/x-python","patch_set":4,"id":"34aadcb4_0adbd89f","line":91,"in_reply_to":"181ccc54_51c963ab","updated":"2026-03-04 16:51:44.000000000","message":"Done","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dc643b56af58cd8e27158528199bb1f8e3a0c4d3","unresolved":true,"context_lines":[{"line_number":95,"context_line":"        stream: bool \u003d False,"},{"line_number":96,"context_line":"        output: str | io.IOBase | None \u003d None,"},{"line_number":97,"context_line":"        chunk_size: int \u003d 1024 * 1024,"},{"line_number":98,"context_line":"        store_preferences: list[str] | None \u003d None,"},{"line_number":99,"context_line":"    ) -\u003e req_lib.Response:"},{"line_number":100,"context_line":"        \"\"\"Download the data contained in an image."},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"8733f7c4_fca72f67","line":98,"updated":"2026-06-17 09:54:04.000000000","message":"It would be better to use an abstract type here so people can pass e.g. a `set` if they want to instead. Also, let\u0027s make this a kwarg-only parameter.\n\n```suggestion\n        *,\n        store_preferences: Sequence[str] | None \u003d None,\n```","commit_id":"6716dafaa9ab4ca9e974138b20e5e7ca71ca2da2"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"0a7aa0c9b85e7e99ea74a9c5ca4d32956ce5caaa","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        stream: bool \u003d False,"},{"line_number":96,"context_line":"        output: str | io.IOBase | None \u003d None,"},{"line_number":97,"context_line":"        chunk_size: int \u003d 1024 * 1024,"},{"line_number":98,"context_line":"        store_preferences: list[str] | None \u003d None,"},{"line_number":99,"context_line":"    ) -\u003e req_lib.Response:"},{"line_number":100,"context_line":"        \"\"\"Download the data contained in an image."},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"971997a4_1093d588","line":98,"in_reply_to":"8733f7c4_fca72f67","updated":"2026-06-17 13:41:33.000000000","message":"Fix applied.","commit_id":"6716dafaa9ab4ca9e974138b20e5e7ca71ca2da2"}],"openstack/image/v2/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dc643b56af58cd8e27158528199bb1f8e3a0c4d3","unresolved":true,"context_lines":[{"line_number":874,"context_line":"        stream: bool \u003d False,"},{"line_number":875,"context_line":"        output: str | io.IOBase | None \u003d None,"},{"line_number":876,"context_line":"        chunk_size: int \u003d 1024 * 1024,"},{"line_number":877,"context_line":"        store_preferences: list[str] | None \u003d None,"},{"line_number":878,"context_line":"    ) -\u003e requests.Response:"},{"line_number":879,"context_line":"        \"\"\"Download an image"},{"line_number":880,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3b510b99_28f7e498","line":877,"updated":"2026-06-17 09:54:04.000000000","message":"As with the resource itself\n\n```suggestion\n        store_preferences: Sequence[str] | None \u003d None,\n```","commit_id":"6716dafaa9ab4ca9e974138b20e5e7ca71ca2da2"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"0a7aa0c9b85e7e99ea74a9c5ca4d32956ce5caaa","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        stream: bool \u003d False,"},{"line_number":875,"context_line":"        output: str | io.IOBase | None \u003d None,"},{"line_number":876,"context_line":"        chunk_size: int \u003d 1024 * 1024,"},{"line_number":877,"context_line":"        store_preferences: list[str] | None \u003d None,"},{"line_number":878,"context_line":"    ) -\u003e requests.Response:"},{"line_number":879,"context_line":"        \"\"\"Download an image"},{"line_number":880,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d0eed278_a2ae2c84","line":877,"in_reply_to":"3b510b99_28f7e498","updated":"2026-06-17 13:41:33.000000000","message":"Fix applied.","commit_id":"6716dafaa9ab4ca9e974138b20e5e7ca71ca2da2"}],"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":"0f59fd9fa866ace5a6e81777b2252fd1bda98b6e","unresolved":true,"context_lines":[{"line_number":530,"context_line":"        self.assertEqual(rv, resp2)"},{"line_number":531,"context_line":"        self.assertIsNone(rv.headers.get(\u0027content-md5\u0027))"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        # With store preferences"},{"line_number":534,"context_line":"        self.sess.get.side_effect \u003d [resp1, resp2]"},{"line_number":535,"context_line":"        rv \u003d sot.download("},{"line_number":536,"context_line":"            self.sess, stream\u003dTrue, store_preferences\u003d[\u0027ceph\u0027, \u0027s3\u0027]"},{"line_number":537,"context_line":"        )"},{"line_number":538,"context_line":"        self.sess.get.assert_called_with("},{"line_number":539,"context_line":"            \u0027images/IDENTIFIER/file?prefer\u003dceph,s3\u0027, stream\u003dTrue"},{"line_number":540,"context_line":"        )"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_image_download_output_fd(self):"},{"line_number":543,"context_line":"        output_file \u003d io.BytesIO()"}],"source_content_type":"text/x-python","patch_set":4,"id":"76b8e7d6_241e8928","line":540,"range":{"start_line":533,"start_character":0,"end_line":540,"end_character":9},"updated":"2026-03-02 10:47:13.000000000","message":"Can we split this out into a separate test? Or at lease use `self.subTest`?","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfcbd2449ba700ae882bd00bfac66330e1afbc5a","unresolved":true,"context_lines":[{"line_number":530,"context_line":"        self.assertEqual(rv, resp2)"},{"line_number":531,"context_line":"        self.assertIsNone(rv.headers.get(\u0027content-md5\u0027))"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        # With store preferences"},{"line_number":534,"context_line":"        self.sess.get.side_effect \u003d [resp1, resp2]"},{"line_number":535,"context_line":"        rv \u003d sot.download("},{"line_number":536,"context_line":"            self.sess, stream\u003dTrue, store_preferences\u003d[\u0027ceph\u0027, \u0027s3\u0027]"},{"line_number":537,"context_line":"        )"},{"line_number":538,"context_line":"        self.sess.get.assert_called_with("},{"line_number":539,"context_line":"            \u0027images/IDENTIFIER/file?prefer\u003dceph,s3\u0027, stream\u003dTrue"},{"line_number":540,"context_line":"        )"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_image_download_output_fd(self):"},{"line_number":543,"context_line":"        output_file \u003d io.BytesIO()"}],"source_content_type":"text/x-python","patch_set":4,"id":"c6debefe_c88d7a7a","line":540,"range":{"start_line":533,"start_character":0,"end_line":540,"end_character":9},"in_reply_to":"76b8e7d6_241e8928","updated":"2026-03-04 16:51:44.000000000","message":"OK, I used a subTest. I did not know about that, TIL!","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c62f6752611182b697d1e4bb805a90dc75fc3024","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        self.assertEqual(rv, resp2)"},{"line_number":531,"context_line":"        self.assertIsNone(rv.headers.get(\u0027content-md5\u0027))"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        # With store preferences"},{"line_number":534,"context_line":"        self.sess.get.side_effect \u003d [resp1, resp2]"},{"line_number":535,"context_line":"        rv \u003d sot.download("},{"line_number":536,"context_line":"            self.sess, stream\u003dTrue, store_preferences\u003d[\u0027ceph\u0027, \u0027s3\u0027]"},{"line_number":537,"context_line":"        )"},{"line_number":538,"context_line":"        self.sess.get.assert_called_with("},{"line_number":539,"context_line":"            \u0027images/IDENTIFIER/file?prefer\u003dceph,s3\u0027, stream\u003dTrue"},{"line_number":540,"context_line":"        )"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_image_download_output_fd(self):"},{"line_number":543,"context_line":"        output_file \u003d io.BytesIO()"}],"source_content_type":"text/x-python","patch_set":4,"id":"f1f9f269_85345c68","line":540,"range":{"start_line":533,"start_character":0,"end_line":540,"end_character":9},"in_reply_to":"c6debefe_c88d7a7a","updated":"2026-03-04 16:52:06.000000000","message":"Done","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dc643b56af58cd8e27158528199bb1f8e3a0c4d3","unresolved":false,"context_lines":[{"line_number":511,"context_line":"            headers\u003d{\"Content-Type\": \"application/octet-stream\"},"},{"line_number":512,"context_line":"        )"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        test_data \u003d ["},{"line_number":515,"context_line":"            {"},{"line_number":516,"context_line":"                \u0027name\u0027: \u0027Without store preferences\u0027,"},{"line_number":517,"context_line":"                \u0027store_preferences\u0027: None,"}],"source_content_type":"text/x-python","patch_set":7,"id":"c8d4eb3f_23758114","line":514,"updated":"2026-06-17 09:54:04.000000000","message":"Nice 👍","commit_id":"6716dafaa9ab4ca9e974138b20e5e7ca71ca2da2"}],"openstack/tests/unit/image/v2/test_proxy.py":[{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a6f3c9e8e037ebf5f5764658d4f95c2127b10bd6","unresolved":true,"context_lines":[{"line_number":550,"context_line":"                \u0027chunk_size\u0027: 1,"},{"line_number":551,"context_line":"                \u0027stream\u0027: True,"},{"line_number":552,"context_line":"                \u0027store_preferences\u0027: None,"},{"line_number":553,"context_line":"            },"},{"line_number":554,"context_line":"        )"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @mock.patch(\"openstack.image.v2.image.Image.fetch\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"a894f1f8_6b02e397","line":553,"updated":"2026-02-24 08:06:54.000000000","message":"don\u0027t we need a test that actually passes store preferences and verifies they\u0027re forwarded. I think it might be worth having a proxy-level test too.","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfcbd2449ba700ae882bd00bfac66330e1afbc5a","unresolved":true,"context_lines":[{"line_number":550,"context_line":"                \u0027chunk_size\u0027: 1,"},{"line_number":551,"context_line":"                \u0027stream\u0027: True,"},{"line_number":552,"context_line":"                \u0027store_preferences\u0027: None,"},{"line_number":553,"context_line":"            },"},{"line_number":554,"context_line":"        )"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @mock.patch(\"openstack.image.v2.image.Image.fetch\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"d673042e_b73d0462","line":553,"in_reply_to":"70ad9ab2_ae02a626","updated":"2026-03-04 16:51:44.000000000","message":"OK I added a subtest as well.","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0f59fd9fa866ace5a6e81777b2252fd1bda98b6e","unresolved":true,"context_lines":[{"line_number":550,"context_line":"                \u0027chunk_size\u0027: 1,"},{"line_number":551,"context_line":"                \u0027stream\u0027: True,"},{"line_number":552,"context_line":"                \u0027store_preferences\u0027: None,"},{"line_number":553,"context_line":"            },"},{"line_number":554,"context_line":"        )"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @mock.patch(\"openstack.image.v2.image.Image.fetch\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"70ad9ab2_ae02a626","line":553,"in_reply_to":"a894f1f8_6b02e397","updated":"2026-03-02 10:47:13.000000000","message":"Yeah, agreed: you could do with an additional test here","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c62f6752611182b697d1e4bb805a90dc75fc3024","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                \u0027chunk_size\u0027: 1,"},{"line_number":551,"context_line":"                \u0027stream\u0027: True,"},{"line_number":552,"context_line":"                \u0027store_preferences\u0027: None,"},{"line_number":553,"context_line":"            },"},{"line_number":554,"context_line":"        )"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @mock.patch(\"openstack.image.v2.image.Image.fetch\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"f2ea90d4_b12d3b3e","line":553,"in_reply_to":"d673042e_b73d0462","updated":"2026-03-04 16:52:06.000000000","message":"Done","commit_id":"f092d198d63651aa2f3d8a54ae1a462d66c6806d"}],"releasenotes/notes/image-download-store-preferences-40829b8b0b7ac038.yaml":[{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"fe0cb337700ae0f5e549fcf401778fd1bee83fc5","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":"    The SDK now implements a new feature from the Glance API and allows users"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"86a57db0_52026a69","line":1,"updated":"2026-03-09 10:52:31.000000000","message":"nit: stores","commit_id":"675794d1af43af1a773f2e6e866f24736d740c7d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"dc643b56af58cd8e27158528199bb1f8e3a0c4d3","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":"    The SDK now implements a new feature from the Glance API and allows users"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"c19b1ace_03137eb7","line":1,"in_reply_to":"86a57db0_52026a69","updated":"2026-06-17 09:54:04.000000000","message":"Done","commit_id":"675794d1af43af1a773f2e6e866f24736d740c7d"}]}
