)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"24848256a9ef568cbe9761f7d2af14ed6fd81267","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7c22aca1_b87dfdcc","updated":"2026-02-23 17:42:40.000000000","message":"on second tought there are some style issue with this  that i raded on patch set 2 \ncanyou either adress them or add comemtns.\n\nyou said you added an explaniantion in teh commit message but i think you lost that at some point","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"66d11e5fbaccccc62be04d3c62fc28169c530a04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e6badd3f_27c8df20","updated":"2026-02-23 16:29:14.000000000","message":"recheck","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c21c0de83d7118f24f14da4f93e4304aab9f134a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e0fec107_6fb8ca6e","in_reply_to":"7c22aca1_b87dfdcc","updated":"2026-02-26 11:27:49.000000000","message":"Done","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"54a210895773c9b06446062825bcfc57d7d89f39","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"83b0308e_e74b8109","updated":"2026-02-26 11:00:21.000000000","message":"recheck unrelated failure","commit_id":"75ae9c188635125faf38a2080317f7b9b22d925b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"99cb17d80ab044215b5476b651db71e8948216ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a23af42e_5c395ba0","updated":"2026-02-26 20:17:31.000000000","message":"lgtm","commit_id":"1b9c9570ec15b6cd361f79fc75e105d14b610aee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b57eb0d449f39fd8517232e6b09f60e7dd442ca9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"fd90a273_ad564c13","updated":"2026-02-26 21:32:03.000000000","message":"This was previously approved and all that\u0027s changed [is the microversion used](https://review.opendev.org/c/openstack/nova/+/958856/7..12/nova/api/validation/__init__.py). Saving Sean/gmaan the effort","commit_id":"24f7995da8dd0ba298dc5487da31d47a254fd59f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"329ffa6944df5e9a565933eda92c10e80c3f8d75","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"a579fceb_4acdba97","updated":"2026-02-27 11:25:38.000000000","message":"recheck","commit_id":"36cd19b168877efcb183e08f6fd5fe4949566e41"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7527cf96b8425a3ccd1e517585b2bd727786d1a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"6775e13a_8927ceaf","updated":"2026-02-27 02:07:22.000000000","message":"recheck lgtm","commit_id":"36cd19b168877efcb183e08f6fd5fe4949566e41"}],"nova/api/validation/__init__.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"59d0fa7f6926c8a717545d20bbee0b2cc02f5fea","unresolved":true,"context_lines":[{"line_number":217,"context_line":"            return func(*args, **kwargs)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if not hasattr(wrapper, \u0027request_body_schemas\u0027):"},{"line_number":220,"context_line":"            setattr(wrapper, \u0027request_body_schemas\u0027, Schemas())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        wrapper.request_body_schemas.add_schema("},{"line_number":223,"context_line":"            request_body_schema, min_version, max_version"}],"source_content_type":"text/x-python","patch_set":2,"id":"83410568_2ebd58b7","line":220,"updated":"2025-12-12 17:11:33.000000000","message":"-1\ni dont know why you are usign setattr here\nyou either need to explain that and justfy it or you shoudl revert this.","commit_id":"d5b3e5fd6ac821e8b5bea78529adb5bc1a6af390"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a18e6429a73884192e9d0b7e57d894f63810d5a4","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            return func(*args, **kwargs)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if not hasattr(wrapper, \u0027request_body_schemas\u0027):"},{"line_number":220,"context_line":"            setattr(wrapper, \u0027request_body_schemas\u0027, Schemas())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        wrapper.request_body_schemas.add_schema("},{"line_number":223,"context_line":"            request_body_schema, min_version, max_version"}],"source_content_type":"text/x-python","patch_set":2,"id":"43c7e1c0_582416d7","line":220,"in_reply_to":"83410568_2ebd58b7","updated":"2026-01-05 10:00:44.000000000","message":"Ack, added the explanation to the commit message.","commit_id":"d5b3e5fd6ac821e8b5bea78529adb5bc1a6af390"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"59d0fa7f6926c8a717545d20bbee0b2cc02f5fea","unresolved":true,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        return wrapper"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    if min_version \u003d\u003d \u00272.101\u0027:"},{"line_number":396,"context_line":"        assert request_query_schema[\u0027additionalProperties\u0027] is False"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    return add_validator"}],"source_content_type":"text/x-python","patch_set":2,"id":"a2f55cf4_3d470016","line":397,"range":{"start_line":395,"start_character":0,"end_line":397,"end_character":1},"updated":"2025-12-12 17:11:33.000000000","message":"this is the only real change. the rest is unrelated.","commit_id":"d5b3e5fd6ac821e8b5bea78529adb5bc1a6af390"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a18e6429a73884192e9d0b7e57d894f63810d5a4","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        return wrapper"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    if min_version \u003d\u003d \u00272.101\u0027:"},{"line_number":396,"context_line":"        assert request_query_schema[\u0027additionalProperties\u0027] is False"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    return add_validator"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba97c358_b71a3cc7","line":397,"range":{"start_line":395,"start_character":0,"end_line":397,"end_character":1},"in_reply_to":"a2f55cf4_3d470016","updated":"2026-01-05 10:00:44.000000000","message":"Acknowledged","commit_id":"d5b3e5fd6ac821e8b5bea78529adb5bc1a6af390"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"24848256a9ef568cbe9761f7d2af14ed6fd81267","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            return func(*args, **kwargs)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not hasattr(wrapper, \u0027request_body_schemas\u0027):"},{"line_number":218,"context_line":"            setattr(wrapper, \u0027request_body_schemas\u0027, Schemas())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        getattr(wrapper, \u0027request_body_schemas\u0027).add_schema("},{"line_number":221,"context_line":"            request_body_schema, min_version, max_version"}],"source_content_type":"text/x-python","patch_set":5,"id":"40417099_18187a97","line":218,"updated":"2026-02-23 17:42:40.000000000","message":"i may have asked this before but do we really need to use setattr here","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4e6eb83ea54e068971a5cfea9cf5117886f96852","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            return func(*args, **kwargs)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not hasattr(wrapper, \u0027request_body_schemas\u0027):"},{"line_number":218,"context_line":"            setattr(wrapper, \u0027request_body_schemas\u0027, Schemas())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        getattr(wrapper, \u0027request_body_schemas\u0027).add_schema("},{"line_number":221,"context_line":"            request_body_schema, min_version, max_version"}],"source_content_type":"text/x-python","patch_set":5,"id":"6a56491e_59eb9456","line":218,"in_reply_to":"12b41630_f90e8385","updated":"2026-02-26 11:27:38.000000000","message":"I\u0027ve added this comment now","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a12886e0bd9b98b3445a36b4122797a1d67107b1","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            return func(*args, **kwargs)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not hasattr(wrapper, \u0027request_body_schemas\u0027):"},{"line_number":218,"context_line":"            setattr(wrapper, \u0027request_body_schemas\u0027, Schemas())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        getattr(wrapper, \u0027request_body_schemas\u0027).add_schema("},{"line_number":221,"context_line":"            request_body_schema, min_version, max_version"}],"source_content_type":"text/x-python","patch_set":5,"id":"da37515d_8489a656","line":218,"in_reply_to":"40417099_18187a97","updated":"2026-02-24 09:27:52.000000000","message":"You do, unfortunately. Type checkers complain otherwise since they see you setting an unknown attribute on the function.","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"29757f7cc3448386ee1ffbd5fc9c4df9c57f64bc","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            return func(*args, **kwargs)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if not hasattr(wrapper, \u0027request_body_schemas\u0027):"},{"line_number":218,"context_line":"            setattr(wrapper, \u0027request_body_schemas\u0027, Schemas())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        getattr(wrapper, \u0027request_body_schemas\u0027).add_schema("},{"line_number":221,"context_line":"            request_body_schema, min_version, max_version"}],"source_content_type":"text/x-python","patch_set":5,"id":"12b41630_f90e8385","line":218,"in_reply_to":"da37515d_8489a656","updated":"2026-02-25 17:06:54.000000000","message":"oh right. i wish you had added a comment to that effect in the code or in the commit\n\nbut i guess this is ok","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"24848256a9ef568cbe9761f7d2af14ed6fd81267","unresolved":true,"context_lines":[{"line_number":394,"context_line":"        api_version_request.APIVersionRequest(min_version) \u003e\u003d"},{"line_number":395,"context_line":"        api_version_request.APIVersionRequest(\u00272.101\u0027)"},{"line_number":396,"context_line":"    ):"},{"line_number":397,"context_line":"        assert request_query_schema[\u0027additionalProperties\u0027] is False"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    return add_validator"}],"source_content_type":"text/x-python","patch_set":5,"id":"a7f85c90_30b676e1","line":397,"updated":"2026-02-23 17:42:40.000000000","message":"we proably should make this a raise rather then an assert","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3e8d405fc03cec7e8e5c4d8ba7ddddaa4eba4df","unresolved":true,"context_lines":[{"line_number":394,"context_line":"        api_version_request.APIVersionRequest(min_version) \u003e\u003d"},{"line_number":395,"context_line":"        api_version_request.APIVersionRequest(\u00272.101\u0027)"},{"line_number":396,"context_line":"    ):"},{"line_number":397,"context_line":"        assert request_query_schema[\u0027additionalProperties\u0027] is False"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    return add_validator"}],"source_content_type":"text/x-python","patch_set":5,"id":"d2730361_243460ea","line":397,"in_reply_to":"a7f85c90_30b676e1","updated":"2026-02-26 11:26:52.000000000","message":"I believe `assert` is fine since the decorator gets executed when importing, meaning this will fail immediately on startup rather than when we attempt to run a decorated method. Thoughts?","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d1ff1124ad50e708c4c673ecd9ce7fb29a89d8b2","unresolved":true,"context_lines":[{"line_number":394,"context_line":"        api_version_request.APIVersionRequest(min_version) \u003e\u003d"},{"line_number":395,"context_line":"        api_version_request.APIVersionRequest(\u00272.101\u0027)"},{"line_number":396,"context_line":"    ):"},{"line_number":397,"context_line":"        assert request_query_schema[\u0027additionalProperties\u0027] is False"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    return add_validator"}],"source_content_type":"text/x-python","patch_set":5,"id":"fcc28454_7ea27713","line":397,"in_reply_to":"d2730361_243460ea","updated":"2026-02-26 11:38:07.000000000","message":"ok\nthe same woudl be ture with a raise of runtime error but i was +2 before because i was ok with it in general.\n\nif we want runtime behvior i prefer to use expiclt raises incause tis an optimised build\n\nthanks for adding the comments i requested.\n\nthis is really just a safty check for use to make sure we dont regress the schema definitiosn so thats fine to be optimised out at runtime.","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"130ef0f3aa2970b0c50f3cfad0fa3a2af7a48fe3","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        api_version_request.APIVersionRequest(min_version) \u003e\u003d"},{"line_number":395,"context_line":"        api_version_request.APIVersionRequest(\u00272.101\u0027)"},{"line_number":396,"context_line":"    ):"},{"line_number":397,"context_line":"        assert request_query_schema[\u0027additionalProperties\u0027] is False"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    return add_validator"}],"source_content_type":"text/x-python","patch_set":5,"id":"86df725b_f6f65102","line":397,"in_reply_to":"fcc28454_7ea27713","updated":"2026-02-26 15:56:18.000000000","message":"Acknowledged","commit_id":"cf9d675c3fdb7b1cd38a887640f3c99648f1e877"}]}
