)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"44e2ae9405239aee511f34d1dee6a21bda7333bd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"df6113d1_46e80e3c","updated":"2026-09-22 14:19:50.000000000","message":"@omcgonag@redhat.com\n\nHello Owen,\n\nI noticed a minor issue when viewing image details, if the hash is very long, it breaks the layout. I think it should be displayed across multiple lines, screenshot:\nhttps://anfimov.name/openstack/bug_images_details.png","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"7dc757672c3af2123a5746fe9075004648984e84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3506f237_067a0c64","updated":"2026-09-22 00:37:22.000000000","message":"recheck\n\nThe patchset-7 volume-detach failure appears intermittent. Change 1006666 is a separate test-stability fix under review.","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"ea75779f473c8c4038085bda0c573cdb0d740e54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c45d0120_edf1c385","in_reply_to":"05b90ee9_8b1530ef","updated":"2026-09-22 19:22:38.000000000","message":"Hello, yes, my bug fixed now, @dcu995@gmail.com you?","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":37632,"name":"Dmitriy Chubinidze","email":"dcu995@gmail.com","username":"chubinidzedr"},"change_message_id":"9f2f478a42c9d0d8d745324ae5dad6a2e56c4093","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c24b9616_97d109be","in_reply_to":"1f171880_3f78a7d4","updated":"2026-09-22 19:48:08.000000000","message":"I don\u0027t wanna look annoying, but I\u0027ve noticed a bit strange looking checkbox (from my perspective) in Metadata section (https://imgur.com/a/9KzKH5o), I suppose it shouldn\u0027t look like that :)","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"80e9be0da48a4e40953c5acad71ba0d7a157dfde","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"39578f85_d5cfc1a9","in_reply_to":"27db60e8_f691222f","updated":"2026-09-25 19:16:32.000000000","message":"if that is the case, and your work on the metadata form will provide the same support, and to keep this review focused on the kernel and ramdisk fields - I will pull this change","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"81dbcc1007840e9f8d4d63195f00073c65e66111","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a77f8cc6_0e07d006","in_reply_to":"39578f85_d5cfc1a9","updated":"2026-09-25 19:23:28.000000000","message":"changes reverted - will wait for your metadata form patch, and do a revisit.","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":37632,"name":"Dmitriy Chubinidze","email":"dcu995@gmail.com","username":"chubinidzedr"},"change_message_id":"9f24fe79f1efb0af3aa91fd2046d0942879279a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c137fea0_e433c0d0","in_reply_to":"6d2d739c_c6b04874","updated":"2026-09-24 11:59:48.000000000","message":"Thank you, Owen. Looks quite more natural now:)","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"0270477ede192810733953af1f094c834bf074f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"05b90ee9_8b1530ef","in_reply_to":"8ffcfa99_21488353","updated":"2026-09-22 19:12:31.000000000","message":"Thank you for finding these problems - just pushed a fix, please give it a retry and let me know if things are fixed","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"9b32201d0cd94d1a56992f90e70d4cd14442887a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"27db60e8_f691222f","in_reply_to":"c137fea0_e433c0d0","updated":"2026-09-25 15:36:46.000000000","message":"That metadata form is still work in progress, right now it only really supports integer and text fields properly, I\u0027m working on adding support for other types. I would prefer not to have conflicts with this patch, it seems to be out of scope?","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"73f7c1b801ff204a72531a385521fe41d33a3d38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6d2d739c_c6b04874","in_reply_to":"c24b9616_97d109be","updated":"2026-09-23 19:17:48.000000000","message":"Hi Dmitriy - I did some playing around, and no matter what I tried, getting that os_hidden checkbox to play \"nicely\" was next to impossible. I looked at the angularjs version - it uses an editable true/false input selection. \n\nI believe this is the best fix. Let me know if you find this a problem.","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":37632,"name":"Dmitriy Chubinidze","email":"dcu995@gmail.com","username":"chubinidzedr"},"change_message_id":"44433919d74c534edcc968a8e998559b4fab52eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1f171880_3f78a7d4","in_reply_to":"c45d0120_edf1c385","updated":"2026-09-22 19:27:12.000000000","message":"@omcgonag@redhat.com Thanks! Looks properly now :)","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":37632,"name":"Dmitriy Chubinidze","email":"dcu995@gmail.com","username":"chubinidzedr"},"change_message_id":"8acc1888602527fb65442e7d12912a80fa75404d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8ffcfa99_21488353","in_reply_to":"df6113d1_46e80e3c","updated":"2026-09-22 19:02:28.000000000","message":"@omcgonag@redhat.com Hi, Owen, I would note that this kind of problem also occurs in dropdown image details, part of hash is cut out (https://imgur.com/a/baUihBF)","commit_id":"2e5de74a40dff3240078b61097c20afb85f6397f"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"ecc6a2d1317182f844a839002d1ff32d91c1c380","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"7c6fc096_e4732da6","updated":"2026-09-22 19:40:03.000000000","message":"@omcgonag@redhat.com Hello Owen, after latest update this MR, I founded little moment after open details in listing with all images, screenshot:\n\nhttps://anfimov.name/openstack/bug_images_translation.png\n\nVisibility and Protected - values ​​are displayed without localization support.","commit_id":"043203ffad726b1399dd01ebd1df6dbde9199a3e"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"f602df6b2d4ddf2a7a18faaa483267e4f1c3fd8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a6a3a21d_b31d8d76","in_reply_to":"7c6fc096_e4732da6","updated":"2026-09-25 18:34:58.000000000","message":"Hi Ivan, I added translation support for the Visibility and Protected labels in the image details row. Please retest and confirm.","commit_id":"043203ffad726b1399dd01ebd1df6dbde9199a3e"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"d275bb3c22d7e10044924d79564d91bdebc775ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"0b85f4ee_9349b415","updated":"2026-09-25 20:08:16.000000000","message":"@omcgonag@redhat.com Hello Owen, I tested your latest MR, all working correctly, please applied changes may be in separate MR, thank you.","commit_id":"2618c1e4cf4cfdd09651acfdc746cb2d33fa7890"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"be37e07f4a163a479b6659860a1d70b6df0240eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"b79f5c47_ecaebbef","in_reply_to":"0b85f4ee_9349b415","updated":"2026-09-25 23:19:35.000000000","message":"@lazekteam@gmail.com are you recommending/asking that I move this fix to a different review/patch?","commit_id":"2618c1e4cf4cfdd09651acfdc746cb2d33fa7890"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"bebe9e2816b3ddde1bae6c790dc67c658e2b2a35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"f21b6573_d2b8ecb5","in_reply_to":"b0da287a_719bfb64","updated":"2026-10-01 13:54:56.000000000","message":"marking this resolved - the other patch is verified +1 and has some +1 reviews - would be good to get a few +1 on this patch, and get this merged at some point...","commit_id":"2618c1e4cf4cfdd09651acfdc746cb2d33fa7890"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"b22ee96f83102b69a7c82c7120bf00af5ace25bc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"b0da287a_719bfb64","in_reply_to":"b79f5c47_ecaebbef","updated":"2026-09-26 13:39:38.000000000","message":"hi @lazekteam@gmail.com I created review https://review.opendev.org/c/openstack/horizon/+/1007580 containing only the localization fix.\n\nI should have split this from review 1000331 from the start.\n\nI’ve removed those changes from 1000331 and moved them to 1007580.\n\nApologies for the extra review overhead.","commit_id":"2618c1e4cf4cfdd09651acfdc746cb2d33fa7890"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1cff0514c78085c4ffe411828c30e44276916da0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"843a7588_abbdfb78","updated":"2026-10-02 00:16:21.000000000","message":"Thank you for your work! Some comments inside. Also, it would make sense to add a release note for this.","commit_id":"49e10737a4e11800879bc18e4143c641a3fbf63c"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"bee7a5d602e3b559582eb5962ce75438107a72d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"5e409901_932e2020","updated":"2026-10-06 00:47:45.000000000","message":"recheck","commit_id":"c6542a3d55b1ba48788fc87cbfa9232e77c7f8fa"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"3e4192f3d7a5eec244e885f9dfafd8ca5f923fd4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"5044a7fd_4a3b571d","updated":"2026-10-06 18:08:26.000000000","message":"holding off on a recheck - this failure seems to be related to the fix at https://review.opendev.org/c/openstack/horizon/+/1008937 that is currently waiting for its workflow job to complete, and then get merged. Once merged, we can do a recheck again.","commit_id":"489aff92cfe82e5ab0e8a3d536a8093b4d26e993"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"232860d0bdd61c8ea19d8ad8b123518e8f13b975","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"db4985ec_7d96135c","updated":"2026-10-06 22:08:36.000000000","message":"recheck","commit_id":"489aff92cfe82e5ab0e8a3d536a8093b4d26e993"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"27866ff4db42b43b876c83d410d7c1f6bf51d81b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"4d975479_510dc70b","updated":"2026-10-23 12:19:36.000000000","message":"Hi, this patch looks good to me.\nBut in general I see multiple gaps/possible confusions in the Django Image form. Most of them introduced before this patch. I added a longer comment into https://review.opendev.org/c/openstack/horizon/+/992675 which is more proper place for my comment and I do not want to blocking this one.","commit_id":"facb3633145560c32a2be519649b6d0253c653fa"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"5f52998a5878f7b6c2bdb181e3acf6ecaa75a5d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"0af21576_fd1850ff","updated":"2026-10-26 15:19:42.000000000","message":"LGTM. I agree, let\u0027s merge this patch and keep working on the next one.","commit_id":"facb3633145560c32a2be519649b6d0253c653fa"}],"openstack_dashboard/dashboards/project/images/images/forms.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"23dde8dd48c4fc5027f19d7003faabc344ef52f5","unresolved":true,"context_lines":[{"line_number":356,"context_line":"        try:"},{"line_number":357,"context_line":"            kernel_images \u003d api.glance.image_list_detailed("},{"line_number":358,"context_line":"                request, filters\u003d{\u0027disk_format\u0027: \u0027aki\u0027})[0]"},{"line_number":359,"context_line":"        except Exception:"},{"line_number":360,"context_line":"            kernel_images \u003d []"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if kernel_images:"}],"source_content_type":"text/x-python","patch_set":5,"id":"06ebc94b_aa16369a","line":359,"updated":"2026-09-21 14:00:54.000000000","message":"Can we have some exception handling to display the error message here?","commit_id":"de0dc1d97af912b2fed115f1eaf0dd1389728ad8"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"54c12e3a3ea13f78170859ed9ab6cc9927ad04e1","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        try:"},{"line_number":357,"context_line":"            kernel_images \u003d api.glance.image_list_detailed("},{"line_number":358,"context_line":"                request, filters\u003d{\u0027disk_format\u0027: \u0027aki\u0027})[0]"},{"line_number":359,"context_line":"        except Exception:"},{"line_number":360,"context_line":"            kernel_images \u003d []"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if kernel_images:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9b8c66f2_48503686","line":359,"in_reply_to":"06ebc94b_aa16369a","updated":"2026-09-21 20:18:12.000000000","message":"Done. Added exception handling. This change also required updates to Images form tests to verify both error notifications:\n\nhttps://review.opendev.org/c/openstack/horizon/+/1000331/7/openstack_dashboard/dashboards/project/images/images/tests.py","commit_id":"de0dc1d97af912b2fed115f1eaf0dd1389728ad8"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"23dde8dd48c4fc5027f19d7003faabc344ef52f5","unresolved":true,"context_lines":[{"line_number":372,"context_line":"        try:"},{"line_number":373,"context_line":"            ramdisk_images \u003d api.glance.image_list_detailed("},{"line_number":374,"context_line":"                request, filters\u003d{\u0027disk_format\u0027: \u0027ari\u0027})[0]"},{"line_number":375,"context_line":"        except Exception:"},{"line_number":376,"context_line":"            ramdisk_images \u003d []"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        if ramdisk_images:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3e18b8e3_a9d7e428","line":375,"updated":"2026-09-21 14:00:54.000000000","message":"ditto","commit_id":"de0dc1d97af912b2fed115f1eaf0dd1389728ad8"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"54c12e3a3ea13f78170859ed9ab6cc9927ad04e1","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        try:"},{"line_number":373,"context_line":"            ramdisk_images \u003d api.glance.image_list_detailed("},{"line_number":374,"context_line":"                request, filters\u003d{\u0027disk_format\u0027: \u0027ari\u0027})[0]"},{"line_number":375,"context_line":"        except Exception:"},{"line_number":376,"context_line":"            ramdisk_images \u003d []"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        if ramdisk_images:"}],"source_content_type":"text/x-python","patch_set":5,"id":"c985febe_e3d1b1ba","line":375,"in_reply_to":"3e18b8e3_a9d7e428","updated":"2026-09-21 20:18:12.000000000","message":"Done. Added exception handling.\n\nThis change also required updates to the tests to verify both error notifications:\nhttps://review.opendev.org/c/openstack/horizon/+/1000331/7/openstack_dashboard/dashboards/project/images/images/tests.py","commit_id":"de0dc1d97af912b2fed115f1eaf0dd1389728ad8"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1cff0514c78085c4ffe411828c30e44276916da0","unresolved":true,"context_lines":[{"line_number":360,"context_line":"            kernel_images \u003d []"},{"line_number":361,"context_line":"            messages.error(request, _(\u0027Unable to retrieve image list.\u0027))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        if kernel_images:"},{"line_number":364,"context_line":"            choices \u003d [(\u0027\u0027, _(\"Choose an image\"))]"},{"line_number":365,"context_line":"            for image in kernel_images:"},{"line_number":366,"context_line":"                choices.append((image.id, image))"}],"source_content_type":"text/x-python","patch_set":15,"id":"b03f82ed_3e4b556f","line":363,"updated":"2026-10-02 00:16:21.000000000","message":"Choices are built only from disk_format\u003daki images. When the image\u0027s current kernel_id isn\u0027t in that list, the select renders with \"Choose an image\" selected and the real id survives only in the button\u0027s title\u003d attribute. A user who opens Edit to fix a typo in the name submits kernel\u003d\u0027\u0027, and remove_props at line 394 then deletes kernel_id.","commit_id":"49e10737a4e11800879bc18e4143c641a3fbf63c"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"e286aec3a83e01eac16811579c8b6499a08fedc6","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            kernel_images \u003d []"},{"line_number":361,"context_line":"            messages.error(request, _(\u0027Unable to retrieve image list.\u0027))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        if kernel_images:"},{"line_number":364,"context_line":"            choices \u003d [(\u0027\u0027, _(\"Choose an image\"))]"},{"line_number":365,"context_line":"            for image in kernel_images:"},{"line_number":366,"context_line":"                choices.append((image.id, image))"}],"source_content_type":"text/x-python","patch_set":15,"id":"dd5ad729_c121fd04","line":363,"in_reply_to":"b03f82ed_3e4b556f","updated":"2026-10-05 22:28:11.000000000","message":"Done","commit_id":"49e10737a4e11800879bc18e4143c641a3fbf63c"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1cff0514c78085c4ffe411828c30e44276916da0","unresolved":true,"context_lines":[{"line_number":367,"context_line":"            self.fields[\u0027kernel\u0027].choices \u003d choices"},{"line_number":368,"context_line":"        else:"},{"line_number":369,"context_line":"            self.fields[\u0027kernel\u0027].widget \u003d forms.TextInput("},{"line_number":370,"context_line":"                attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027})"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # Populate ramdisk choices"},{"line_number":373,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"efb20c66_53a9a1c6","line":370,"updated":"2026-10-02 00:16:21.000000000","message":"The widget is swapped to TextInput(readonly) but the field stays a ChoiceField with empty choices. Browsers do submit readonly inputs, so the existing id comes back on POST and validation rejects it. Any image with a kernel_id is uneditable in a cloud with no AKI images.\n\nCreateImageForm sidesteps this with del self.fields[\u0027kernel\u0027] at line 199. Keeping the current value as a choice fixes both this and the issue above at once.","commit_id":"49e10737a4e11800879bc18e4143c641a3fbf63c"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"e286aec3a83e01eac16811579c8b6499a08fedc6","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            self.fields[\u0027kernel\u0027].choices \u003d choices"},{"line_number":368,"context_line":"        else:"},{"line_number":369,"context_line":"            self.fields[\u0027kernel\u0027].widget \u003d forms.TextInput("},{"line_number":370,"context_line":"                attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027})"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # Populate ramdisk choices"},{"line_number":373,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f8c36c5_c156b8f6","line":370,"in_reply_to":"efb20c66_53a9a1c6","updated":"2026-10-05 22:28:11.000000000","message":"Done","commit_id":"49e10737a4e11800879bc18e4143c641a3fbf63c"}],"openstack_dashboard/dashboards/project/images/images/tests.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"85ff3aac148262017fa4d4a3390689540fc3f427","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from django.conf import settings"},{"line_number":23,"context_line":"from django.core.files.uploadedfile import InMemoryUploadedFile"},{"line_number":24,"context_line":"from django.core.exceptions import ValidationError"},{"line_number":25,"context_line":"from django.test.utils import override_settings"},{"line_number":26,"context_line":"from django.urls import reverse"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"be13057a_92129686","line":24,"updated":"2026-09-21 01:54:33.000000000","message":"pep8: H306: imports not in alphabetical order (django.core.files.uploadedfile.inmemoryuploadedfile, django.core.exceptions.validationerror)","commit_id":"36aedb89c68efffa76623358d1b45ec565ca39ba"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"85ff3aac148262017fa4d4a3390689540fc3f427","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.assertEqual(form.initial[\u0027kernel\u0027], kernel.id)"},{"line_number":89,"context_line":"        self.assertEqual(form.initial[\u0027ramdisk\u0027], ramdisk.id)"},{"line_number":90,"context_line":"        kernel_choices \u003d [choice[0] for choice in form.fields[\u0027kernel\u0027].choices]"},{"line_number":91,"context_line":"        ramdisk_choices \u003d [choice[0] for choice in form.fields[\u0027ramdisk\u0027].choices]"},{"line_number":92,"context_line":"        self.assertIn(kernel.id, kernel_choices)"},{"line_number":93,"context_line":"        self.assertIn(ramdisk.id, ramdisk_choices)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a3c6f22_1ef0f17c","line":91,"updated":"2026-09-21 01:54:33.000000000","message":"pep8: E501 line too long (82 \u003e 80 characters)","commit_id":"36aedb89c68efffa76623358d1b45ec565ca39ba"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"85ff3aac148262017fa4d4a3390689540fc3f427","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            [[], False, False],"},{"line_number":110,"context_line":"        ]"},{"line_number":111,"context_line":"        form \u003d forms.UpdateImageForm({})"},{"line_number":112,"context_line":"        form.fields[\u0027kernel\u0027].choices \u003d [(\u0027\u0027, \u0027Choose an image\u0027), (\u0027valid\u0027, \u0027valid\u0027)]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        with self.assertRaises(ValidationError):"},{"line_number":115,"context_line":"            form.fields[\u0027kernel\u0027].clean(\u0027not-valid\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9348c2e7_ba711a9e","line":112,"updated":"2026-09-21 01:54:33.000000000","message":"pep8: E501 line too long (85 \u003e 80 characters)","commit_id":"36aedb89c68efffa76623358d1b45ec565ca39ba"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"85ff3aac148262017fa4d4a3390689540fc3f427","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                                \u0027project/images/images/_update.html\u0027)"},{"line_number":433,"context_line":"        self.assertEqual(res.context[\u0027image\u0027].name, image.name)"},{"line_number":434,"context_line":"        self.assertEqual(res.context[\u0027form\u0027].initial[\u0027kernel\u0027], image.kernel_id)"},{"line_number":435,"context_line":"        self.assertEqual(res.context[\u0027form\u0027].initial[\u0027ramdisk\u0027], image.ramdisk_id)"},{"line_number":436,"context_line":"        # Bug 1076216 - is_public checkbox not being set correctly"},{"line_number":437,"context_line":"        self.assertContains(res, \"\u003cinput type\u003d\u0027checkbox\u0027 id\u003d\u0027id_is_public\u0027\""},{"line_number":438,"context_line":"                                 \" name\u003d\u0027is_public\u0027 checked\u003d\u0027checked\u0027\u003e\","}],"source_content_type":"text/x-python","patch_set":3,"id":"a68827f7_ed46d514","line":435,"updated":"2026-09-21 01:54:33.000000000","message":"pep8: E501 line too long (82 \u003e 80 characters)","commit_id":"36aedb89c68efffa76623358d1b45ec565ca39ba"}],"openstack_dashboard/dashboards/project/images/images/views.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1cff0514c78085c4ffe411828c30e44276916da0","unresolved":true,"context_lines":[{"line_number":107,"context_line":"                \u0027name\u0027: getattr(image, \u0027name\u0027, None) or image.id,"},{"line_number":108,"context_line":"                \u0027description\u0027: properties.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":109,"context_line":"                \u0027kernel\u0027: getattr(image, \u0027kernel_id\u0027, \u0027\u0027),"},{"line_number":110,"context_line":"                \u0027ramdisk\u0027: getattr(image, \u0027ramdisk_id\u0027, \u0027\u0027),"},{"line_number":111,"context_line":"                \u0027architecture\u0027: properties.get(\u0027architecture\u0027, \u0027\u0027),"},{"line_number":112,"context_line":"                \u0027min_ram\u0027: getattr(image, \u0027min_ram\u0027, None),"},{"line_number":113,"context_line":"                \u0027min_disk\u0027: getattr(image, \u0027min_disk\u0027, None),"}],"source_content_type":"text/x-python","patch_set":15,"id":"6a4c1e75_e9cb1c51","line":110,"updated":"2026-10-02 00:16:21.000000000","message":"kernel_id and ramdisk_id are in Image._ext_attrs (openstack_dashboard/api/glance.py:57), and property_visible() excludes _attrs | _ext_attrs, so the old properties.get(\u0027kernel_id\u0027, \u0027\u0027) returned \u0027\u0027 unconditionally. Those read-only fields were never populated at all under Glance v2. I\u0027d suggest to say about it in the commit message, since it\u0027s a user-visible fix.","commit_id":"49e10737a4e11800879bc18e4143c641a3fbf63c"},{"author":{"_account_id":32432,"name":"Owen McGonagle","email":"omcgonag@redhat.com","username":"omcgonag"},"change_message_id":"e286aec3a83e01eac16811579c8b6499a08fedc6","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                \u0027name\u0027: getattr(image, \u0027name\u0027, None) or image.id,"},{"line_number":108,"context_line":"                \u0027description\u0027: properties.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":109,"context_line":"                \u0027kernel\u0027: getattr(image, \u0027kernel_id\u0027, \u0027\u0027),"},{"line_number":110,"context_line":"                \u0027ramdisk\u0027: getattr(image, \u0027ramdisk_id\u0027, \u0027\u0027),"},{"line_number":111,"context_line":"                \u0027architecture\u0027: properties.get(\u0027architecture\u0027, \u0027\u0027),"},{"line_number":112,"context_line":"                \u0027min_ram\u0027: getattr(image, \u0027min_ram\u0027, None),"},{"line_number":113,"context_line":"                \u0027min_disk\u0027: getattr(image, \u0027min_disk\u0027, None),"}],"source_content_type":"text/x-python","patch_set":15,"id":"44e538db_acaad0bb","line":110,"in_reply_to":"6a4c1e75_e9cb1c51","updated":"2026-10-05 22:28:11.000000000","message":"Thank you Tatiana for pointing this out. The fix now preserves the current image name/choice even when the filtered AKI/ARI choices do not contain the current IDs. the kernel_id and ramdis_id properties will never return empty values if/when the image is not of AKI/ARI type.","commit_id":"49e10737a4e11800879bc18e4143c641a3fbf63c"}]}
