)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5106097fdb703761d25733efacefda0d787977ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bf65e042_3a95a224","updated":"2025-01-14 13:48:19.000000000","message":"Some comments inline. What needs the most attention is:\n\n1) Placing root device hints logic in raid_utils.\n2) Potential breakage in encoding.\n\nIf the latter is fine, I\u0027m happy with a follow-up.","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1432441ac5c7cf19f1e418380aaae14fb4476d1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7b64f27a_7e24f858","updated":"2025-01-14 14:40:27.000000000","message":"oh shoot! didn\u0027t see the potential issue in encoding, removing vote","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5878d960fd3f2a1b5bd20d2b8a64cd195a14db5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7cb5e18a_77c3dcdb","updated":"2025-01-17 17:22:07.000000000","message":"Thanks!","commit_id":"8b18184e2dba40eb9ee2cfe52d4cd55d8d374b4b"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6ff4e89fadd46397bb9acc811dba635f26297450","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"35c14287_c4e50aa1","updated":"2025-01-16 08:53:24.000000000","message":"recheck tinycore repos glitch","commit_id":"8b18184e2dba40eb9ee2cfe52d4cd55d8d374b4b"}],"ironic_python_agent/encoding.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5106097fdb703761d25733efacefda0d787977ed","unresolved":true,"context_lines":[{"line_number":78,"context_line":"            return o.serialize()"},{"line_number":79,"context_line":"        elif isinstance(o, uuid.UUID):"},{"line_number":80,"context_line":"            return str(o)"},{"line_number":81,"context_line":"        elif isinstance(o, lib_exc.IronicException):"},{"line_number":82,"context_line":"            return serialize_lib_exc(o)"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            return json.JSONEncoder.default(self, o)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3c2a2059_4be156eb","side":"PARENT","line":81,"updated":"2025-01-14 13:48:19.000000000","message":"This change may break any custom hardware managers that report ironic-lib exceptions. Are we fine with it? Maybe add a conditional import?","commit_id":"06077cb88ed8cbf92c5234809743f5d756fb0bbc"},{"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":"78d69df8b01c3da1461f70943b822e2e46415d50","unresolved":true,"context_lines":[{"line_number":78,"context_line":"            return o.serialize()"},{"line_number":79,"context_line":"        elif isinstance(o, uuid.UUID):"},{"line_number":80,"context_line":"            return str(o)"},{"line_number":81,"context_line":"        elif isinstance(o, lib_exc.IronicException):"},{"line_number":82,"context_line":"            return serialize_lib_exc(o)"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            return json.JSONEncoder.default(self, o)"}],"source_content_type":"text/x-python","patch_set":4,"id":"de18528f_8ce9804f","side":"PARENT","line":81,"in_reply_to":"3c2a2059_4be156eb","updated":"2025-01-14 20:00:06.000000000","message":"Custom hardware managers will need to change anyway if they\u0027re reporting ironic-lib exceptions, as they won\u0027t have any ironic-lib to pull exceptions from anymore.","commit_id":"06077cb88ed8cbf92c5234809743f5d756fb0bbc"}],"ironic_python_agent/errors.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5106097fdb703761d25733efacefda0d787977ed","unresolved":true,"context_lines":[{"line_number":419,"context_line":"        super(RESTError, self).__init__(details)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"class ServiceRegistrationFailure(RESTError):"},{"line_number":423,"context_line":"    \"\"\"Error raised when an mdns service registration fails.\"\"\""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def __init__(self, service\u003d\"unknown\", error\u003d\"unknown error\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"f8276cdf_7ebaeea0","line":422,"updated":"2025-01-14 13:48:19.000000000","message":"nit: not needed","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"},{"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":"78d69df8b01c3da1461f70943b822e2e46415d50","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        super(RESTError, self).__init__(details)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"class ServiceRegistrationFailure(RESTError):"},{"line_number":423,"context_line":"    \"\"\"Error raised when an mdns service registration fails.\"\"\""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def __init__(self, service\u003d\"unknown\", error\u003d\"unknown error\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ab56f277_009a7113","line":422,"in_reply_to":"f8276cdf_7ebaeea0","updated":"2025-01-14 20:00:06.000000000","message":"Done","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"}],"ironic_python_agent/mdns.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5106097fdb703761d25733efacefda0d787977ed","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                                     ip_version\u003dip_version)"},{"line_number":84,"context_line":"        self._registered \u003d []"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def register_service(self, service_type, endpoint, params\u003dNone):"},{"line_number":87,"context_line":"        \"\"\"Register a service."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        This call announces the new services via multicast and instructs the"}],"source_content_type":"text/x-python","patch_set":4,"id":"3e473697_2935c864","line":86,"updated":"2025-01-14 13:48:19.000000000","message":"Similarly to the Ironic patch: the registration machinery is not needed in IPA","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"},{"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":"78d69df8b01c3da1461f70943b822e2e46415d50","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                     ip_version\u003dip_version)"},{"line_number":84,"context_line":"        self._registered \u003d []"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def register_service(self, service_type, endpoint, params\u003dNone):"},{"line_number":87,"context_line":"        \"\"\"Register a service."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        This call announces the new services via multicast and instructs the"}],"source_content_type":"text/x-python","patch_set":4,"id":"4d0082ed_74fea127","line":86,"in_reply_to":"3e473697_2935c864","updated":"2025-01-14 20:00:06.000000000","message":"Done","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"}],"ironic_python_agent/raid_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5106097fdb703761d25733efacefda0d787977ed","unresolved":true,"context_lines":[{"line_number":39,"context_line":"# partition 1, md1 on the partition 2, and so on."},{"line_number":40,"context_line":"RAID_PARTITION \u003d 1"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# A dictionary in the form {hint name: hint type}"},{"line_number":43,"context_line":"VALID_ROOT_DEVICE_HINTS \u003d {"},{"line_number":44,"context_line":"    \u0027size\u0027: int, \u0027model\u0027: str, \u0027wwn\u0027: str, \u0027serial\u0027: str, \u0027vendor\u0027: str,"},{"line_number":45,"context_line":"    \u0027wwn_with_extension\u0027: str, \u0027wwn_vendor_extension\u0027: str, \u0027name\u0027: str,"}],"source_content_type":"text/x-python","patch_set":4,"id":"c444032e_26366977","line":42,"updated":"2025-01-14 13:48:19.000000000","message":"Why is the hints logic in raid_utils? It has nothing to do with RAID. I\u0027d use a separate module (which we could then sync between IPA and Ironic more or less cleanly).","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"},{"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":"b1766447dbfa80e3cb03ebcb1ba940fbc8f0f66e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"# partition 1, md1 on the partition 2, and so on."},{"line_number":40,"context_line":"RAID_PARTITION \u003d 1"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# A dictionary in the form {hint name: hint type}"},{"line_number":43,"context_line":"VALID_ROOT_DEVICE_HINTS \u003d {"},{"line_number":44,"context_line":"    \u0027size\u0027: int, \u0027model\u0027: str, \u0027wwn\u0027: str, \u0027serial\u0027: str, \u0027vendor\u0027: str,"},{"line_number":45,"context_line":"    \u0027wwn_with_extension\u0027: str, \u0027wwn_vendor_extension\u0027: str, \u0027name\u0027: str,"}],"source_content_type":"text/x-python","patch_set":4,"id":"23f9043f_e62fa88d","line":42,"in_reply_to":"c444032e_26366977","updated":"2025-01-16 22:27:06.000000000","message":"Done","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"}],"ironic_python_agent/tests/unit/test_base.py":[{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"a7314c57f2338a9e373ff2819a2f3c8a45e6b748","unresolved":true,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @mock.patch.object(utils, \"execute\", autospec\u003dTrue)"},{"line_number":60,"context_line":"    def test_no_exception_raised_for_execute(self, mock_exec):"},{"line_number":61,"context_line":"        # Make sure we can call utils.execute() even though we didn\u0027t mock it."},{"line_number":62,"context_line":"        # We do mock utils.execute() so we don\u0027t actually execute anything."},{"line_number":63,"context_line":"        utils.execute(\"ls\")"},{"line_number":64,"context_line":"        utils.execute(\"echo\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"4d2c8875_14bc9999","line":61,"updated":"2025-01-10 12:07:22.000000000","message":"...But we did mock it","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"},{"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":"44f32a2e84994f12e13379b948a6e86a1bba44c7","unresolved":true,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @mock.patch.object(utils, \"execute\", autospec\u003dTrue)"},{"line_number":60,"context_line":"    def test_no_exception_raised_for_execute(self, mock_exec):"},{"line_number":61,"context_line":"        # Make sure we can call utils.execute() even though we didn\u0027t mock it."},{"line_number":62,"context_line":"        # We do mock utils.execute() so we don\u0027t actually execute anything."},{"line_number":63,"context_line":"        utils.execute(\"ls\")"},{"line_number":64,"context_line":"        utils.execute(\"echo\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"c28e8218_53d40f82","line":61,"in_reply_to":"4d2c8875_14bc9999","updated":"2025-01-10 18:46:42.000000000","message":"I\u0027ll get rid of this comment entirely if this patch needs a revision.","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"},{"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":"78d69df8b01c3da1461f70943b822e2e46415d50","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @mock.patch.object(utils, \"execute\", autospec\u003dTrue)"},{"line_number":60,"context_line":"    def test_no_exception_raised_for_execute(self, mock_exec):"},{"line_number":61,"context_line":"        # Make sure we can call utils.execute() even though we didn\u0027t mock it."},{"line_number":62,"context_line":"        # We do mock utils.execute() so we don\u0027t actually execute anything."},{"line_number":63,"context_line":"        utils.execute(\"ls\")"},{"line_number":64,"context_line":"        utils.execute(\"echo\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"750206d8_82b623b8","line":61,"in_reply_to":"c28e8218_53d40f82","updated":"2025-01-14 20:00:06.000000000","message":"Done","commit_id":"801175b5951dfe212d9a0b6b85694fdd78f6258f"}]}
