)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cadafddaed439efb98a647fca298986164c0a85a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5bf6cc3c_84bd6ecf","updated":"2025-09-15 13:11:23.000000000","message":"LGTM, but I\u0027d appreciate a follow-up","commit_id":"0865ce5572818f434af2df14647892651184ef47"}],"sushy/resources/system/system.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d23e7f3de8ccdad91d9dfbb0c307e8af34dd11af","unresolved":true,"context_lines":[{"line_number":78,"context_line":"        # Check if we have Settings available and any values might be missing"},{"line_number":79,"context_line":"        if (hasattr(resource, \u0027_settings\u0027)"},{"line_number":80,"context_line":"                and resource._settings"},{"line_number":81,"context_line":"                and resource._settings.resource_uri):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            try:"},{"line_number":84,"context_line":"                settings_resp \u003d resource._conn.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"0afd9893_99f5f138","line":81,"range":{"start_line":81,"start_character":13,"end_line":81,"end_character":53},"updated":"2025-09-02 19:14:50.000000000","message":"we should double check this and that it exists. I mean, maybe its relatively safe but better more safe than sorry. I\u0027d hasattr OR just try to catch an AttributeError","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"48d92da4bd0584df495b8bf48a74f7a4663188cc","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # Check if we have Settings available and any values might be missing"},{"line_number":79,"context_line":"        if (hasattr(resource, \u0027_settings\u0027)"},{"line_number":80,"context_line":"                and resource._settings"},{"line_number":81,"context_line":"                and resource._settings.resource_uri):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            try:"},{"line_number":84,"context_line":"                settings_resp \u003d resource._conn.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"c194bd72_9f17144c","line":81,"range":{"start_line":81,"start_character":13,"end_line":81,"end_character":53},"in_reply_to":"0afd9893_99f5f138","updated":"2025-09-02 20:08:46.000000000","message":"Actually, we don\u0027t!\n\nThis is the actual pattern to leverage because it is a SettingsField object.","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d23e7f3de8ccdad91d9dfbb0c307e8af34dd11af","unresolved":true,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"                # Check and populate enabled if missing/None"},{"line_number":102,"context_line":"                if (instance.enabled is None"},{"line_number":103,"context_line":"                        and \u0027BootSourceOverrideEnabled\u0027 in settings_boot):"},{"line_number":104,"context_line":"                    enabled_value \u003d settings_boot[\u0027BootSourceOverrideEnabled\u0027]"},{"line_number":105,"context_line":"                    if enabled_value:"},{"line_number":106,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"55b309a6_58b79939","line":103,"updated":"2025-09-02 19:14:50.000000000","message":"TODO: double check key name","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"48d92da4bd0584df495b8bf48a74f7a4663188cc","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"                # Check and populate enabled if missing/None"},{"line_number":102,"context_line":"                if (instance.enabled is None"},{"line_number":103,"context_line":"                        and \u0027BootSourceOverrideEnabled\u0027 in settings_boot):"},{"line_number":104,"context_line":"                    enabled_value \u003d settings_boot[\u0027BootSourceOverrideEnabled\u0027]"},{"line_number":105,"context_line":"                    if enabled_value:"},{"line_number":106,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"34c7d280_c9ef1bf8","line":103,"in_reply_to":"55b309a6_58b79939","updated":"2025-09-02 20:08:46.000000000","message":"Checks out.","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d23e7f3de8ccdad91d9dfbb0c307e8af34dd11af","unresolved":true,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"                # Check and populate mode if missing/None"},{"line_number":114,"context_line":"                if (instance.mode is None"},{"line_number":115,"context_line":"                        and \u0027BootSourceOverrideMode\u0027 in settings_boot):"},{"line_number":116,"context_line":"                    mode_value \u003d settings_boot[\u0027BootSourceOverrideMode\u0027]"},{"line_number":117,"context_line":"                    if mode_value:"},{"line_number":118,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"24319a69_e7bd69ff","line":115,"range":{"start_line":115,"start_character":29,"end_line":115,"end_character":51},"updated":"2025-09-02 19:14:50.000000000","message":"ditto, double check key name","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"48d92da4bd0584df495b8bf48a74f7a4663188cc","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"                # Check and populate mode if missing/None"},{"line_number":114,"context_line":"                if (instance.mode is None"},{"line_number":115,"context_line":"                        and \u0027BootSourceOverrideMode\u0027 in settings_boot):"},{"line_number":116,"context_line":"                    mode_value \u003d settings_boot[\u0027BootSourceOverrideMode\u0027]"},{"line_number":117,"context_line":"                    if mode_value:"},{"line_number":118,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"99422fd7_a8559a37","line":115,"range":{"start_line":115,"start_character":29,"end_line":115,"end_character":51},"in_reply_to":"24319a69_e7bd69ff","updated":"2025-09-02 20:08:46.000000000","message":"Checks out.","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d23e7f3de8ccdad91d9dfbb0c307e8af34dd11af","unresolved":true,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"                # Check and populate target if missing/None"},{"line_number":125,"context_line":"                if (instance.target is None"},{"line_number":126,"context_line":"                        and \u0027BootSourceOverrideTarget\u0027 in settings_boot):"},{"line_number":127,"context_line":"                    target_value \u003d settings_boot[\u0027BootSourceOverrideTarget\u0027]"},{"line_number":128,"context_line":"                    if target_value:"},{"line_number":129,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"014bff06_176da03c","line":126,"updated":"2025-09-02 19:14:50.000000000","message":"double check key names","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"48d92da4bd0584df495b8bf48a74f7a4663188cc","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"                # Check and populate target if missing/None"},{"line_number":125,"context_line":"                if (instance.target is None"},{"line_number":126,"context_line":"                        and \u0027BootSourceOverrideTarget\u0027 in settings_boot):"},{"line_number":127,"context_line":"                    target_value \u003d settings_boot[\u0027BootSourceOverrideTarget\u0027]"},{"line_number":128,"context_line":"                    if target_value:"},{"line_number":129,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"cfcecad4_fe1d65c1","line":126,"in_reply_to":"014bff06_176da03c","updated":"2025-09-02 20:08:46.000000000","message":"Checks out.","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d23e7f3de8ccdad91d9dfbb0c307e8af34dd11af","unresolved":true,"context_lines":[{"line_number":143,"context_line":"                              \u0027resource for System %s\u0027,"},{"line_number":144,"context_line":"                              getattr(resource, \u0027identity\u0027, \u0027unknown\u0027))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            except Exception as exc:"},{"line_number":147,"context_line":"                LOG.warning(\u0027Failed to retrieve boot field values from \u0027"},{"line_number":148,"context_line":"                            \u0027Settings resource for System %s: %s\u0027,"},{"line_number":149,"context_line":"                            getattr(resource, \u0027identity\u0027, \u0027unknown\u0027), exc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a2fa82f6_59671ef4","line":146,"updated":"2025-09-02 19:14:50.000000000","message":"I feel like this makes sense to move indentation over slightly, and enable a catch of AttributeError to keep the base flow the same.","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"48d92da4bd0584df495b8bf48a74f7a4663188cc","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                              \u0027resource for System %s\u0027,"},{"line_number":144,"context_line":"                              getattr(resource, \u0027identity\u0027, \u0027unknown\u0027))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            except Exception as exc:"},{"line_number":147,"context_line":"                LOG.warning(\u0027Failed to retrieve boot field values from \u0027"},{"line_number":148,"context_line":"                            \u0027Settings resource for System %s: %s\u0027,"},{"line_number":149,"context_line":"                            getattr(resource, \u0027identity\u0027, \u0027unknown\u0027), exc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"29754aeb_e7c83afd","line":146,"in_reply_to":"a2fa82f6_59671ef4","updated":"2025-09-02 20:08:46.000000000","message":"It won\u0027t raise it. Its a distinct object, so... this is actually right.","commit_id":"8a0d42351da6d95a01bb1f116c69580898707bd9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cadafddaed439efb98a647fca298986164c0a85a","unresolved":true,"context_lines":[{"line_number":76,"context_line":"            return None"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # Check if we have Settings available and any values might be missing"},{"line_number":79,"context_line":"        if (hasattr(resource, \u0027_settings\u0027)"},{"line_number":80,"context_line":"                and resource._settings"},{"line_number":81,"context_line":"                and resource._settings.resource_uri):"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3df770d5_47542be6","line":79,"updated":"2025-09-15 13:11:23.000000000","message":"nit: hasattr is always True","commit_id":"0865ce5572818f434af2df14647892651184ef47"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cadafddaed439efb98a647fca298986164c0a85a","unresolved":true,"context_lines":[{"line_number":81,"context_line":"                and resource._settings.resource_uri):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            try:"},{"line_number":84,"context_line":"                settings_resp \u003d resource._conn.get("},{"line_number":85,"context_line":"                    resource._settings.resource_uri)"},{"line_number":86,"context_line":"                settings_data \u003d settings_resp.json()"},{"line_number":87,"context_line":"                settings_boot \u003d settings_data.get(\u0027Boot\u0027, {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"d4be9642_d59b86be","line":84,"updated":"2025-09-15 13:11:23.000000000","message":"I hope this never just fails 😄","commit_id":"0865ce5572818f434af2df14647892651184ef47"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cadafddaed439efb98a647fca298986164c0a85a","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                settings_resp \u003d resource._conn.get("},{"line_number":85,"context_line":"                    resource._settings.resource_uri)"},{"line_number":86,"context_line":"                settings_data \u003d settings_resp.json()"},{"line_number":87,"context_line":"                settings_boot \u003d settings_data.get(\u0027Boot\u0027, {})"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                if not settings_boot:"},{"line_number":90,"context_line":"                    return instance"}],"source_content_type":"text/x-python","patch_set":2,"id":"3d9cc5c9_fdb01923","line":87,"updated":"2025-09-15 13:11:23.000000000","message":"nit: this is fine as an urgent fix, but ideally we should make all this logic declarative or at least turn this settings_boot into a proper typed object.","commit_id":"0865ce5572818f434af2df14647892651184ef47"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f3545d5d4040cf4f01c534324c8445b2a138361e","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                settings_resp \u003d resource._conn.get("},{"line_number":85,"context_line":"                    resource._settings.resource_uri)"},{"line_number":86,"context_line":"                settings_data \u003d settings_resp.json()"},{"line_number":87,"context_line":"                settings_boot \u003d settings_data.get(\u0027Boot\u0027, {})"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                if not settings_boot:"},{"line_number":90,"context_line":"                    return instance"}],"source_content_type":"text/x-python","patch_set":2,"id":"ea753910_97cb3974","line":87,"in_reply_to":"3d9cc5c9_fdb01923","updated":"2025-09-24 20:04:16.000000000","message":"So, its not a proper object to begin with in the API, its an opportunistic \"you can get stuff here related to the current object. We *might* want to formalize an approach to backfill it, but yeah. :\\","commit_id":"0865ce5572818f434af2df14647892651184ef47"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cadafddaed439efb98a647fca298986164c0a85a","unresolved":true,"context_lines":[{"line_number":141,"context_line":"                        instance.http_boot_uri]):"},{"line_number":142,"context_line":"                    LOG.debug(\u0027Retrieved boot field values from Settings \u0027"},{"line_number":143,"context_line":"                              \u0027resource for System %s\u0027,"},{"line_number":144,"context_line":"                              getattr(resource, \u0027identity\u0027, \u0027unknown\u0027))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            except Exception as exc:"},{"line_number":147,"context_line":"                LOG.warning(\u0027Failed to retrieve boot field values from \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5356457f_470d1d6b","line":144,"updated":"2025-09-15 13:11:23.000000000","message":"nit: unnecessary getattr (field always present, even if None)","commit_id":"0865ce5572818f434af2df14647892651184ef47"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cadafddaed439efb98a647fca298986164c0a85a","unresolved":true,"context_lines":[{"line_number":146,"context_line":"            except Exception as exc:"},{"line_number":147,"context_line":"                LOG.warning(\u0027Failed to retrieve boot field values from \u0027"},{"line_number":148,"context_line":"                            \u0027Settings resource for System %s: %s\u0027,"},{"line_number":149,"context_line":"                            getattr(resource, \u0027identity\u0027, \u0027unknown\u0027), exc)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        return instance"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"0516ff49_c2c6c409","line":149,"updated":"2025-09-15 13:11:23.000000000","message":"same re identity.\n\nInstead of logging exc, it\u0027s better so pass exc_info\u003dTrue for a full traceback. If we get something like KeyError here, the message won\u0027t be helpful.","commit_id":"0865ce5572818f434af2df14647892651184ef47"}]}
