)]}'
{"/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":"29e4c1d963c71429862622e6d1d09d61bde002e1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"677c3e13_8bcacbd5","updated":"2025-09-15 17:57:12.000000000","message":"I like the idea of this.\n\nShould we deprecate [json-rpc] group in general in favor of specific groups? It seems like that\u0027s the path forward that might be less confusing to operators in the longer term.\n\nPlease add a release note.","commit_id":"74eb0926bfc78d6ede1631d9a4e590ebb558cbef"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"c3aa35ed231a718b0da2ccdd71f7ddc59549df5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8f455ed4_5a714d22","in_reply_to":"585673ce_71e5348c","updated":"2025-09-22 14:31:44.000000000","message":"release note added","commit_id":"74eb0926bfc78d6ede1631d9a4e590ebb558cbef"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"fb5364a258a5582e7006fc4411a8c48bf1e8131f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"585673ce_71e5348c","in_reply_to":"677c3e13_8bcacbd5","updated":"2025-09-19 11:23:10.000000000","message":"Ok.  Will add a release note.   \n\nRegarding the other part of your comment.  Yes, I think perhaps using this for existing [json-rpc] usage would be great, but I\u0027d like to defer that to another change request.","commit_id":"74eb0926bfc78d6ede1631d9a4e590ebb558cbef"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"c3aa35ed231a718b0da2ccdd71f7ddc59549df5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e7427759_1cec0c31","updated":"2025-09-22 14:31:44.000000000","message":"@jay@jvf.cc ... release note added.  PTAL.","commit_id":"d5e084f2c07a76e7a6a02d7e0561e954fe0e95b3"},{"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":"399aef16091cf569434bfd966b9d5e9a8cbae352","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ae600698_1f27f306","updated":"2025-09-25 21:28:26.000000000","message":"CI failures are real. Fix \u0027em and I\u0027m on board.","commit_id":"7fe6a6055922fe451beccde8a3795a6ae9318036"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"6952bd921026a84e70d7770844d65b3c180d30ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"225fab43_79dc3c16","updated":"2025-09-26 17:13:05.000000000","message":"recheck","commit_id":"20e0059d79fc490e53098dc4a16d3ee68d7faa32"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"077a3dd7e306042e24baa122b50da07e9dbf2d1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"132f9d22_f2003f94","updated":"2025-09-29 18:40:27.000000000","message":"@jay@jvf.cc could you have another look?  I\u0027ve addressed the CI failures... also added the \"pre-commit\" hook on my local env to avoid this in the future!","commit_id":"77b56b9c45e651ebd046be84046953c97f48b0ce"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d4aa7a1b1e227fc8b9a062ad8cece03f4381b083","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d0b83bfe_c89beddb","updated":"2025-09-29 18:37:27.000000000","message":"LGTM","commit_id":"77b56b9c45e651ebd046be84046953c97f48b0ce"},{"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":"15b50312fd01191ff8f09b49ec0be9cd4fb156fb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"986bf660_b51f0e2c","updated":"2025-10-02 21:03:18.000000000","message":"+2 pending spec merge. Please treat this as a +2 if the related spec has merged and I haven\u0027t revisited.","commit_id":"17a677d88c88048ab75fe8b8cd316cebf16f52cd"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"670eee081271ff38d3cdf88205b03852481e420e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"287a66f8_7d77eb34","updated":"2025-10-02 22:05:12.000000000","message":"LGTM","commit_id":"17a677d88c88048ab75fe8b8cd316cebf16f52cd"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"05ec7732cdce45d99ccae858c031c03f88df06de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6ebc2f19_210fdd0e","updated":"2025-10-06 19:09:07.000000000","message":"recheck","commit_id":"a8c3aa479e3a7ea6dd71d37c094e2fc9c2570c96"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"06096c368744e4ad29ffea2b780f45de318e5ec1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c4f4c208_25bbce6f","updated":"2025-10-06 23:25:51.000000000","message":"recheck","commit_id":"a8c3aa479e3a7ea6dd71d37c094e2fc9c2570c96"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"1e62472a1d87f0315f4bdc7f0adf2bea7cb391d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9a3e2811_a869a06c","updated":"2025-10-14 12:49:23.000000000","message":"recheck","commit_id":"a6e3fc4b61306edde08d8cd4f9ae88940efbd218"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d39bcc84663a3f3f07a4040d02fdf1c7b9d58d1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"92ff19c0_62945554","updated":"2025-11-03 18:37:11.000000000","message":"Upgrading my review.","commit_id":"cd9e70198e63abf5ec872f2fa426f8f90d018cc6"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"56e2aba980c73eb535298dfcf205b2c8ccef0a40","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e69e6933_54406af0","updated":"2025-10-27 12:02:05.000000000","message":"recheck","commit_id":"cd9e70198e63abf5ec872f2fa426f8f90d018cc6"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"5a2bf8121f42f977ae42bb3e72b699be98cc95f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"fd26ed3e_331e0c42","updated":"2025-10-28 12:06:03.000000000","message":"recheck","commit_id":"cd9e70198e63abf5ec872f2fa426f8f90d018cc6"}],"ironic/common/json_rpc/client.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6c9f155f605bdabebffbd9b9408bb08359875061","unresolved":true,"context_lines":[{"line_number":50,"context_line":"            auth_type \u003d \u0027none\u0027 if auth_strategy \u003d\u003d \u0027noauth\u0027 else auth_strategy"},{"line_number":51,"context_line":"            CONF.set_default(\u0027auth_type\u0027, auth_type, group\u003dgroup)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"            # Deprecated, remove in W"},{"line_number":54,"context_line":"            group_conf \u003d getattr(CONF, group)"},{"line_number":55,"context_line":"            if auth_strategy \u003d\u003d \u0027http_basic\u0027:"},{"line_number":56,"context_line":"                if getattr(group_conf, \u0027http_basic_username\u0027, None):"}],"source_content_type":"text/x-python","patch_set":4,"id":"99fa4365_e3f4978c","line":53,"updated":"2025-09-26 12:11:01.000000000","message":"You can save some space by actually removing these","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"7f55b0e6d2cc3e6e428c45b02a91df14b1cd767c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            auth_type \u003d \u0027none\u0027 if auth_strategy \u003d\u003d \u0027noauth\u0027 else auth_strategy"},{"line_number":51,"context_line":"            CONF.set_default(\u0027auth_type\u0027, auth_type, group\u003dgroup)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"            # Deprecated, remove in W"},{"line_number":54,"context_line":"            group_conf \u003d getattr(CONF, group)"},{"line_number":55,"context_line":"            if auth_strategy \u003d\u003d \u0027http_basic\u0027:"},{"line_number":56,"context_line":"                if getattr(group_conf, \u0027http_basic_username\u0027, None):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fcf28254_b32e2faa","line":53,"in_reply_to":"99fa4365_e3f4978c","updated":"2025-09-26 13:46:43.000000000","message":"Are you referring to the deprecated attributes?   I\u0027d rather leave that for someone who has a better understanding of the full context than I do since it is not directly related to what I am trying to accomplish here, if that\u0027s ok with you?","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6c9f155f605bdabebffbd9b9408bb08359875061","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                 conf_group: str \u003d \u0027json_rpc\u0027):"},{"line_number":85,"context_line":"        self.serializer \u003d serializer"},{"line_number":86,"context_line":"        self.version_cap \u003d version_cap"},{"line_number":87,"context_line":"        self.conf_group \u003d conf_group"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def can_send_version(self, version):"},{"line_number":90,"context_line":"        return _can_send_version(version, self.version_cap)"}],"source_content_type":"text/x-python","patch_set":4,"id":"d199e5b3_37a5b202","line":87,"updated":"2025-09-26 12:11:01.000000000","message":"You can move the getattr call here and save the result. This way you won\u0027t have so many getattr\u0027s down the road","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"7f55b0e6d2cc3e6e428c45b02a91df14b1cd767c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                 conf_group: str \u003d \u0027json_rpc\u0027):"},{"line_number":85,"context_line":"        self.serializer \u003d serializer"},{"line_number":86,"context_line":"        self.version_cap \u003d version_cap"},{"line_number":87,"context_line":"        self.conf_group \u003d conf_group"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def can_send_version(self, version):"},{"line_number":90,"context_line":"        return _can_send_version(version, self.version_cap)"}],"source_content_type":"text/x-python","patch_set":4,"id":"e7d5e8bc_54d4e013","line":87,"in_reply_to":"d199e5b3_37a5b202","updated":"2025-09-26 13:46:43.000000000","message":"Actually, that\u0027s a bit more complicated. The reason the name is passed around rather than the actual group object is that some of the pre-existing utilities that get invoked later on require the name rather than the group... so I went with the name as argument rather than group to keep things consistent and to avoid having to switch back and forth between the two as needed.","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6c9f155f605bdabebffbd9b9408bb08359875061","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __init__(self, host, serializer, version\u003dNone, version_cap\u003dNone,"},{"line_number":113,"context_line":"                 allowed_exception_namespaces\u003d(), port\u003dNone,"},{"line_number":114,"context_line":"                 conf_group: str \u003d \u0027json_rpc\u0027):"},{"line_number":115,"context_line":"        self.conf_group \u003d conf_group"},{"line_number":116,"context_line":"        if not port:"},{"line_number":117,"context_line":"            group_conf \u003d getattr(CONF, self.conf_group)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ef7ea772_2af67fba","line":114,"updated":"2025-09-26 12:11:01.000000000","message":"... and you can pass the conf object here","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"7f55b0e6d2cc3e6e428c45b02a91df14b1cd767c","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __init__(self, host, serializer, version\u003dNone, version_cap\u003dNone,"},{"line_number":113,"context_line":"                 allowed_exception_namespaces\u003d(), port\u003dNone,"},{"line_number":114,"context_line":"                 conf_group: str \u003d \u0027json_rpc\u0027):"},{"line_number":115,"context_line":"        self.conf_group \u003d conf_group"},{"line_number":116,"context_line":"        if not port:"},{"line_number":117,"context_line":"            group_conf \u003d getattr(CONF, self.conf_group)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1de6cf3b_b279bba9","line":114,"in_reply_to":"ef7ea772_2af67fba","updated":"2025-09-26 13:46:43.000000000","message":"Actually, that\u0027s a bit more complicated.  The reason the name is passed around rather than the actual group object is that some of the pre-existing utilities that get invoked later on require the name rather than the group... so I went with the name as argument rather than group to keep things consistent and to avoid having to switch back and forth between the two as needed.","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6c9f155f605bdabebffbd9b9408bb08359875061","unresolved":true,"context_lines":[{"line_number":212,"context_line":"        scheme \u003d \u0027http\u0027"},{"line_number":213,"context_line":"        group_conf \u003d getattr(CONF, self.conf_group)"},{"line_number":214,"context_line":"        client_ssl \u003d getattr(group_conf, \u0027client_use_ssl\u0027, False)"},{"line_number":215,"context_line":"        server_ssl \u003d getattr(group_conf, \u0027use_ssl\u0027, False)"},{"line_number":216,"context_line":"        if client_ssl or server_ssl:"},{"line_number":217,"context_line":"            scheme \u003d \u0027https\u0027"},{"line_number":218,"context_line":"        url \u003d \u0027%s://%s:%d\u0027 % (scheme,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5d41f911_e43baad2","line":215,"updated":"2025-09-26 12:11:01.000000000","message":"You don\u0027t need the last two getattr\u0027s: we expect the options to always be present, even if unset","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"7f55b0e6d2cc3e6e428c45b02a91df14b1cd767c","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        scheme \u003d \u0027http\u0027"},{"line_number":213,"context_line":"        group_conf \u003d getattr(CONF, self.conf_group)"},{"line_number":214,"context_line":"        client_ssl \u003d getattr(group_conf, \u0027client_use_ssl\u0027, False)"},{"line_number":215,"context_line":"        server_ssl \u003d getattr(group_conf, \u0027use_ssl\u0027, False)"},{"line_number":216,"context_line":"        if client_ssl or server_ssl:"},{"line_number":217,"context_line":"            scheme \u003d \u0027https\u0027"},{"line_number":218,"context_line":"        url \u003d \u0027%s://%s:%d\u0027 % (scheme,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3b7ff451_980b34dd","line":215,"in_reply_to":"5d41f911_e43baad2","updated":"2025-09-26 13:46:43.000000000","message":"ok","commit_id":"c516d5aa76aa9c0ba165e3a58f0931c97090171f"}],"releasenotes/notes/json-rpc-multi-config-groups-beb3ec3d049202f5.yaml":[{"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":"727cf73c3e08261d3d2baf304b10e49ff70f65da","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Added support for multiple JSON-RPC configuration groups. The JSON-RPC"},{"line_number":5,"context_line":"    client and server implementation can now use different configuration"},{"line_number":6,"context_line":"    sections within the same configuration file. This enables services like"},{"line_number":7,"context_line":"    ironic-networking to use their own JSON-RPC configuration section while"},{"line_number":8,"context_line":"    sharing the same underlying implementation. The ``Client`` and"},{"line_number":9,"context_line":"    ``WSGIService`` classes now accept a ``conf_group`` parameter to specify"},{"line_number":10,"context_line":"    which configuration group to use."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ed1f128e_3b5f4c30","line":7,"updated":"2025-09-24 19:55:29.000000000","message":"Perhaps \"This will enable future planned ironic services to use their own...\" instead? Since ironic-networking doesn\u0027t exist and may not exist at next (bugfix) release?","commit_id":"d5e084f2c07a76e7a6a02d7e0561e954fe0e95b3"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"d7c0399497606790a81450c1ba2d8f50ae697373","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added support for multiple JSON-RPC configuration groups. The JSON-RPC"},{"line_number":5,"context_line":"    client and server implementation can now use different configuration"},{"line_number":6,"context_line":"    sections within the same configuration file. This enables services like"},{"line_number":7,"context_line":"    ironic-networking to use their own JSON-RPC configuration section while"},{"line_number":8,"context_line":"    sharing the same underlying implementation. The ``Client`` and"},{"line_number":9,"context_line":"    ``WSGIService`` classes now accept a ``conf_group`` parameter to specify"},{"line_number":10,"context_line":"    which configuration group to use."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"0899d322_68241979","line":7,"in_reply_to":"ed1f128e_3b5f4c30","updated":"2025-09-25 17:34:38.000000000","message":"Thanks.","commit_id":"d5e084f2c07a76e7a6a02d7e0561e954fe0e95b3"}]}
