)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9bcc7ff4213cb4b2d377c70f2dbc9718e11b6787","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"dc86bae0_22b5cb3b","updated":"2024-12-06 18:37:09.000000000","message":"If 3.9 is not much different, let\u0027s use it (but consider this question again for other repos).","commit_id":"5d25baa6284133af3e2d9ed9cda5a86a0b582c08"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"aa41dbf72724569c818f7af6b986439d35a61591","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c4c59793_6d0d95a4","updated":"2024-12-04 21:11:59.000000000","message":"dtansur: worth noting here that the only diff between 3.7 and 3.9 are for typing (which we don\u0027t do in this repo), for shlex (which we don\u0027t use), and functools.lru_cache (which we don\u0027t use). So the output was the same.\n\nThe only difference between Python 3.6 and Python 3.7 is the subprocess module (which isn\u0027t used in this repo).","commit_id":"5d25baa6284133af3e2d9ed9cda5a86a0b582c08"},{"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":"8cf838282dbc7a53eec54e19f192356ceec6f3bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"85449f4e_f7612cab","updated":"2024-12-11 23:15:27.000000000","message":"Unit tests are catching a breakage:\n\nExpected: debug(\u0027HTTP GET of SessionService failed %s, this is expected prior to authentication\u0027, \u0027HTTP GET http://redfish/v1/SessionService returned code 403. unknown error Extended information: None\u0027)\nActual: debug(\u0027HTTP GET of SessionService failed %s, this is expected prior to authentication\u0027, \u0027HTTP GET http://redfish/v1/SessionService returned code HTTPStatus.FORBIDDEN. unknown error Extended information: None\u0027)","commit_id":"88341a1022c171b4b9febc3a4e583fe03aaf1ed9"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"6d36c069296d41aa8f693a4d723668a8c7dc6c96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9da46441_c85e8002","in_reply_to":"85449f4e_f7612cab","updated":"2025-01-25 16:38:41.000000000","message":"I assume we previously used the numeric value so that\u0027s the route I\u0027ll go.","commit_id":"88341a1022c171b4b9febc3a4e583fe03aaf1ed9"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"731b8e0044ca0499f0bc2948317731820bff3007","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"37e363e3_3fdadf47","in_reply_to":"9da46441_c85e8002","updated":"2025-01-25 17:27:56.000000000","message":"Weird. Nope it\u0027s been the string name. So reverting back to that.","commit_id":"88341a1022c171b4b9febc3a4e583fe03aaf1ed9"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"ebd921b55477cb0dc1244feca0984b0faa089177","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"714312da_f6e670c6","updated":"2025-02-10 08:18:44.000000000","message":"I guess we\u0027re ok with this, I don\u0027t have anything to add to what has been said already, so let\u0027s merge it and see how it goes","commit_id":"52d9078836ebd9ea0df2fc2afe228aa4f48f3f8c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6ad76abe192e1cb1a92959ebc1879d6dd5b03d19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8937117f_883d562f","updated":"2025-01-29 14:29:33.000000000","message":"Overall, LGTM. I\u0027m sort of with Dmitry regarding the f-string method execution concern. That bothers me, but it is also not a hill to die on. Also, it kind of makes sense in some limited cases. In other words, likely okay as an exception anyhow.","commit_id":"52d9078836ebd9ea0df2fc2afe228aa4f48f3f8c"}],"pyproject.toml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af6a1f23dad1d5841c87965b9048881317813a57","unresolved":true,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"[tool.ruff]"},{"line_number":9,"context_line":"line-length \u003d 79"},{"line_number":10,"context_line":"target-version \u003d \"py39\""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[tool.ruff.lint]"},{"line_number":13,"context_line":"select \u003d ["}],"source_content_type":"text/x-toml","patch_set":2,"id":"f1e85342_4db9af68","line":10,"updated":"2024-11-18 15:56:43.000000000","message":"Let\u0027s target the oldest Python that is still supported on the oldest branch (3.6 I suspect)","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9bcc7ff4213cb4b2d377c70f2dbc9718e11b6787","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"[tool.ruff]"},{"line_number":9,"context_line":"line-length \u003d 79"},{"line_number":10,"context_line":"target-version \u003d \"py39\""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[tool.ruff.lint]"},{"line_number":13,"context_line":"select \u003d ["}],"source_content_type":"text/x-toml","patch_set":2,"id":"7e9eddc5_807295fd","line":10,"in_reply_to":"bf004eae_d301c590","updated":"2024-12-06 18:37:09.000000000","message":"Well, we have what we have. Hopefully, the difference is not that large.","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"a805cc0fcdd74e28ea4d9858879f2c60779ff50f","unresolved":true,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"[tool.ruff]"},{"line_number":9,"context_line":"line-length \u003d 79"},{"line_number":10,"context_line":"target-version \u003d \"py39\""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[tool.ruff.lint]"},{"line_number":13,"context_line":"select \u003d ["}],"source_content_type":"text/x-toml","patch_set":2,"id":"bf004eae_d301c590","line":10,"in_reply_to":"f1e85342_4db9af68","updated":"2024-12-04 20:58:21.000000000","message":"ruff only ever supported Python 3.7 and newer. Would you be okay with that?","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"}],"sushy/resources/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af6a1f23dad1d5841c87965b9048881317813a57","unresolved":true,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"                logging.warning("},{"line_number":105,"context_line":"                    f\u0027Applying default \"{self._default}\" on required, but \u0027"},{"line_number":106,"context_line":"                    f\u0027missing attribute \"{path}\"\u0027)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            # Do not run the adapter on the default value"},{"line_number":109,"context_line":"            return self._default"}],"source_content_type":"text/x-python","patch_set":2,"id":"648979ae_12838860","line":106,"updated":"2024-11-18 15:56:43.000000000","message":"nit: we should have used late binding instead","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"a805cc0fcdd74e28ea4d9858879f2c60779ff50f","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"                logging.warning("},{"line_number":105,"context_line":"                    f\u0027Applying default \"{self._default}\" on required, but \u0027"},{"line_number":106,"context_line":"                    f\u0027missing attribute \"{path}\"\u0027)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            # Do not run the adapter on the default value"},{"line_number":109,"context_line":"            return self._default"}],"source_content_type":"text/x-python","patch_set":2,"id":"8e605b79_30b17984","line":106,"in_reply_to":"648979ae_12838860","updated":"2024-12-04 20:58:21.000000000","message":"I\u0027m adding a commit before this to use flake8-logging and flake8-logging-format to ensure we don\u0027t have this.","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"}],"sushy/resources/common.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af6a1f23dad1d5841c87965b9048881317813a57","unresolved":true,"context_lines":[{"line_number":26,"context_line":"class OperationApplyTimeSupportField(base.CompositeField):"},{"line_number":27,"context_line":"    def __init__(self):"},{"line_number":28,"context_line":"        super().__init__("},{"line_number":29,"context_line":"            path\u003d\"@Redfish.OperationApplyTimeSupport\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    maintenance_window_duration_in_seconds \u003d base.Field("},{"line_number":32,"context_line":"        \u0027MaintenanceWindowDurationInSeconds\u0027, adapter\u003dint)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7432a02d_9edd1e60","line":29,"updated":"2024-11-18 15:56:43.000000000","message":"nit: merge lines (I wish the tool could do it)","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"a805cc0fcdd74e28ea4d9858879f2c60779ff50f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class OperationApplyTimeSupportField(base.CompositeField):"},{"line_number":27,"context_line":"    def __init__(self):"},{"line_number":28,"context_line":"        super().__init__("},{"line_number":29,"context_line":"            path\u003d\"@Redfish.OperationApplyTimeSupport\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    maintenance_window_duration_in_seconds \u003d base.Field("},{"line_number":32,"context_line":"        \u0027MaintenanceWindowDurationInSeconds\u0027, adapter\u003dint)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a7f12fe9_42d7bdc6","line":29,"in_reply_to":"7432a02d_9edd1e60","updated":"2024-12-04 20:58:21.000000000","message":"It can do it when I allow it to format but I still haven\u0027t figured out the closest formatting style that matches what we do. (e.g. single quotes? double quotes?)","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"}],"sushy/resources/system/secure_boot.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af6a1f23dad1d5841c87965b9048881317813a57","unresolved":true,"context_lines":[{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        if not isinstance(enabled, bool):"},{"line_number":144,"context_line":"            raise exceptions.InvalidParameterValueError("},{"line_number":145,"context_line":"                f\"Expected a boolean for \u0027enabled\u0027, got {enabled!r}\")"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        etag \u003d self._get_etag()"},{"line_number":148,"context_line":"        self._conn.patch(self.path, data\u003d{\u0027SecureBootEnable\u0027: enabled},"}],"source_content_type":"text/x-python","patch_set":2,"id":"df2d6e86_563dbd22","line":145,"updated":"2024-11-18 15:56:43.000000000","message":"nit: !r not really needed","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"a805cc0fcdd74e28ea4d9858879f2c60779ff50f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        if not isinstance(enabled, bool):"},{"line_number":144,"context_line":"            raise exceptions.InvalidParameterValueError("},{"line_number":145,"context_line":"                f\"Expected a boolean for \u0027enabled\u0027, got {enabled!r}\")"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        etag \u003d self._get_etag()"},{"line_number":148,"context_line":"        self._conn.patch(self.path, data\u003d{\u0027SecureBootEnable\u0027: enabled},"}],"source_content_type":"text/x-python","patch_set":2,"id":"2926da0c_8a1d46eb","line":145,"in_reply_to":"df2d6e86_563dbd22","updated":"2024-12-04 20:58:21.000000000","message":"Done","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"}],"sushy/tests/unit/resources/system/test_system.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af6a1f23dad1d5841c87965b9048881317813a57","unresolved":true,"context_lines":[{"line_number":339,"context_line":"    def test_set_system_boot_options_invalid_enabled(self):"},{"line_number":340,"context_line":"        with self.assertRaisesRegex("},{"line_number":341,"context_line":"            exceptions.InvalidParameterValueError,"},{"line_number":342,"context_line":"            f\u0027\"enabled\" value.*{list(sushy.BootSourceOverrideEnabled)}\u0027):"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            self.sys_inst.set_system_boot_options("},{"line_number":345,"context_line":"                sushy.BootSource.HDD,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe389587_e26e71a1","line":342,"updated":"2024-11-18 15:56:43.000000000","message":"I hope this actually works.. not the most readable thing ever","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9bcc7ff4213cb4b2d377c70f2dbc9718e11b6787","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    def test_set_system_boot_options_invalid_enabled(self):"},{"line_number":340,"context_line":"        with self.assertRaisesRegex("},{"line_number":341,"context_line":"            exceptions.InvalidParameterValueError,"},{"line_number":342,"context_line":"            f\u0027\"enabled\" value.*{list(sushy.BootSourceOverrideEnabled)}\u0027):"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            self.sys_inst.set_system_boot_options("},{"line_number":345,"context_line":"                sushy.BootSource.HDD,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c02e1d00_d14aa089","line":342,"in_reply_to":"920baa3c_d11de7d8","updated":"2024-12-06 18:37:09.000000000","message":"I think the ideal thing to do is to stop formatting lists into user messages :) But we can follow-up with it.","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"a805cc0fcdd74e28ea4d9858879f2c60779ff50f","unresolved":true,"context_lines":[{"line_number":339,"context_line":"    def test_set_system_boot_options_invalid_enabled(self):"},{"line_number":340,"context_line":"        with self.assertRaisesRegex("},{"line_number":341,"context_line":"            exceptions.InvalidParameterValueError,"},{"line_number":342,"context_line":"            f\u0027\"enabled\" value.*{list(sushy.BootSourceOverrideEnabled)}\u0027):"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            self.sys_inst.set_system_boot_options("},{"line_number":345,"context_line":"                sushy.BootSource.HDD,"}],"source_content_type":"text/x-python","patch_set":2,"id":"920baa3c_d11de7d8","line":342,"in_reply_to":"fe389587_e26e71a1","updated":"2024-12-04 20:58:21.000000000","message":"I mean the original isn\u0027t much better... But to answer the question....\n\n```\n\u003e\u003e\u003e from enum import Enum\n\u003e\u003e\u003e class BS(Enum):\n...     LEGACY \u003d \u0027Legacy\u0027\n...     UEFI \u003d \u0027UEFI\u0027\n\n\n\u003e\u003e\u003e \u0027\"enabled\" value.*{0}\u0027.format(list(BS))\n\u0027\"enabled\" value.*[\u003cBS.LEGACY: \\\u0027Legacy\\\u0027\u003e, \u003cBS.UEFI: \\\u0027UEFI\\\u0027\u003e]\u0027\n\u003e\u003e\u003e f\u0027\"enabled\" value.*{list(BS))}\u0027\n\u0027\"enabled\" value.*[\u003cBS.LEGACY: \\\u0027Legacy\\\u0027\u003e, \u003cBS.UEFI: \\\u0027UEFI\\\u0027\u003e]\u0027\n```\n\nI haven\u0027t the foggiest what this code is trying to do.","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"}],"sushy/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"af6a1f23dad1d5841c87965b9048881317813a57","unresolved":true,"context_lines":[{"line_number":118,"context_line":"    except (TypeError, KeyError):"},{"line_number":119,"context_line":"        attribute \u003d \u0027/\u0027.join(subresource_name)"},{"line_number":120,"context_line":"        if is_collection:"},{"line_number":121,"context_line":"            attribute +\u003d f\u0027[{len(elements)}]\u0027"},{"line_number":122,"context_line":"        attribute +\u003d \u0027/@odata.id\u0027"},{"line_number":123,"context_line":"        raise exceptions.MissingAttributeError("},{"line_number":124,"context_line":"            attribute\u003dattribute, resource\u003dresource.path)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a935e458_2c3b80e3","line":121,"updated":"2024-11-18 15:56:43.000000000","message":"nit: I\u0027d not use f-strings for anything that uses functions","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9bcc7ff4213cb4b2d377c70f2dbc9718e11b6787","unresolved":true,"context_lines":[{"line_number":118,"context_line":"    except (TypeError, KeyError):"},{"line_number":119,"context_line":"        attribute \u003d \u0027/\u0027.join(subresource_name)"},{"line_number":120,"context_line":"        if is_collection:"},{"line_number":121,"context_line":"            attribute +\u003d f\u0027[{len(elements)}]\u0027"},{"line_number":122,"context_line":"        attribute +\u003d \u0027/@odata.id\u0027"},{"line_number":123,"context_line":"        raise exceptions.MissingAttributeError("},{"line_number":124,"context_line":"            attribute\u003dattribute, resource\u003dresource.path)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2786d9ab_1b235c4c","line":121,"in_reply_to":"202d0beb_3e9dd71e","updated":"2024-12-06 18:37:09.000000000","message":"I know, it\u0027s just not the practice I\u0027d encourage myself. I\u0027d use the regular formatting myself, and I\u0027ll be quite upset if ruff starts forcing me to do it (I think you said it won\u0027t force this changes if I don\u0027t want to?)","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"9ffe8f4b3a7131d88c616bd2b0261e9c4f13b219","unresolved":true,"context_lines":[{"line_number":118,"context_line":"    except (TypeError, KeyError):"},{"line_number":119,"context_line":"        attribute \u003d \u0027/\u0027.join(subresource_name)"},{"line_number":120,"context_line":"        if is_collection:"},{"line_number":121,"context_line":"            attribute +\u003d f\u0027[{len(elements)}]\u0027"},{"line_number":122,"context_line":"        attribute +\u003d \u0027/@odata.id\u0027"},{"line_number":123,"context_line":"        raise exceptions.MissingAttributeError("},{"line_number":124,"context_line":"            attribute\u003dattribute, resource\u003dresource.path)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dcec1ece_673feaf1","line":121,"in_reply_to":"2786d9ab_1b235c4c","updated":"2024-12-06 18:43:59.000000000","message":"There\u0027s many ways to have written this code differently. The reason for the change is that the % matched this rule... https://github.com/asottile/pyupgrade?tab\u003dreadme-ov-file#printf-style-string-formatting Since ruff targets Python 3.7 or newer their conversion logic is just to go to a f-string.","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"a805cc0fcdd74e28ea4d9858879f2c60779ff50f","unresolved":true,"context_lines":[{"line_number":118,"context_line":"    except (TypeError, KeyError):"},{"line_number":119,"context_line":"        attribute \u003d \u0027/\u0027.join(subresource_name)"},{"line_number":120,"context_line":"        if is_collection:"},{"line_number":121,"context_line":"            attribute +\u003d f\u0027[{len(elements)}]\u0027"},{"line_number":122,"context_line":"        attribute +\u003d \u0027/@odata.id\u0027"},{"line_number":123,"context_line":"        raise exceptions.MissingAttributeError("},{"line_number":124,"context_line":"            attribute\u003dattribute, resource\u003dresource.path)"}],"source_content_type":"text/x-python","patch_set":2,"id":"202d0beb_3e9dd71e","line":121,"in_reply_to":"a935e458_2c3b80e3","updated":"2024-12-04 20:58:21.000000000","message":"What would you like to use here? This is the correct syntax and even used as an example in realpython.com\u0027s f-string\u0027s guide.","commit_id":"51d84abdf02c8950df8bb75a951f00f3614719ad"}]}
