)]}'
{"/PATCHSET_LEVEL":[{"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":"69a9005583bac2a89d3306bdaef24b00dcc7c588","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0bf70781_f3deed6a","updated":"2025-08-07 16:13:10.000000000","message":"I find myself wonder if there\u0027s any way (other than human vigilance), e.g. unit tests, to validate nobody uses this pattern again.","commit_id":"7e92300cb2c0f673f47e816847219ce66dc1c910"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1865fde76c7b28a4733994ebb27c67942a389b86","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e9210d78_9c8f77fd","in_reply_to":"0bf70781_f3deed6a","updated":"2025-08-07 16:45:59.000000000","message":"The next patch actually begins to break it, but I\u0027m not explicitly breaking it on purpose because we know folks run patches out there, and maybe the thing to do here is to add a release note to highlight \"if your doing anything, you really shouldn\u0027t be using the dbapi directly in the db layer\"","commit_id":"7e92300cb2c0f673f47e816847219ce66dc1c910"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"8f8d746dd04d533a00b844d77acde66889fb3126","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8615b078_b917d93f","in_reply_to":"e9210d78_9c8f77fd","updated":"2025-08-17 16:55:29.000000000","message":"Yeah wondering if we can have some kind of local check.","commit_id":"7e92300cb2c0f673f47e816847219ce66dc1c910"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"da4c6a5c911a56a085a137a53ade883741e76b27","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1df28ea9_bea0b322","updated":"2025-08-12 22:59:50.000000000","message":"I feel like this change should be moved to the very front of this change series (even before the Workflow -1).","commit_id":"c3a21f96ede920a18850c11d89cccad6ffdd2f4d"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"dc5bac0590bb4543f8fa70ee9edd2bf266d994f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"94fa019e_4b7c6308","updated":"2025-08-16 16:24:59.000000000","message":"As long as it gets tested, looks good to me. TKS o/","commit_id":"3d58ec2bee643dc9563e3f3dd07f187ed282ba85"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"8f8d746dd04d533a00b844d77acde66889fb3126","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"fa9bcbec_0ba9d424","updated":"2025-08-17 16:55:29.000000000","message":"I wonder if some type annotations and type checking would ultimately be the best way to ensure the wrong object isn\u0027t used.","commit_id":"8fd1cc8c97db6081459f7952afcda871caf5057a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdb70dbcf8ea0170436eee132e9c7325cf2886c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ef51612c_fef4df25","updated":"2025-08-18 21:50:40.000000000","message":"recheck ci unhappiness failed parent job","commit_id":"8fd1cc8c97db6081459f7952afcda871caf5057a"}],"ironic/objects/conductor.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":"1865fde76c7b28a4733994ebb27c67942a389b86","unresolved":true,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @base.remotable_classmethod"},{"line_number":191,"context_line":"    def list_hardware_type_interfaces(cls, context, names):"},{"line_number":192,"context_line":"        \"\"\"Privdes a list of hardware type interface names from conductors."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        This method provides a pass-through call mechanism on an object as"},{"line_number":195,"context_line":"        opposed to direct API call functionality."}],"source_content_type":"text/x-python","patch_set":3,"id":"cdba2b3a_39f970c5","line":192,"range":{"start_line":192,"start_character":11,"end_line":192,"end_character":18},"updated":"2025-08-07 16:45:59.000000000","message":"fix me!","commit_id":"e35a653460568126dcc85e4dde3ef73c1b03d5cf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f3f376a4b64f8b4102c661e8a583a19606993c69","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @base.remotable_classmethod"},{"line_number":191,"context_line":"    def list_hardware_type_interfaces(cls, context, names):"},{"line_number":192,"context_line":"        \"\"\"Privdes a list of hardware type interface names from conductors."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        This method provides a pass-through call mechanism on an object as"},{"line_number":195,"context_line":"        opposed to direct API call functionality."}],"source_content_type":"text/x-python","patch_set":3,"id":"1473c49c_4095f59e","line":192,"range":{"start_line":192,"start_character":11,"end_line":192,"end_character":18},"in_reply_to":"cdba2b3a_39f970c5","updated":"2025-08-08 17:00:17.000000000","message":"Done","commit_id":"e35a653460568126dcc85e4dde3ef73c1b03d5cf"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"8f8d746dd04d533a00b844d77acde66889fb3126","unresolved":true,"context_lines":[{"line_number":213,"context_line":"                    entry[col_key] \u003d row[col_key].isoformat()"},{"line_number":214,"context_line":"                else:"},{"line_number":215,"context_line":"                    entry[col_key] \u003d row[col_key]"},{"line_number":216,"context_line":"            resp.append(entry)"},{"line_number":217,"context_line":"        return resp"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"e535f23b_46fd3e33","line":216,"updated":"2025-08-17 16:55:29.000000000","message":"You mentioned in an earlier patch memory usage. Comprehensions are going to be much more memory efficient in Python and we can make a generic helper.\n\n```\ndef _db_to_msg_bus(db_resp):\n    if isinstance(db_resp, (list, tuple)):\n        return [_db_to_msg_bus(item) for item in db_resp)]\n    elif hasattr(db_resp, \"keys\") and callable(getattr(db_resp, \"keys\")):\n        return {key: _db_to_msg_bus(db_resp[key]) for key in db_resp.keys()}\n    elif isinstance(db_resp, datetime.datetime):\n        return db_resp.isoformat()\n    else:\n        return db_resp\n```\n\nThere is probably a better way to detect the hybrid object but I just followed your approach.","commit_id":"8fd1cc8c97db6081459f7952afcda871caf5057a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdb70dbcf8ea0170436eee132e9c7325cf2886c7","unresolved":true,"context_lines":[{"line_number":213,"context_line":"                    entry[col_key] \u003d row[col_key].isoformat()"},{"line_number":214,"context_line":"                else:"},{"line_number":215,"context_line":"                    entry[col_key] \u003d row[col_key]"},{"line_number":216,"context_line":"            resp.append(entry)"},{"line_number":217,"context_line":"        return resp"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"d77e032b_afe1f2db","line":216,"in_reply_to":"def31688_6b2a6725","updated":"2025-08-18 21:50:40.000000000","message":"Also, every response likely has the values, so I\u0027m just not sure on my end.","commit_id":"8fd1cc8c97db6081459f7952afcda871caf5057a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"144c6072adbb79e69b49af15d151ed04500cd110","unresolved":true,"context_lines":[{"line_number":213,"context_line":"                    entry[col_key] \u003d row[col_key].isoformat()"},{"line_number":214,"context_line":"                else:"},{"line_number":215,"context_line":"                    entry[col_key] \u003d row[col_key]"},{"line_number":216,"context_line":"            resp.append(entry)"},{"line_number":217,"context_line":"        return resp"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"def31688_6b2a6725","line":216,"in_reply_to":"e535f23b_46fd3e33","updated":"2025-08-18 13:18:44.000000000","message":"I was originally thinking of doing a comprehension statement instead of what we ended up with, until I had to deal with the time format fields which get handed back. Funny thing is, we have almost identical code in the api for the same reason.\n\nAnyway, memory footprint wise is disjointed from this because the memory footprint is much larger with the app stack in general now.","commit_id":"8fd1cc8c97db6081459f7952afcda871caf5057a"}]}
