)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c418d074b552b6eea3d04ca044257f7f3562a019","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"20822122_1cc25299","updated":"2026-09-15 09:35:12.000000000","message":"Idea looks fine. Two small nits inline though","commit_id":"bdd13d481dec02911a3ac80b9c0807e7711e6e08"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"c042b015038a478cc125fa562394f23cd7dbfa8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b6c6a261_2bd5f802","updated":"2026-09-15 09:43:55.000000000","message":"Thanks for the review!","commit_id":"250754a7e08e8759110e1750a510d930f2db8fbe"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"184bf6ade3733a117566501f500ff4e9212cdb6a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"63105157_dfa3e2eb","updated":"2026-09-15 21:30:15.000000000","message":"Just fixed the pep8 issues. This looks good to me now. Thanks for the quick turnaround!","commit_id":"43561c5f2285cb1d1c8bbcc8e433f82e616a6995"},{"author":{"_account_id":7414,"name":"David Wilde","email":"dwilde@redhat.com","username":"d34dh0r53"},"change_message_id":"26f103558af1003bfea930063f58d024787ca18b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fa719b08_82d2c9ed","updated":"2026-09-16 17:18:45.000000000","message":"Just need the PEP8 errors fixed","commit_id":"43561c5f2285cb1d1c8bbcc8e433f82e616a6995"}],"keystoneauth1/extras/_saml2/v3/saml2.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c418d074b552b6eea3d04ca044257f7f3562a019","unresolved":true,"context_lines":[{"line_number":266,"context_line":"            requests.codes.other,"},{"line_number":267,"context_line":"        ):"},{"line_number":268,"context_line":"            location \u003d final_resp.headers[\u0027location\u0027]"},{"line_number":269,"context_line":"            _assert_same_netloc(location, sp_response.request.url)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            # Consume content and release the original connection"},{"line_number":272,"context_line":"            # to allow our new request to reuse the same one."}],"source_content_type":"text/x-python","patch_set":1,"id":"45fe5fdb_72cf431d","line":269,"updated":"2026-09-15 09:35:12.000000000","message":"This is the only caller of this function. Can you inline it here?","commit_id":"67ac4f550460855451a6f2df21fda68b23b5b522"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"c042b015038a478cc125fa562394f23cd7dbfa8a","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            requests.codes.other,"},{"line_number":267,"context_line":"        ):"},{"line_number":268,"context_line":"            location \u003d final_resp.headers[\u0027location\u0027]"},{"line_number":269,"context_line":"            _assert_same_netloc(location, sp_response.request.url)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            # Consume content and release the original connection"},{"line_number":272,"context_line":"            # to allow our new request to reuse the same one."}],"source_content_type":"text/x-python","patch_set":1,"id":"802fe9d4_03ea2896","line":269,"in_reply_to":"45fe5fdb_72cf431d","updated":"2026-09-15 09:43:55.000000000","message":"Done","commit_id":"67ac4f550460855451a6f2df21fda68b23b5b522"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c418d074b552b6eea3d04ca044257f7f3562a019","unresolved":true,"context_lines":[{"line_number":220,"context_line":"        )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        if sp_consumer_url !\u003d idp_consumer_url:"},{"line_number":223,"context_line":"            # send fault message to the SP, discard the response"},{"line_number":224,"context_line":"            if _same_netloc(sp_consumer_url, sp_response.request.url):"},{"line_number":225,"context_line":"                send("},{"line_number":226,"context_line":"                    \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"f336a4b7_4d3e6654","line":223,"updated":"2026-09-15 09:35:12.000000000","message":"Can you update this comment with context explaining why sending the fault message is conditional","commit_id":"bdd13d481dec02911a3ac80b9c0807e7711e6e08"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"c042b015038a478cc125fa562394f23cd7dbfa8a","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        if sp_consumer_url !\u003d idp_consumer_url:"},{"line_number":223,"context_line":"            # send fault message to the SP, discard the response"},{"line_number":224,"context_line":"            if _same_netloc(sp_consumer_url, sp_response.request.url):"},{"line_number":225,"context_line":"                send("},{"line_number":226,"context_line":"                    \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"2e7d6e23_bbb6a27a","line":223,"in_reply_to":"f336a4b7_4d3e6654","updated":"2026-09-15 09:43:55.000000000","message":"Done","commit_id":"bdd13d481dec02911a3ac80b9c0807e7711e6e08"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7907818ad34731adee62a2ec3c64e49a75ea738c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import abc"},{"line_number":14,"context_line":"import urllib.parse"},{"line_number":15,"context_line":"from collections.abc import Mapping"},{"line_number":16,"context_line":"from typing import Any, TypeVar"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"4f74df1d_e0bd0e0d","line":15,"updated":"2026-09-15 11:11:27.000000000","message":"pep8: H306: imports not in alphabetical order (urllib.parse, collections.abc.mapping)","commit_id":"250754a7e08e8759110e1750a510d930f2db8fbe"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"511ca9308cb2f1034befc9158e3b1e890ae04253","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            # Only do that when the URL shares a host with our federation"},{"line_number":215,"context_line":"            # request, otherwise we could POST to an arbitrary host named in"},{"line_number":216,"context_line":"            # the SP response before raising ConsumerMismatch."},{"line_number":217,"context_line":"            if _same_netloc(sp_consumer_url, sp_response.request.url):"},{"line_number":218,"context_line":"                send("},{"line_number":219,"context_line":"                    \u0027POST\u0027,"},{"line_number":220,"context_line":"                    sp_consumer_url,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f209195_a4e15ee3","line":217,"updated":"2026-09-16 18:56:17.000000000","message":"pep8: error: Argument 2 to \"_same_netloc\" has incompatible type \"str | None\"; expected \"str\"  [arg-type]","commit_id":"43561c5f2285cb1d1c8bbcc8e433f82e616a6995"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d0146337aa225495bf6f955506ac361f8d8da79d","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            # Only do that when the URL shares a host with our federation"},{"line_number":215,"context_line":"            # request, otherwise we could POST to an arbitrary host named in"},{"line_number":216,"context_line":"            # the SP response before raising ConsumerMismatch."},{"line_number":217,"context_line":"            if _same_netloc(sp_consumer_url, sp_response.request.url):"},{"line_number":218,"context_line":"                send("},{"line_number":219,"context_line":"                    \u0027POST\u0027,"},{"line_number":220,"context_line":"                    sp_consumer_url,"}],"source_content_type":"text/x-python","patch_set":4,"id":"8cc0e314_d78c8fde","line":217,"updated":"2026-09-15 22:49:12.000000000","message":"pep8: error: Argument 2 to \"_same_netloc\" has incompatible type \"str | None\"; expected \"str\"  [arg-type]","commit_id":"43561c5f2285cb1d1c8bbcc8e433f82e616a6995"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d0146337aa225495bf6f955506ac361f8d8da79d","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            requests.codes.other,"},{"line_number":260,"context_line":"        ):"},{"line_number":261,"context_line":"            location \u003d final_resp.headers[\u0027location\u0027]"},{"line_number":262,"context_line":"            if not _same_netloc(location, sp_response.request.url):"},{"line_number":263,"context_line":"                msg \u003d ("},{"line_number":264,"context_line":"                    \u0027SAML2: URL %(url)s is not on the same host as \u0027"},{"line_number":265,"context_line":"                    \u0027%(reference)s\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"2b66b1f5_8f805c9f","line":262,"updated":"2026-09-15 22:49:12.000000000","message":"pep8: error: Argument 2 to \"_same_netloc\" has incompatible type \"str | None\"; expected \"str\"  [arg-type]","commit_id":"43561c5f2285cb1d1c8bbcc8e433f82e616a6995"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"511ca9308cb2f1034befc9158e3b1e890ae04253","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            requests.codes.other,"},{"line_number":260,"context_line":"        ):"},{"line_number":261,"context_line":"            location \u003d final_resp.headers[\u0027location\u0027]"},{"line_number":262,"context_line":"            if not _same_netloc(location, sp_response.request.url):"},{"line_number":263,"context_line":"                msg \u003d ("},{"line_number":264,"context_line":"                    \u0027SAML2: URL %(url)s is not on the same host as \u0027"},{"line_number":265,"context_line":"                    \u0027%(reference)s\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"c4cc3b8c_9d36cdcf","line":262,"updated":"2026-09-16 18:56:17.000000000","message":"pep8: error: Argument 2 to \"_same_netloc\" has incompatible type \"str | None\"; expected \"str\"  [arg-type]","commit_id":"43561c5f2285cb1d1c8bbcc8e433f82e616a6995"}]}
