)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"7a6aa963d4471c9479c91b6019bab9c1dc3116ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"870b99ec_3c408a5b","updated":"2024-01-23 01:34:49.000000000","message":"recheck CI should be back to normal","commit_id":"33dd943e6706f82a5f5e9bcba4984b197c0239c6"}],"ironic/drivers/modules/redfish/firmware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0ae4dcb1995340d5c73922ef3956afd6d2ad71b5","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                       \u0027current_version\u0027: system.bios_version}"},{"line_number":97,"context_line":"            settings.append(bios_fw)"},{"line_number":98,"context_line":"        else:"},{"line_number":99,"context_line":"            LOG.warning(\u0027Could not retrieve BiosVersion in node %(node_uuid)s \u0027"},{"line_number":100,"context_line":"                        \u0027system %(system)s\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":101,"context_line":"                                              \u0027system\u0027: system.identity})"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"36e3af61_3871ed32","line":99,"updated":"2023-12-15 11:12:43.000000000","message":"I\u0027d demote this to debug. This function is called on each cleaning and enrollment, and the lack of versions won\u0027t affect the normal operation of Ironic.","commit_id":"6f4b3b5d6866ad837d253039fd80faa9c997b53c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0ae4dcb1995340d5c73922ef3956afd6d2ad71b5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                          \u0027current_version\u0027: manager.firmware_version}"},{"line_number":111,"context_line":"                settings.append(bmc_fw)"},{"line_number":112,"context_line":"            else:"},{"line_number":113,"context_line":"                LOG.warning(\u0027Could not retrieve FirmwareVersion in node \u0027"},{"line_number":114,"context_line":"                            \u0027%(node_uuid)s manager %(manager)s\u0027,"},{"line_number":115,"context_line":"                            {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":116,"context_line":"                             \u0027manager\u0027: manager.identity})"}],"source_content_type":"text/x-python","patch_set":2,"id":"efcbdb85_eb0b9e97","line":113,"updated":"2023-12-15 11:12:43.000000000","message":"Same","commit_id":"6f4b3b5d6866ad837d253039fd80faa9c997b53c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            return deploy_utils.reboot_to_finish_step(task,"},{"line_number":192,"context_line":"                                                      timeout\u003dwait_interval)"},{"line_number":193,"context_line":"        else:"},{"line_number":194,"context_line":"            return deploy_utils.reboot_to_finish_step(task)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _execute_firmware_update(self, node, update_service, settings):"},{"line_number":197,"context_line":"        \"\"\"Executes the next firmware update to the node"}],"source_content_type":"text/x-python","patch_set":3,"id":"21bb2f09_8a91da2c","line":194,"updated":"2024-01-02 16:36:50.000000000","message":"Why do we do anything if settings is empty? I\u0027d expect it to be an error.","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"6e3db6f3a8d091849fac85b4aa54c79e74103a9a","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            return deploy_utils.reboot_to_finish_step(task,"},{"line_number":192,"context_line":"                                                      timeout\u003dwait_interval)"},{"line_number":193,"context_line":"        else:"},{"line_number":194,"context_line":"            return deploy_utils.reboot_to_finish_step(task)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _execute_firmware_update(self, node, update_service, settings):"},{"line_number":197,"context_line":"        \"\"\"Executes the next firmware update to the node"}],"source_content_type":"text/x-python","patch_set":3,"id":"803ffbc6_6b67568d","line":194,"in_reply_to":"10e0a436_8163a590","updated":"2024-01-16 14:22:21.000000000","message":"It\u0027s already covered in test_empty_settings","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"ac1cd545fa1324eb069e38b0a686ef71d541ff91","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            return deploy_utils.reboot_to_finish_step(task,"},{"line_number":192,"context_line":"                                                      timeout\u003dwait_interval)"},{"line_number":193,"context_line":"        else:"},{"line_number":194,"context_line":"            return deploy_utils.reboot_to_finish_step(task)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _execute_firmware_update(self, node, update_service, settings):"},{"line_number":197,"context_line":"        \"\"\"Executes the next firmware update to the node"}],"source_content_type":"text/x-python","patch_set":3,"id":"10e0a436_8163a590","line":194,"in_reply_to":"21bb2f09_8a91da2c","updated":"2024-01-16 14:00:03.000000000","message":"This is a good question, I think the validation on L172 would take care of it, since the schema requires at least 1 item. Going to add a unit test for it. and we probably don\u0027t need the if / else","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":389,"context_line":"            if sushy_task.messages and not sushy_task.messages[0].message:"},{"line_number":390,"context_line":"                sushy_task.parse_messages()"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"            messages \u003d [m.message for m in sushy_task.messages]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"            task.upgrade_lock()"},{"line_number":395,"context_line":"            if (sushy_task.task_state \u003d\u003d sushy.TASK_STATE_COMPLETED"}],"source_content_type":"text/x-python","patch_set":3,"id":"911bd437_7dc1461f","line":392,"updated":"2024-01-02 16:36:50.000000000","message":"I\u0027m not sure why the check was removed. Anything can be None in redfish, no?","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"6e3db6f3a8d091849fac85b4aa54c79e74103a9a","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            if sushy_task.messages and not sushy_task.messages[0].message:"},{"line_number":390,"context_line":"                sushy_task.parse_messages()"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"            messages \u003d [m.message for m in sushy_task.messages]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"            task.upgrade_lock()"},{"line_number":395,"context_line":"            if (sushy_task.task_state \u003d\u003d sushy.TASK_STATE_COMPLETED"}],"source_content_type":"text/x-python","patch_set":3,"id":"5c0ab5bf_8089131a","line":392,"in_reply_to":"911bd437_7dc1461f","updated":"2024-01-16 14:22:21.000000000","message":"I was testing a few things and forgot to change this back. Done","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        except exception.IronicException as error:"},{"line_number":463,"context_line":"            firmware_utils.cleanup(node)"},{"line_number":464,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":3,"id":"e85d2407_bb66dfb7","line":464,"updated":"2024-01-02 16:36:50.000000000","message":"Has to be just \"raise\", otherwise you\u0027re losing the initial traceback","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        except exception.IronicException as error:"},{"line_number":463,"context_line":"            firmware_utils.cleanup(node)"},{"line_number":464,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba674f9a_b825cee4","line":464,"in_reply_to":"e85d2407_bb66dfb7","updated":"2024-01-16 03:57:03.000000000","message":"Acknowledged","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8d83bc266f15c0c45f1d85a4c061cf597f175375","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if system.bios_version:"},{"line_number":95,"context_line":"            bios_fw \u003d {\u0027component\u0027: \u0027bios\u0027,"},{"line_number":96,"context_line":"                       \u0027current_version\u0027: system.bios_version}"},{"line_number":97,"context_line":"            settings.append(bios_fw)"},{"line_number":98,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"2e2e62ae_a993fc17","line":95,"updated":"2024-01-24 13:36:00.000000000","message":"You have a constant for it now","commit_id":"33dd943e6706f82a5f5e9bcba4984b197c0239c6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8d83bc266f15c0c45f1d85a4c061cf597f175375","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            manager \u003d redfish_utils.get_manager(task.node, system)"},{"line_number":108,"context_line":"            if manager.firmware_version:"},{"line_number":109,"context_line":"                bmc_fw \u003d {\u0027component\u0027: \u0027bmc\u0027,"},{"line_number":110,"context_line":"                          \u0027current_version\u0027: manager.firmware_version}"},{"line_number":111,"context_line":"                settings.append(bmc_fw)"},{"line_number":112,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"b5483a1c_7c6da21f","line":109,"updated":"2024-01-24 13:36:00.000000000","message":"ditto","commit_id":"33dd943e6706f82a5f5e9bcba4984b197c0239c6"}],"ironic/drivers/modules/redfish/firmware_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":77,"context_line":"            \"component\": {"},{"line_number":78,"context_line":"                \"description\": \"name of the firmware component to be updated\","},{"line_number":79,"context_line":"                \"type\": \"string\","},{"line_number":80,"context_line":"                \"enum\": [\"bios\", \"bmc\"]"},{"line_number":81,"context_line":"            },"},{"line_number":82,"context_line":"            \"url\": {"},{"line_number":83,"context_line":"                \"description\": \"URL for firmware file\","}],"source_content_type":"text/x-python","patch_set":3,"id":"899e219c_8f9a2fb0","line":80,"updated":"2024-01-02 16:36:50.000000000","message":"nit: we should put these two as named constants somewhere in a common redfish location","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"fffd3632cb1aadd97f7c23c2faf28c387fc94934","unresolved":true,"context_lines":[{"line_number":77,"context_line":"            \"component\": {"},{"line_number":78,"context_line":"                \"description\": \"name of the firmware component to be updated\","},{"line_number":79,"context_line":"                \"type\": \"string\","},{"line_number":80,"context_line":"                \"enum\": [\"bios\", \"bmc\"]"},{"line_number":81,"context_line":"            },"},{"line_number":82,"context_line":"            \"url\": {"},{"line_number":83,"context_line":"                \"description\": \"URL for firmware file\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ae5d15eb_1d211a7a","line":80,"in_reply_to":"58812895_af6d511c","updated":"2024-01-19 21:18:19.000000000","message":"Once this comment is resolved, I think this patch is OK?","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":true,"context_lines":[{"line_number":77,"context_line":"            \"component\": {"},{"line_number":78,"context_line":"                \"description\": \"name of the firmware component to be updated\","},{"line_number":79,"context_line":"                \"type\": \"string\","},{"line_number":80,"context_line":"                \"enum\": [\"bios\", \"bmc\"]"},{"line_number":81,"context_line":"            },"},{"line_number":82,"context_line":"            \"url\": {"},{"line_number":83,"context_line":"                \"description\": \"URL for firmware file\","}],"source_content_type":"text/x-python","patch_set":3,"id":"58812895_af6d511c","line":80,"in_reply_to":"899e219c_8f9a2fb0","updated":"2024-01-16 03:57:03.000000000","message":"I think it makes sense, I will think a bit where we could put","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f9481906ead06472ff0abe17328cc7b530867f4f","unresolved":true,"context_lines":[{"line_number":77,"context_line":"            \"component\": {"},{"line_number":78,"context_line":"                \"description\": \"name of the firmware component to be updated\","},{"line_number":79,"context_line":"                \"type\": \"string\","},{"line_number":80,"context_line":"                \"enum\": [\"bios\", \"bmc\"]"},{"line_number":81,"context_line":"            },"},{"line_number":82,"context_line":"            \"url\": {"},{"line_number":83,"context_line":"                \"description\": \"URL for firmware file\","}],"source_content_type":"text/x-python","patch_set":3,"id":"b74843c1_5b21963c","line":80,"in_reply_to":"ae5d15eb_1d211a7a","updated":"2024-01-22 10:13:47.000000000","message":"It\u0027s not blocking from my perspective. I think we have something like redfish/common.py","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"60933e383b906fc1c41d2cf77b37c9b5d3dd98fa","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            \"component\": {"},{"line_number":78,"context_line":"                \"description\": \"name of the firmware component to be updated\","},{"line_number":79,"context_line":"                \"type\": \"string\","},{"line_number":80,"context_line":"                \"enum\": [\"bios\", \"bmc\"]"},{"line_number":81,"context_line":"            },"},{"line_number":82,"context_line":"            \"url\": {"},{"line_number":83,"context_line":"                \"description\": \"URL for firmware file\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1d30106b_875835f1","line":80,"in_reply_to":"b74843c1_5b21963c","updated":"2024-01-22 15:08:00.000000000","message":"ok, based on irc is on https://opendev.org/openstack/ironic/src/branch/master/ironic/drivers/modules/redfish/utils.py I will update","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"}],"ironic/drivers/modules/redfish/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0ae4dcb1995340d5c73922ef3956afd6d2ad71b5","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    except sushy.exceptions.MissingAttributeError as e:"},{"line_number":294,"context_line":"        LOG.error(\u0027The Redfish UpdateService was not found for \u0027"},{"line_number":295,"context_line":"                  \u0027node %(node)s. Error %(error)s\u0027,"},{"line_number":296,"context_line":"                  {\u0027node\u0027: node.uuid, \u0027error\u0027: e.message})"},{"line_number":297,"context_line":"        raise exception.RedfishError(error\u003de)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1fc1c3ea_6e0b2e21","line":296,"updated":"2023-12-15 11:12:43.000000000","message":"This is wrong, please revert. str(e) is the canonical way for getting messages.","commit_id":"6f4b3b5d6866ad837d253039fd80faa9c997b53c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":293,"context_line":"    except sushy.exceptions.MissingAttributeError as e:"},{"line_number":294,"context_line":"        LOG.error(\u0027The Redfish UpdateService was not found for \u0027"},{"line_number":295,"context_line":"                  \u0027node %(node)s. Error %(error)s\u0027,"},{"line_number":296,"context_line":"                  {\u0027node\u0027: node.uuid, \u0027error\u0027: str(e)})"},{"line_number":297,"context_line":"        raise exception.RedfishError(error\u003de)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"50f261f6_454fe743","line":296,"updated":"2024-01-02 16:36:50.000000000","message":"str() is redundant (%s applies str() when formatting), please remove","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    except sushy.exceptions.MissingAttributeError as e:"},{"line_number":294,"context_line":"        LOG.error(\u0027The Redfish UpdateService was not found for \u0027"},{"line_number":295,"context_line":"                  \u0027node %(node)s. Error %(error)s\u0027,"},{"line_number":296,"context_line":"                  {\u0027node\u0027: node.uuid, \u0027error\u0027: str(e)})"},{"line_number":297,"context_line":"        raise exception.RedfishError(error\u003de)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"8f42544c_17958bea","line":296,"in_reply_to":"50f261f6_454fe743","updated":"2024-01-16 03:57:03.000000000","message":"Acknowledged","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f9481906ead06472ff0abe17328cc7b530867f4f","unresolved":true,"context_lines":[{"line_number":293,"context_line":"    except sushy.exceptions.MissingAttributeError as e:"},{"line_number":294,"context_line":"        LOG.error(\u0027The Redfish UpdateService was not found for \u0027"},{"line_number":295,"context_line":"                  \u0027node %(node)s. Error %(error)s\u0027,"},{"line_number":296,"context_line":"                  {\u0027node\u0027: node.uuid, \u0027error\u0027: e.message})"},{"line_number":297,"context_line":"        raise exception.RedfishError(error\u003de)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"48d1db25_dffb677e","line":296,"updated":"2024-01-22 10:13:47.000000000","message":"nit: this change is not correct: e is preferred to e.message","commit_id":"2578af8bb6fcb77154bdd4adc60e6882e775355c"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"60933e383b906fc1c41d2cf77b37c9b5d3dd98fa","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    except sushy.exceptions.MissingAttributeError as e:"},{"line_number":294,"context_line":"        LOG.error(\u0027The Redfish UpdateService was not found for \u0027"},{"line_number":295,"context_line":"                  \u0027node %(node)s. Error %(error)s\u0027,"},{"line_number":296,"context_line":"                  {\u0027node\u0027: node.uuid, \u0027error\u0027: e.message})"},{"line_number":297,"context_line":"        raise exception.RedfishError(error\u003de)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"07af0026_b0c4d085","line":296,"in_reply_to":"48d1db25_dffb677e","updated":"2024-01-22 15:08:00.000000000","message":"Done","commit_id":"2578af8bb6fcb77154bdd4adc60e6882e775355c"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"cfec976c91fcaff73288419c441c70352e1edb08","unresolved":true,"context_lines":[{"line_number":88,"context_line":"\"BMC Firmware Component\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"FIRMWARE_COMPONENTS \u003d [BIOS, BMC]"},{"line_number":91,"context_line":"\"\"\"Devices that make sense for virtual media attachment.\"\"\""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def parse_driver_info(node):"}],"source_content_type":"text/x-python","patch_set":7,"id":"18e06d89_a4ccb7e7","line":91,"updated":"2024-01-24 21:05:30.000000000","message":"This comment doesn\u0027t seem correct?","commit_id":"bb9cb29af44804b7562f55931d79e016b7468a68"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"c88b4678f6ee8bfb8bef9eaefb382e7eed2b7c21","unresolved":false,"context_lines":[{"line_number":88,"context_line":"\"BMC Firmware Component\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"FIRMWARE_COMPONENTS \u003d [BIOS, BMC]"},{"line_number":91,"context_line":"\"\"\"Devices that make sense for virtual media attachment.\"\"\""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def parse_driver_info(node):"}],"source_content_type":"text/x-python","patch_set":7,"id":"515bda5b_4c3d39a3","line":91,"in_reply_to":"18e06d89_a4ccb7e7","updated":"2024-01-24 21:51:07.000000000","message":"Done","commit_id":"bb9cb29af44804b7562f55931d79e016b7468a68"}],"ironic/tests/unit/drivers/modules/redfish/test_firmware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":64,"context_line":"            mock_parse_driver_info.assert_called_once_with(task.node)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @mock.patch.object(redfish_fw, \u0027sushy\u0027, None)"},{"line_number":67,"context_line":"    def test_loading_error(self):"},{"line_number":68,"context_line":"        self.assertRaisesRegex("},{"line_number":69,"context_line":"            exception.DriverLoadError,"},{"line_number":70,"context_line":"            \u0027Unable to import the sushy library\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f93233ea_6d489b23","line":67,"updated":"2024-01-02 16:36:50.000000000","message":"Side note: we should get rid of this logic, sushy is a hard requirement nowadays.","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            mock_parse_driver_info.assert_called_once_with(task.node)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @mock.patch.object(redfish_fw, \u0027sushy\u0027, None)"},{"line_number":67,"context_line":"    def test_loading_error(self):"},{"line_number":68,"context_line":"        self.assertRaisesRegex("},{"line_number":69,"context_line":"            exception.DriverLoadError,"},{"line_number":70,"context_line":"            \u0027Unable to import the sushy library\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"e0cf29fd_68c89bc1","line":67,"in_reply_to":"f93233ea_6d489b23","updated":"2024-01-16 03:57:03.000000000","message":"I\u0027ve removed the test","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":84,"context_line":"            manager_mock.return_value.firmware_version \u003d None"},{"line_number":85,"context_line":"            try:"},{"line_number":86,"context_line":"                task.driver.firmware.cache_firmware_components(task)"},{"line_number":87,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":88,"context_line":"                system_mock.assert_called_once_with(task.node)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"                error_msg \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"6b045dc1_a42ee193","line":87,"updated":"2024-01-02 16:36:50.000000000","message":"I\u0027d prefer you use assertRaises, otherwise the test will pass if there is no expection (I think you can make it return the actual exception for further checks).","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            manager_mock.return_value.firmware_version \u003d None"},{"line_number":85,"context_line":"            try:"},{"line_number":86,"context_line":"                task.driver.firmware.cache_firmware_components(task)"},{"line_number":87,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":88,"context_line":"                system_mock.assert_called_once_with(task.node)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"                error_msg \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"79770842_64241d03","line":87,"in_reply_to":"6b045dc1_a42ee193","updated":"2024-01-16 03:57:03.000000000","message":"Done","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":86,"context_line":"                task.driver.firmware.cache_firmware_components(task)"},{"line_number":87,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":88,"context_line":"                system_mock.assert_called_once_with(task.node)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"                error_msg \u003d ("},{"line_number":91,"context_line":"                    \u0027Cannot retrieve firmware for node %s: \u0027"},{"line_number":92,"context_line":"                    \u0027no supported components\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"f2459d76_c45947f8","line":89,"updated":"2024-01-02 16:36:50.000000000","message":"Please test that sync_firmware_components is not called","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                task.driver.firmware.cache_firmware_components(task)"},{"line_number":87,"context_line":"            except exception.UnsupportedDriverExtension:"},{"line_number":88,"context_line":"                system_mock.assert_called_once_with(task.node)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"                error_msg \u003d ("},{"line_number":91,"context_line":"                    \u0027Cannot retrieve firmware for node %s: \u0027"},{"line_number":92,"context_line":"                    \u0027no supported components\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a046a06_3e4842eb","line":89,"in_reply_to":"f2459d76_c45947f8","updated":"2024-01-16 03:57:03.000000000","message":"Done","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    @mock.patch.object(redfish_fw, \u0027LOG\u0027, autospec\u003dTrue)"},{"line_number":108,"context_line":"    @mock.patch.object(redfish_utils, \u0027get_system\u0027, autospec\u003dTrue)"},{"line_number":109,"context_line":"    @mock.patch.object(redfish_utils, \u0027get_manager\u0027, autospec\u003dTrue)"},{"line_number":110,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponentList\u0027, autospec\u003dTrue)"},{"line_number":111,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponent\u0027, spec_set\u003dTrue,"},{"line_number":112,"context_line":"                       autospec\u003dTrue)"},{"line_number":113,"context_line":"    def test_missing_bios_component(self, fw_cmp_mock, fw_cmp_list_mock,"}],"source_content_type":"text/x-python","patch_set":3,"id":"b58bc447_fa6d3a89","line":110,"updated":"2024-01-02 16:36:50.000000000","message":"nit: mock the methods you want to mock, not complete objects (will make the code a bit less bulky)","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    @mock.patch.object(redfish_fw, \u0027LOG\u0027, autospec\u003dTrue)"},{"line_number":108,"context_line":"    @mock.patch.object(redfish_utils, \u0027get_system\u0027, autospec\u003dTrue)"},{"line_number":109,"context_line":"    @mock.patch.object(redfish_utils, \u0027get_manager\u0027, autospec\u003dTrue)"},{"line_number":110,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponentList\u0027, autospec\u003dTrue)"},{"line_number":111,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponent\u0027, spec_set\u003dTrue,"},{"line_number":112,"context_line":"                       autospec\u003dTrue)"},{"line_number":113,"context_line":"    def test_missing_bios_component(self, fw_cmp_mock, fw_cmp_list_mock,"}],"source_content_type":"text/x-python","patch_set":3,"id":"32538f68_5bdc8c23","line":110,"in_reply_to":"b58bc447_fa6d3a89","updated":"2024-01-16 03:57:03.000000000","message":"Acknowledged","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":120,"context_line":"        bmc_component \u003d {\u0027component\u0027: \u0027bmc\u0027, \u0027current_version\u0027: \u0027v1.0.0\u0027,"},{"line_number":121,"context_line":"                         \u0027node_id\u0027: self.node.id}"},{"line_number":122,"context_line":"        bmc_obj \u003d mock.MagicMock()"},{"line_number":123,"context_line":"        fw_cmp_mock.side_effect \u003d [bmc_obj]"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"},{"line_number":126,"context_line":"                                  shared\u003dTrue) as task:"}],"source_content_type":"text/x-python","patch_set":3,"id":"336c87f1_a15f12b8","line":123,"updated":"2024-01-02 16:36:50.000000000","message":"nit: it feels weird to mock the constructor of an Object, you\u0027ll get the same effect if you don\u0027t mock it","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        bmc_component \u003d {\u0027component\u0027: \u0027bmc\u0027, \u0027current_version\u0027: \u0027v1.0.0\u0027,"},{"line_number":121,"context_line":"                         \u0027node_id\u0027: self.node.id}"},{"line_number":122,"context_line":"        bmc_obj \u003d mock.MagicMock()"},{"line_number":123,"context_line":"        fw_cmp_mock.side_effect \u003d [bmc_obj]"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"},{"line_number":126,"context_line":"                                  shared\u003dTrue) as task:"}],"source_content_type":"text/x-python","patch_set":3,"id":"997c8dbf_094bc0ce","line":123,"in_reply_to":"336c87f1_a15f12b8","updated":"2024-01-16 03:57:03.000000000","message":"right, I don\u0027t need to handle the objects here","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":136,"context_line":"                          \u0027%(node_uuid)s system %(system)s\u0027,"},{"line_number":137,"context_line":"                          {\u0027node_uuid\u0027: self.node.uuid, \u0027system\u0027: \"System1\"})"},{"line_number":138,"context_line":"            ]"},{"line_number":139,"context_line":"            log_mock.debug.assert_has_calls(debug_system)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            fw_cmp_list_mock.sync_firmware_components.assert_called_once_with("},{"line_number":142,"context_line":"                task.context, task.node.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"4eb44c7c_941f8295","line":139,"updated":"2024-01-02 16:36:50.000000000","message":"nit: assert_called_once_with","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                          \u0027%(node_uuid)s system %(system)s\u0027,"},{"line_number":137,"context_line":"                          {\u0027node_uuid\u0027: self.node.uuid, \u0027system\u0027: \"System1\"})"},{"line_number":138,"context_line":"            ]"},{"line_number":139,"context_line":"            log_mock.debug.assert_has_calls(debug_system)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            fw_cmp_list_mock.sync_firmware_components.assert_called_once_with("},{"line_number":142,"context_line":"                task.context, task.node.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c0c6e50f_c4cb584b","line":139,"in_reply_to":"4eb44c7c_941f8295","updated":"2024-01-16 03:57:03.000000000","message":"Done","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":151,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponentList\u0027, autospec\u003dTrue)"},{"line_number":152,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponent\u0027, spec_set\u003dTrue,"},{"line_number":153,"context_line":"                       autospec\u003dTrue)"},{"line_number":154,"context_line":"    def test_missing_bmc_component(self, fw_cmp_mock, fw_cmp_list_mock,"},{"line_number":155,"context_line":"                                   manager_mock, system_mock, log_mock):"},{"line_number":156,"context_line":"        create_list \u003d [{\u0027component\u0027: \u0027bios\u0027, \u0027current_version\u0027: \u0027v1.0.0\u0027}]"},{"line_number":157,"context_line":"        fw_cmp_list_mock.sync_firmware_components.return_value \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"88c6b698_b94b7b7e","line":154,"updated":"2024-01-02 16:36:50.000000000","message":"same comments here","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponentList\u0027, autospec\u003dTrue)"},{"line_number":152,"context_line":"    @mock.patch.object(objects, \u0027FirmwareComponent\u0027, spec_set\u003dTrue,"},{"line_number":153,"context_line":"                       autospec\u003dTrue)"},{"line_number":154,"context_line":"    def test_missing_bmc_component(self, fw_cmp_mock, fw_cmp_list_mock,"},{"line_number":155,"context_line":"                                   manager_mock, system_mock, log_mock):"},{"line_number":156,"context_line":"        create_list \u003d [{\u0027component\u0027: \u0027bios\u0027, \u0027current_version\u0027: \u0027v1.0.0\u0027}]"},{"line_number":157,"context_line":"        fw_cmp_list_mock.sync_firmware_components.return_value \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"3b0a2e39_813bcd20","line":154,"in_reply_to":"88c6b698_b94b7b7e","updated":"2024-01-16 03:57:03.000000000","message":"Done","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        bmc_component \u003d {\u0027component\u0027: \u0027bmc\u0027, \u0027current_version\u0027: \u0027v1.0.0\u0027,"},{"line_number":206,"context_line":"                         \u0027node_id\u0027: self.node.id}"},{"line_number":207,"context_line":"        bmc_obj \u003d mock.MagicMock()"},{"line_number":208,"context_line":"        fw_cmp_mock.side_effect \u003d [bios_obj, bmc_obj]"},{"line_number":209,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"},{"line_number":210,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":211,"context_line":"            manager_mock.return_value.firmware_version \u003d \"v1.0.0\""}],"source_content_type":"text/x-python","patch_set":3,"id":"dde45ead_ac92624a","line":208,"updated":"2024-01-02 16:36:50.000000000","message":"Same re mocking constructor","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        bmc_component \u003d {\u0027component\u0027: \u0027bmc\u0027, \u0027current_version\u0027: \u0027v1.0.0\u0027,"},{"line_number":206,"context_line":"                         \u0027node_id\u0027: self.node.id}"},{"line_number":207,"context_line":"        bmc_obj \u003d mock.MagicMock()"},{"line_number":208,"context_line":"        fw_cmp_mock.side_effect \u003d [bios_obj, bmc_obj]"},{"line_number":209,"context_line":"        with task_manager.acquire(self.context, self.node.uuid,"},{"line_number":210,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":211,"context_line":"            manager_mock.return_value.firmware_version \u003d \"v1.0.0\""}],"source_content_type":"text/x-python","patch_set":3,"id":"4298b25c_c0382a0b","line":208,"in_reply_to":"dde45ead_ac92624a","updated":"2024-01-16 03:57:03.000000000","message":"Acknowledged","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":223,"context_line":"                mock.call(task.context, **bios_component),"},{"line_number":224,"context_line":"                mock.call(task.context, **bmc_component)"},{"line_number":225,"context_line":"            ]"},{"line_number":226,"context_line":"            self.assertTrue(fw_cmp_mock.called)"},{"line_number":227,"context_line":"            fw_cmp_mock.assert_has_calls(fw_cmp_calls)"},{"line_number":228,"context_line":"            bios_obj.create.assert_called_once_with()"},{"line_number":229,"context_line":"            bmc_obj.create.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":3,"id":"c8f68cfc_86a8ca1c","line":226,"updated":"2024-01-02 16:36:50.000000000","message":"nit: redundant with the second assertion","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                mock.call(task.context, **bios_component),"},{"line_number":224,"context_line":"                mock.call(task.context, **bmc_component)"},{"line_number":225,"context_line":"            ]"},{"line_number":226,"context_line":"            self.assertTrue(fw_cmp_mock.called)"},{"line_number":227,"context_line":"            fw_cmp_mock.assert_has_calls(fw_cmp_calls)"},{"line_number":228,"context_line":"            bios_obj.create.assert_called_once_with()"},{"line_number":229,"context_line":"            bmc_obj.create.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":3,"id":"6b4ef7fc_b490fbf2","line":226,"in_reply_to":"c8f68cfc_86a8ca1c","updated":"2024-01-16 03:57:03.000000000","message":"Acknowledged","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"            try:"},{"line_number":241,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":242,"context_line":"            except exception.RedfishError as e:"},{"line_number":243,"context_line":"                exception_error \u003d e.kwargs.get(\u0027error\u0027)"},{"line_number":244,"context_line":"                expected_error_msg \u003d (\u0027The attribute UpdateService is \u0027"},{"line_number":245,"context_line":"                                      \u0027missing from the resource redfish/v1\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b86f0302_d5283cdd","line":242,"updated":"2024-01-02 16:36:50.000000000","message":"Same re assertRaises","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"            try:"},{"line_number":241,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":242,"context_line":"            except exception.RedfishError as e:"},{"line_number":243,"context_line":"                exception_error \u003d e.kwargs.get(\u0027error\u0027)"},{"line_number":244,"context_line":"                expected_error_msg \u003d (\u0027The attribute UpdateService is \u0027"},{"line_number":245,"context_line":"                                      \u0027missing from the resource redfish/v1\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c73d5bb4_d868fa17","line":242,"in_reply_to":"b86f0302_d5283cdd","updated":"2024-01-16 03:57:03.000000000","message":"Done","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            try:"},{"line_number":268,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":269,"context_line":"            except sushy.exceptions.MissingAttributeError as e:"},{"line_number":270,"context_line":"                exception_error \u003d e.message"},{"line_number":271,"context_line":"                expected_err_msg \u003d ("},{"line_number":272,"context_line":"                    \u0027The attribute #UpdateService.SimpleUpdate is missing \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1392a85d_1a91adde","line":269,"updated":"2024-01-02 16:36:50.000000000","message":"Seeing this makes me pause. Shouldn\u0027t we capture RedfishErrors and provide some higher-level context? Your examples are pretty straightforward, but there can be something more cryptic (imagine some sort of an access denied error).","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":true,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            try:"},{"line_number":268,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":269,"context_line":"            except sushy.exceptions.MissingAttributeError as e:"},{"line_number":270,"context_line":"                exception_error \u003d e.message"},{"line_number":271,"context_line":"                expected_err_msg \u003d ("},{"line_number":272,"context_line":"                    \u0027The attribute #UpdateService.SimpleUpdate is missing \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"d1001775_afe5c7cb","line":269,"in_reply_to":"1392a85d_1a91adde","updated":"2024-01-16 03:57:03.000000000","message":"Don\u0027t we cover higher-level context in firmware.py? If the update failed we provide the info we had when the problem occurred, we even have connection error if we couldn\u0027t talk to update service for example","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"1c5b4a9bb6e0b44b72fda63867ba8ba0cf2f21c8","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            try:"},{"line_number":268,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":269,"context_line":"            except sushy.exceptions.MissingAttributeError as e:"},{"line_number":270,"context_line":"                exception_error \u003d e.message"},{"line_number":271,"context_line":"                expected_err_msg \u003d ("},{"line_number":272,"context_line":"                    \u0027The attribute #UpdateService.SimpleUpdate is missing \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca65a541_5153ae74","line":269,"in_reply_to":"add39a7e_ab1f383b","updated":"2024-01-17 02:09:56.000000000","message":"Ok, after talking with Julia on irc I was able to understand the idea.\nI\u0027ve update to raise RedfishError in this case \u003d)","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b1b52d63e3371e181c84ed66252f52dd07eccd6f","unresolved":true,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            try:"},{"line_number":268,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":269,"context_line":"            except sushy.exceptions.MissingAttributeError as e:"},{"line_number":270,"context_line":"                exception_error \u003d e.message"},{"line_number":271,"context_line":"                expected_err_msg \u003d ("},{"line_number":272,"context_line":"                    \u0027The attribute #UpdateService.SimpleUpdate is missing \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"add39a7e_ab1f383b","line":269,"in_reply_to":"d1001775_afe5c7cb","updated":"2024-01-16 17:52:36.000000000","message":"If we were capturing this in higher level context, we wouldn\u0027t see sushy exceptions in the tests as results, only input.\n\nMaybe there is room for improvement?","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96d41132dfd84c454d0aa64c71f3e008254cd756","unresolved":true,"context_lines":[{"line_number":531,"context_line":"        messages \u003d mock.PropertyMock(side_effect\u003d[[mock_message_unparsed],"},{"line_number":532,"context_line":"                                                  [message_mock],"},{"line_number":533,"context_line":"                                                  [message_mock]])"},{"line_number":534,"context_line":"        type(mock_sushy_task).messages \u003d messages"},{"line_number":535,"context_line":"        mock_task_monitor \u003d mock.Mock()"},{"line_number":536,"context_line":"        mock_task_monitor.is_processing \u003d False"},{"line_number":537,"context_line":"        mock_task_monitor.get_task.return_value \u003d mock_sushy_task"}],"source_content_type":"text/x-python","patch_set":3,"id":"b01b82da_2be70e98","line":534,"updated":"2024-01-02 16:36:50.000000000","message":"type(mock_sushy_task) is mock.Mock, I\u0027m not sure you want to do this.. I guess your intention was to add the properties to some actual class.","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"67a10833ff370ac71fc4886a338a67be742efe76","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        messages \u003d mock.PropertyMock(side_effect\u003d[[mock_message_unparsed],"},{"line_number":532,"context_line":"                                                  [message_mock],"},{"line_number":533,"context_line":"                                                  [message_mock]])"},{"line_number":534,"context_line":"        type(mock_sushy_task).messages \u003d messages"},{"line_number":535,"context_line":"        mock_task_monitor \u003d mock.Mock()"},{"line_number":536,"context_line":"        mock_task_monitor.is_processing \u003d False"},{"line_number":537,"context_line":"        mock_task_monitor.get_task.return_value \u003d mock_sushy_task"}],"source_content_type":"text/x-python","patch_set":3,"id":"087f2073_8d0c9bfd","line":534,"in_reply_to":"b01b82da_2be70e98","updated":"2024-01-16 03:57:03.000000000","message":"Acknowledged","commit_id":"35d24077175f58899faa81d1c34b83b61e7841d5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f9481906ead06472ff0abe17328cc7b530867f4f","unresolved":true,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":249,"context_line":"            except exception.RedfishError as e:"},{"line_number":250,"context_line":"                print(dir(e))"},{"line_number":251,"context_line":"                print(e.kwargs)"},{"line_number":252,"context_line":"                exception_error \u003d e.kwargs.get(\u0027error\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"cb4c2b80_4231088f","line":249,"updated":"2024-01-22 10:13:47.000000000","message":"Please replace with assertRaises","commit_id":"2578af8bb6fcb77154bdd4adc60e6882e775355c"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"60933e383b906fc1c41d2cf77b37c9b5d3dd98fa","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":249,"context_line":"            except exception.RedfishError as e:"},{"line_number":250,"context_line":"                print(dir(e))"},{"line_number":251,"context_line":"                print(e.kwargs)"},{"line_number":252,"context_line":"                exception_error \u003d e.kwargs.get(\u0027error\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"37e3bc01_8ed1a83d","line":249,"in_reply_to":"cb4c2b80_4231088f","updated":"2024-01-22 15:08:00.000000000","message":"Done","commit_id":"2578af8bb6fcb77154bdd4adc60e6882e775355c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f9481906ead06472ff0abe17328cc7b530867f4f","unresolved":true,"context_lines":[{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":249,"context_line":"            except exception.RedfishError as e:"},{"line_number":250,"context_line":"                print(dir(e))"},{"line_number":251,"context_line":"                print(e.kwargs)"},{"line_number":252,"context_line":"                exception_error \u003d e.kwargs.get(\u0027error\u0027)"},{"line_number":253,"context_line":"                expected_err_msg \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"5bdbb382_ee061f6f","line":250,"updated":"2024-01-22 10:13:47.000000000","message":"Prints should be removed","commit_id":"2578af8bb6fcb77154bdd4adc60e6882e775355c"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"60933e383b906fc1c41d2cf77b37c9b5d3dd98fa","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                task.driver.firmware.update(task, settings)"},{"line_number":249,"context_line":"            except exception.RedfishError as e:"},{"line_number":250,"context_line":"                print(dir(e))"},{"line_number":251,"context_line":"                print(e.kwargs)"},{"line_number":252,"context_line":"                exception_error \u003d e.kwargs.get(\u0027error\u0027)"},{"line_number":253,"context_line":"                expected_err_msg \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"f313d72d_a8a23897","line":250,"in_reply_to":"5bdbb382_ee061f6f","updated":"2024-01-22 15:08:00.000000000","message":"Done","commit_id":"2578af8bb6fcb77154bdd4adc60e6882e775355c"}]}
