)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d82167dac59d7aebe7c0921ad241ddef0db1c89b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cfcc47e7_d51c1a52","updated":"2024-07-04 13:23:01.000000000","message":"pep8 failure is legit","commit_id":"e4d57d1399485909385c0dd793a45fececa72109"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"30b99c651e1d9bc3a99add467c99a03e34bf52d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"41a14881_68f8b27b","updated":"2024-07-09 15:40:21.000000000","message":"I\u0027ve only noticed now, you probably need to add some tests for it.","commit_id":"f59a84dd57adb28a9134ee40293359957f28cb1c"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"39b2b8f9ae145d1bbb5482f83f907a00ed21d9f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"81b80757_3570930d","updated":"2024-07-10 13:33:12.000000000","message":"Testing not fully working (verify_get)","commit_id":"ba087bb3e6c631713a0a4a9df4920073d7c39e3d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3f3ff6a42f65aabc6095e653ebc659382ce26e0c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e921bcda_57c3c1e5","updated":"2026-10-30 00:16:46.000000000","message":"I\u0027ve rebased and updated for the review comments to get this API in.","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"c17fcd44_477d04d0","updated":"2026-10-30 10:53:47.000000000","message":"Just a couple of TODOs","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"9ad442ab_920c0d14","updated":"2026-11-02 10:06:13.000000000","message":"recheck","commit_id":"64ac50d362900ae6197146f30a951f84cd106905"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0be2381835995702f5a002d3ab0ea5a9e4d369e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"2112b26f_0032a3af","updated":"2026-11-09 14:27:07.000000000","message":"recheck tox issues?","commit_id":"64ac50d362900ae6197146f30a951f84cd106905"}],"openstack/baremetal/v1/_common.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d4dcac5c1976c37c4e6a85b3b43ae5b447fb12e","unresolved":true,"context_lines":[{"line_number":88,"context_line":"CHANGE_BOOT_MODE_VERSION \u003d \u00271.76\u0027"},{"line_number":89,"context_line":"\"\"\"API version in which boot_mode and secure_boot states can be changed\"\"\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"HIST_VERSION \u003d \u00271.78\u0027"},{"line_number":92,"context_line":"\"\"\"API version in which history operations were introduced\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bb006e76_93a1e4ce","line":91,"updated":"2024-07-01 16:06:21.000000000","message":"Please full words: HISTORY_VERSION","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"cd22fc8d82ce98d590b405d6bb0c5ae4530076ff","unresolved":false,"context_lines":[{"line_number":88,"context_line":"CHANGE_BOOT_MODE_VERSION \u003d \u00271.76\u0027"},{"line_number":89,"context_line":"\"\"\"API version in which boot_mode and secure_boot states can be changed\"\"\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"HIST_VERSION \u003d \u00271.78\u0027"},{"line_number":92,"context_line":"\"\"\"API version in which history operations were introduced\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"37b01ff7_2b124101","line":91,"in_reply_to":"bb006e76_93a1e4ce","updated":"2024-07-03 13:43:23.000000000","message":"fixed","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"8b33dde519e215907dfdccbf17e6a1418fcef548","unresolved":true,"context_lines":[{"line_number":89,"context_line":"\"\"\"API version in which boot_mode and secure_boot states can be changed\"\"\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"HISTORY_VERSION \u003d \u00271.78\u0027"},{"line_number":92,"context_line":"\"\"\"API version in which history operations were introduced\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"FIRMWARE_VERSION \u003d \u00271.86\u0027"},{"line_number":95,"context_line":"\"\"\"API version in which firmware components of a node can be accessed\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"4c2d0289_ad4b32f4","line":92,"updated":"2024-09-09 15:12:44.000000000","message":"\u0027API version in which node history can be retrieved\u0027 is a little clearer","commit_id":"ba087bb3e6c631713a0a4a9df4920073d7c39e3d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3f3ff6a42f65aabc6095e653ebc659382ce26e0c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"\"\"\"API version in which boot_mode and secure_boot states can be changed\"\"\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"HISTORY_VERSION \u003d \u00271.78\u0027"},{"line_number":92,"context_line":"\"\"\"API version in which history operations were introduced\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"FIRMWARE_VERSION \u003d \u00271.86\u0027"},{"line_number":95,"context_line":"\"\"\"API version in which firmware components of a node can be accessed\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"f6e68c4c_586391a5","line":92,"in_reply_to":"4c2d0289_ad4b32f4","updated":"2026-10-30 00:16:46.000000000","message":"Done","commit_id":"ba087bb3e6c631713a0a4a9df4920073d7c39e3d"}],"openstack/baremetal/v1/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"22a5a46c382d5b023501c20279f92e44c15cc3d6","unresolved":true,"context_lines":[{"line_number":1691,"context_line":"        return res.list_history(self, detail, marker, limit)"},{"line_number":1692,"context_line":""},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":1,"id":"e24fa2e2_105acfd5","line":1694,"updated":"2024-06-24 10:59:51.000000000","message":"This is going to cause pep8 issues. Please either run:\n\n```\ntox -e pep8\n```\n\nor install `pre-commit` (it should be available as a distro package or you can install with `pip install -u pre-commit` or `pipx install pre-commit`) and then run:\n\n```\npre-commit install\npre-commit run -a\n```\n\n(you should only have to run the second step once: it\u0027ll auto-run on commit from them on)","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"d89211cd17e703071444ad354ea0fdbdf37b03f3","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"        return res.list_history(self, detail, marker, limit)"},{"line_number":1692,"context_line":""},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":1,"id":"0b80f875_30472543","line":1694,"in_reply_to":"e24fa2e2_105acfd5","updated":"2024-06-24 11:15:49.000000000","message":"fixed","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"440635e365961e90700854094a4a56a437e43c61","unresolved":true,"context_lines":[{"line_number":1681,"context_line":"            _conductor.Conductor, conductor, fields\u003dfields"},{"line_number":1682,"context_line":"        )"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":"    def list_node_history(self, node_id, **query):"},{"line_number":1685,"context_line":"        \"\"\"Retrieve a generator of histories for a node"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":"        :param node_id: The ID or UUID of the node."}],"source_content_type":"text/x-python","patch_set":6,"id":"90bc3c1f_a72d69f9","line":1684,"updated":"2024-07-10 13:29:57.000000000","message":"1) Let us add \"details\" explicitly like it\u0027s done for conductors.\n\n2) OpenStackSDK avoids using list_ prefix, so it should be something like history_events (for consistency with get_history_event).","commit_id":"f59a84dd57adb28a9134ee40293359957f28cb1c"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"92e14c884be285b487385500bc86516b8b6ac1b3","unresolved":false,"context_lines":[{"line_number":1681,"context_line":"            _conductor.Conductor, conductor, fields\u003dfields"},{"line_number":1682,"context_line":"        )"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":"    def list_node_history(self, node_id, **query):"},{"line_number":1685,"context_line":"        \"\"\"Retrieve a generator of histories for a node"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":"        :param node_id: The ID or UUID of the node."}],"source_content_type":"text/x-python","patch_set":6,"id":"ef6a537c_242e0025","line":1684,"in_reply_to":"90bc3c1f_a72d69f9","updated":"2024-07-15 12:45:41.000000000","message":"Done","commit_id":"f59a84dd57adb28a9134ee40293359957f28cb1c"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e1c4e92d112d1eed27ee2f497cb790eaeb621702","unresolved":true,"context_lines":[{"line_number":1691,"context_line":"        \"\"\""},{"line_number":1692,"context_line":"        return _history.History.list(self, node_id\u003dnode_id, **query)"},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"    def get_history_event(self, node_id, history_id):"},{"line_number":1695,"context_line":"        \"\"\"Get a specific history event"},{"line_number":1696,"context_line":""},{"line_number":1697,"context_line":"        :param node_id: The ID or UUID of the node."}],"source_content_type":"text/x-python","patch_set":6,"id":"97533619_285c5363","line":1694,"updated":"2024-07-09 17:24:51.000000000","message":"You need to add some test in https://github.com/openstack/openstacksdk/blob/master/openstack/tests/unit/baremetal/v1/test_proxy.py","commit_id":"f59a84dd57adb28a9134ee40293359957f28cb1c"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"92e14c884be285b487385500bc86516b8b6ac1b3","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"        \"\"\""},{"line_number":1692,"context_line":"        return _history.History.list(self, node_id\u003dnode_id, **query)"},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"    def get_history_event(self, node_id, history_id):"},{"line_number":1695,"context_line":"        \"\"\"Get a specific history event"},{"line_number":1696,"context_line":""},{"line_number":1697,"context_line":"        :param node_id: The ID or UUID of the node."}],"source_content_type":"text/x-python","patch_set":6,"id":"26a1c044_b6b94963","line":1694,"in_reply_to":"97533619_285c5363","updated":"2024-07-15 12:45:41.000000000","message":"Done","commit_id":"f59a84dd57adb28a9134ee40293359957f28cb1c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":2588,"context_line":""},{"line_number":2589,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d Node History \u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2590,"context_line":""},{"line_number":2591,"context_line":"    def history_events(self, node_id, details\u003dFalse, **query):"},{"line_number":2592,"context_line":"        \"\"\"Retrieve a generator of histories for a node"},{"line_number":2593,"context_line":""},{"line_number":2594,"context_line":"        :param node_id: The ID or UUID of the node."}],"source_content_type":"text/x-python","patch_set":10,"id":"cba9e6f7_187cdc40","line":2591,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Function is missing a type annotation  [no-untyped-def]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":2601,"context_line":"        res \u003d self._get_resource(_node.Node, node_id)"},{"line_number":2602,"context_line":"        return _history.History.list(self, node_id\u003dres.id, **query)"},{"line_number":2603,"context_line":""},{"line_number":2604,"context_line":"    def get_history_event(self, node_id, history_id):"},{"line_number":2605,"context_line":"        \"\"\"Get a specific history event"},{"line_number":2606,"context_line":""},{"line_number":2607,"context_line":"        :param node_id: The ID or UUID of the node."}],"source_content_type":"text/x-python","patch_set":10,"id":"702491ae_4851034c","line":2604,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Function is missing a type annotation  [no-untyped-def]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":true,"context_lines":[{"line_number":2590,"context_line":""},{"line_number":2591,"context_line":"    def history_events("},{"line_number":2592,"context_line":"        self,"},{"line_number":2593,"context_line":"        node_id: str | _node.Node,"},{"line_number":2594,"context_line":"        details: bool \u003d False,"},{"line_number":2595,"context_line":"        **query: Any,"},{"line_number":2596,"context_line":"    ) -\u003e Generator[_history.History, None, None]:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5c65b28d_bc8d7432","line":2593,"updated":"2026-10-30 10:53:47.000000000","message":"this can be a `Node` object so `node_id` is misleading\n\n```suggestion\n        node: str | _node.Node,\n```","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[{"line_number":2590,"context_line":""},{"line_number":2591,"context_line":"    def history_events("},{"line_number":2592,"context_line":"        self,"},{"line_number":2593,"context_line":"        node_id: str | _node.Node,"},{"line_number":2594,"context_line":"        details: bool \u003d False,"},{"line_number":2595,"context_line":"        **query: Any,"},{"line_number":2596,"context_line":"    ) -\u003e Generator[_history.History, None, None]:"}],"source_content_type":"text/x-python","patch_set":11,"id":"a5acb23a_2957ef6f","line":2593,"in_reply_to":"5c65b28d_bc8d7432","updated":"2026-11-02 10:06:13.000000000","message":"Done","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":true,"context_lines":[{"line_number":2591,"context_line":"    def history_events("},{"line_number":2592,"context_line":"        self,"},{"line_number":2593,"context_line":"        node_id: str | _node.Node,"},{"line_number":2594,"context_line":"        details: bool \u003d False,"},{"line_number":2595,"context_line":"        **query: Any,"},{"line_number":2596,"context_line":"    ) -\u003e Generator[_history.History, None, None]:"},{"line_number":2597,"context_line":"        \"\"\"Retrieve a generator of histories for a node"}],"source_content_type":"text/x-python","patch_set":11,"id":"1d409233_1b6be0d0","line":2594,"updated":"2026-10-30 10:53:47.000000000","message":"I\u0027m aware we\u0027re very inconsistent here, but could we make this a kwarg-only?\n\n```suggestion\n        *,\n        details: bool \u003d False,\n```\n\nThis lets us change ordering down the line, and I think code that calls this explicitly will be easier to read than an arbitrary bool?","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"e35044ab4a62c5b2d4a833e84bf9154b2ae304e1","unresolved":true,"context_lines":[{"line_number":2591,"context_line":"    def history_events("},{"line_number":2592,"context_line":"        self,"},{"line_number":2593,"context_line":"        node_id: str | _node.Node,"},{"line_number":2594,"context_line":"        details: bool \u003d False,"},{"line_number":2595,"context_line":"        **query: Any,"},{"line_number":2596,"context_line":"    ) -\u003e Generator[_history.History, None, None]:"},{"line_number":2597,"context_line":"        \"\"\"Retrieve a generator of histories for a node"}],"source_content_type":"text/x-python","patch_set":11,"id":"2ca8cb40_dc62c2d1","line":2594,"in_reply_to":"1d409233_1b6be0d0","updated":"2026-10-30 22:22:19.000000000","message":"Still need to fix this.","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[{"line_number":2591,"context_line":"    def history_events("},{"line_number":2592,"context_line":"        self,"},{"line_number":2593,"context_line":"        node_id: str | _node.Node,"},{"line_number":2594,"context_line":"        details: bool \u003d False,"},{"line_number":2595,"context_line":"        **query: Any,"},{"line_number":2596,"context_line":"    ) -\u003e Generator[_history.History, None, None]:"},{"line_number":2597,"context_line":"        \"\"\"Retrieve a generator of histories for a node"}],"source_content_type":"text/x-python","patch_set":11,"id":"b1a31bd8_95fe2980","line":2594,"in_reply_to":"2ca8cb40_dc62c2d1","updated":"2026-11-02 10:06:13.000000000","message":"Done","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":true,"context_lines":[{"line_number":2596,"context_line":"    ) -\u003e Generator[_history.History, None, None]:"},{"line_number":2597,"context_line":"        \"\"\"Retrieve a generator of histories for a node"},{"line_number":2598,"context_line":""},{"line_number":2599,"context_line":"        :param node_id: The ID or UUID of the node."},{"line_number":2600,"context_line":"        :param dict query: Optional query parameters to be sent to limit the"},{"line_number":2601,"context_line":"                           resources being returned."},{"line_number":2602,"context_line":"        :returns: A generator of history events."},{"line_number":2603,"context_line":"        \"\"\""},{"line_number":2604,"context_line":"        if details:"}],"source_content_type":"text/x-python","patch_set":11,"id":"bc4df430_07578241","line":2601,"range":{"start_line":2599,"start_character":51,"end_line":2601,"end_character":52},"updated":"2026-10-30 10:53:47.000000000","message":"We don\u0027t need to duplicate type information in the docstrings.\n\n```suggestion\n        :param node_id: The ID or UUID of the node.\n        :param query: Optional query parameters to be sent to limit the\n             resources being returned.\n```","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[{"line_number":2596,"context_line":"    ) -\u003e Generator[_history.History, None, None]:"},{"line_number":2597,"context_line":"        \"\"\"Retrieve a generator of histories for a node"},{"line_number":2598,"context_line":""},{"line_number":2599,"context_line":"        :param node_id: The ID or UUID of the node."},{"line_number":2600,"context_line":"        :param dict query: Optional query parameters to be sent to limit the"},{"line_number":2601,"context_line":"                           resources being returned."},{"line_number":2602,"context_line":"        :returns: A generator of history events."},{"line_number":2603,"context_line":"        \"\"\""},{"line_number":2604,"context_line":"        if details:"}],"source_content_type":"text/x-python","patch_set":11,"id":"e8a542f8_7e1ab1fc","line":2601,"range":{"start_line":2599,"start_character":51,"end_line":2601,"end_character":52},"in_reply_to":"bc4df430_07578241","updated":"2026-11-02 10:06:13.000000000","message":"Done","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":true,"context_lines":[{"line_number":2607,"context_line":"        return _history.History.list(self, node_id\u003dres.id, **query)"},{"line_number":2608,"context_line":""},{"line_number":2609,"context_line":"    def get_history_event("},{"line_number":2610,"context_line":"        self,"},{"line_number":2611,"context_line":"        node_id: str | _node.Node,"},{"line_number":2612,"context_line":"        history_id: str | _history.History,"},{"line_number":2613,"context_line":"    ) -\u003e _history.History:"},{"line_number":2614,"context_line":"        \"\"\"Get a specific history event"},{"line_number":2615,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"92a2f55d_0155662b","line":2612,"range":{"start_line":2610,"start_character":13,"end_line":2612,"end_character":43},"updated":"2026-10-30 10:53:47.000000000","message":"As above\n\n```suggestion\n        self,\n        node: str | _node.Node,\n        history: str | _history.History,\n```","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[{"line_number":2607,"context_line":"        return _history.History.list(self, node_id\u003dres.id, **query)"},{"line_number":2608,"context_line":""},{"line_number":2609,"context_line":"    def get_history_event("},{"line_number":2610,"context_line":"        self,"},{"line_number":2611,"context_line":"        node_id: str | _node.Node,"},{"line_number":2612,"context_line":"        history_id: str | _history.History,"},{"line_number":2613,"context_line":"    ) -\u003e _history.History:"},{"line_number":2614,"context_line":"        \"\"\"Get a specific history event"},{"line_number":2615,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"8832e7cb_1de831d2","line":2612,"range":{"start_line":2610,"start_character":13,"end_line":2612,"end_character":43},"in_reply_to":"92a2f55d_0155662b","updated":"2026-11-02 10:06:13.000000000","message":"Done","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"}],"openstack/baremetal/v1/history.py":[{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"e1c4e92d112d1eed27ee2f497cb790eaeb621702","unresolved":true,"context_lines":[{"line_number":9,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from openstack.baremetal.v1 import _common"},{"line_number":14,"context_line":"from openstack import resource"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"997a33bc_0f04ed18","line":12,"updated":"2024-07-09 17:24:51.000000000","message":"You can create something similar to the port_group https://github.com/openstack/openstacksdk/blob/master/openstack/tests/unit/baremetal/v1/test_port_group.py \nYou can use the info I\u0027ve provided in the doc from the curl\nhttps://paste.opendev.org/show/bInLYZmjavhQV5OtnVU2/","commit_id":"f59a84dd57adb28a9134ee40293359957f28cb1c"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"92e14c884be285b487385500bc86516b8b6ac1b3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from openstack.baremetal.v1 import _common"},{"line_number":14,"context_line":"from openstack import resource"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d0817d86_f65252a1","line":12,"in_reply_to":"997a33bc_0f04ed18","updated":"2024-07-15 12:45:41.000000000","message":"Done","commit_id":"f59a84dd57adb28a9134ee40293359957f28cb1c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    # capabilities"},{"line_number":22,"context_line":"    allow_fetch \u003d True"},{"line_number":23,"context_line":"    allow_list \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027detail\u0027, \u0027marker\u0027, \u0027limit\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # NOTE: 1.78 is the API version in which node history can be retrieved"},{"line_number":28,"context_line":"    _max_microversion \u003d \u00271.78\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"a5e9cab7_bffff48b","line":25,"range":{"start_line":24,"start_character":1,"end_line":25,"end_character":74},"updated":"2026-10-30 10:53:47.000000000","message":"`limit` and `marker` are already present unless you pass `include_pagination_defaults\u003dFalse` \n\n```suggestion\n\n    _query_mapping \u003d resource.QueryParameters(\u0027detail\u0027)\n```\n\nI also assume this doesn\u0027t take a `fields` parameter?","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    # capabilities"},{"line_number":22,"context_line":"    allow_fetch \u003d True"},{"line_number":23,"context_line":"    allow_list \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    _query_mapping \u003d resource.QueryParameters(\u0027detail\u0027, \u0027marker\u0027, \u0027limit\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # NOTE: 1.78 is the API version in which node history can be retrieved"},{"line_number":28,"context_line":"    _max_microversion \u003d \u00271.78\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"10fb382d_b8dc59a0","line":25,"range":{"start_line":24,"start_character":1,"end_line":25,"end_character":74},"in_reply_to":"a5e9cab7_bffff48b","updated":"2026-11-02 10:06:13.000000000","message":"Done","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"}],"openstack/baremetal/v1/node.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"22a5a46c382d5b023501c20279f92e44c15cc3d6","unresolved":true,"context_lines":[{"line_number":1449,"context_line":"                session, patch\u003dpatch, retry_on_conflict\u003dretry_on_conflict"},{"line_number":1450,"context_line":"            )"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"    def list_history(self, session, detail\u003dNone, marker\u003dNone, limit\u003dNone):"},{"line_number":1453,"context_line":"        \"\"\""},{"line_number":1454,"context_line":"        Retrieves the history of events for a specific node."},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0dd88dec_825b5815","line":1452,"updated":"2024-06-24 10:59:51.000000000","message":"Looking at the [API docs](https://docs.openstack.org/api-ref/baremetal/#list-history-entries-for-a-node), this looks like it could be a full fledged `History` resource, rather than an mere method on the node object. Any reason not to implement a `History` object?","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d4dcac5c1976c37c4e6a85b3b43ae5b447fb12e","unresolved":true,"context_lines":[{"line_number":1449,"context_line":"                session, patch\u003dpatch, retry_on_conflict\u003dretry_on_conflict"},{"line_number":1450,"context_line":"            )"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"    def list_history(self, session, detail\u003dNone, marker\u003dNone, limit\u003dNone):"},{"line_number":1453,"context_line":"        \"\"\""},{"line_number":1454,"context_line":"        Retrieves the history of events for a specific node."},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"796da07a_19354f22","line":1452,"in_reply_to":"013dc761_62f1ae8f","updated":"2024-07-01 16:06:21.000000000","message":"I tend to concur: we could use separate resources for these.","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"d89211cd17e703071444ad354ea0fdbdf37b03f3","unresolved":true,"context_lines":[{"line_number":1449,"context_line":"                session, patch\u003dpatch, retry_on_conflict\u003dretry_on_conflict"},{"line_number":1450,"context_line":"            )"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"    def list_history(self, session, detail\u003dNone, marker\u003dNone, limit\u003dNone):"},{"line_number":1453,"context_line":"        \"\"\""},{"line_number":1454,"context_line":"        Retrieves the history of events for a specific node."},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"68bf12d6_73045065","line":1452,"in_reply_to":"0dd88dec_825b5815","updated":"2024-06-24 11:15:49.000000000","message":"The history is based on the node resource, so I didn\u0027t see the need in implementing it that way","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"f291900c9694db0481690704074b5212af2fe985","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"                session, patch\u003dpatch, retry_on_conflict\u003dretry_on_conflict"},{"line_number":1450,"context_line":"            )"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"    def list_history(self, session, detail\u003dNone, marker\u003dNone, limit\u003dNone):"},{"line_number":1453,"context_line":"        \"\"\""},{"line_number":1454,"context_line":"        Retrieves the history of events for a specific node."},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8cfe2b05_1ece9447","line":1452,"in_reply_to":"564af3de_21aa2bdd","updated":"2024-07-05 18:49:19.000000000","message":"Done","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1d0738ee99402056e0b2c38e5cad0d6b775205e","unresolved":true,"context_lines":[{"line_number":1449,"context_line":"                session, patch\u003dpatch, retry_on_conflict\u003dretry_on_conflict"},{"line_number":1450,"context_line":"            )"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"    def list_history(self, session, detail\u003dNone, marker\u003dNone, limit\u003dNone):"},{"line_number":1453,"context_line":"        \"\"\""},{"line_number":1454,"context_line":"        Retrieves the history of events for a specific node."},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"013dc761_62f1ae8f","line":1452,"in_reply_to":"68bf12d6_73045065","updated":"2024-06-25 11:21:47.000000000","message":"Yeah, that\u0027s not an issue. For example, see [server diagnostics](https://github.com/openstack/openstacksdk/blob/master/openstack/compute/v2/server_diagnostics.py) or [server interfaces](https://github.com/openstack/openstacksdk/blob/master/openstack/compute/v2/server_interface.py), both for the compute service. The trick is to specify a `Path`-type resource field to account for the parent resource\u0027s ID.","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"cd22fc8d82ce98d590b405d6bb0c5ae4530076ff","unresolved":true,"context_lines":[{"line_number":1449,"context_line":"                session, patch\u003dpatch, retry_on_conflict\u003dretry_on_conflict"},{"line_number":1450,"context_line":"            )"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"    def list_history(self, session, detail\u003dNone, marker\u003dNone, limit\u003dNone):"},{"line_number":1453,"context_line":"        \"\"\""},{"line_number":1454,"context_line":"        Retrieves the history of events for a specific node."},{"line_number":1455,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"564af3de_21aa2bdd","line":1452,"in_reply_to":"796da07a_19354f22","updated":"2024-07-03 13:43:23.000000000","message":"done","commit_id":"eab15af4493f6693661ca71bb9663d0d5d75247f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d4dcac5c1976c37c4e6a85b3b43ae5b447fb12e","unresolved":true,"context_lines":[{"line_number":1471,"context_line":"            session,"},{"line_number":1472,"context_line":"            \u0027fetch\u0027,"},{"line_number":1473,"context_line":"            _common.HIST_VERSION,"},{"line_number":1474,"context_line":"            error_message\u003d(\"Cannot use History attachment API\"),"},{"line_number":1475,"context_line":"        )"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"        request \u003d self._prepare_request(requires_id\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"93fa3fc5_8dface7c","line":1474,"updated":"2024-07-01 16:06:21.000000000","message":"\"attachment\" is a copy-paste?","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"b56b09b759f36406cee0366ba4fb407202c6d67e","unresolved":false,"context_lines":[{"line_number":1471,"context_line":"            session,"},{"line_number":1472,"context_line":"            \u0027fetch\u0027,"},{"line_number":1473,"context_line":"            _common.HIST_VERSION,"},{"line_number":1474,"context_line":"            error_message\u003d(\"Cannot use History attachment API\"),"},{"line_number":1475,"context_line":"        )"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"        request \u003d self._prepare_request(requires_id\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c4441d43_6aaea92c","line":1474,"in_reply_to":"93fa3fc5_8dface7c","updated":"2024-07-03 14:04:53.000000000","message":"Done","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d4dcac5c1976c37c4e6a85b3b43ae5b447fb12e","unresolved":true,"context_lines":[{"line_number":1489,"context_line":"                f\"?limit\u003d{limit}\""},{"line_number":1490,"context_line":"                if not detail and not marker"},{"line_number":1491,"context_line":"                else f\"\u0026limit\u003d{limit}\""},{"line_number":1492,"context_line":"            )"},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"        response \u003d session.get("},{"line_number":1495,"context_line":"            request.url, headers\u003drequest.headers, microversion\u003dversion"}],"source_content_type":"text/x-python","patch_set":2,"id":"f2d40d31_8b6b1c58","line":1492,"updated":"2024-07-01 16:06:21.000000000","message":"These query manipulations are usually done inside of _prepare_request, not manually","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"b56b09b759f36406cee0366ba4fb407202c6d67e","unresolved":false,"context_lines":[{"line_number":1489,"context_line":"                f\"?limit\u003d{limit}\""},{"line_number":1490,"context_line":"                if not detail and not marker"},{"line_number":1491,"context_line":"                else f\"\u0026limit\u003d{limit}\""},{"line_number":1492,"context_line":"            )"},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"        response \u003d session.get("},{"line_number":1495,"context_line":"            request.url, headers\u003drequest.headers, microversion\u003dversion"}],"source_content_type":"text/x-python","patch_set":2,"id":"e360d36b_04168f88","line":1492,"in_reply_to":"f2d40d31_8b6b1c58","updated":"2024-07-03 14:04:53.000000000","message":"Done","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d4dcac5c1976c37c4e6a85b3b43ae5b447fb12e","unresolved":true,"context_lines":[{"line_number":1520,"context_line":"            session,"},{"line_number":1521,"context_line":"            \u0027fetch\u0027,"},{"line_number":1522,"context_line":"            _common.HIST_VERSION,"},{"line_number":1523,"context_line":"            error_message\u003d(\"Cannot use History attachment API\"),"},{"line_number":1524,"context_line":"        )"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"        request \u003d self._prepare_request(requires_id\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8f8165e4_64fd0771","line":1523,"updated":"2024-07-01 16:06:21.000000000","message":"same","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"b56b09b759f36406cee0366ba4fb407202c6d67e","unresolved":false,"context_lines":[{"line_number":1520,"context_line":"            session,"},{"line_number":1521,"context_line":"            \u0027fetch\u0027,"},{"line_number":1522,"context_line":"            _common.HIST_VERSION,"},{"line_number":1523,"context_line":"            error_message\u003d(\"Cannot use History attachment API\"),"},{"line_number":1524,"context_line":"        )"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"        request \u003d self._prepare_request(requires_id\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ae33656_ed15fdec","line":1523,"in_reply_to":"8f8165e4_64fd0771","updated":"2024-07-03 14:04:53.000000000","message":"Done","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"}],"openstack/tests/unit/baremetal/v1/test_history.py":[{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4f840bf36682da44e15e1d9bd293461e6bc22299","unresolved":true,"context_lines":[{"line_number":13,"context_line":"from openstack.baremetal.v1 import history"},{"line_number":14,"context_line":"from openstack.tests.unit import base"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"FAKE \u003d {"},{"line_number":17,"context_line":"    \"uuid\": \"12345678-1234-5678-1234-567812345678\","},{"line_number":18,"context_line":"    \"created_at\": \"2023-07-10T12:34:56.789123+00:00\","},{"line_number":19,"context_line":"    \"user\": \"user-uuid\","}],"source_content_type":"text/x-python","patch_set":9,"id":"96d0e3a0_d3fda2d7","line":16,"updated":"2024-07-22 11:55:40.000000000","message":"This doesn\u0027t seems like the output we get when doing a request\nHere you have the examples\nhttps://paste.opendev.org/show/bInLYZmjavhQV5OtnVU2/","commit_id":"170b695718bd725aa639439109689349347c9a9e"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3f3ff6a42f65aabc6095e653ebc659382ce26e0c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from openstack.baremetal.v1 import history"},{"line_number":14,"context_line":"from openstack.tests.unit import base"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"FAKE \u003d {"},{"line_number":17,"context_line":"    \"uuid\": \"12345678-1234-5678-1234-567812345678\","},{"line_number":18,"context_line":"    \"created_at\": \"2023-07-10T12:34:56.789123+00:00\","},{"line_number":19,"context_line":"    \"user\": \"user-uuid\","}],"source_content_type":"text/x-python","patch_set":9,"id":"f6c9b03d_3252ba49","line":16,"in_reply_to":"96d0e3a0_d3fda2d7","updated":"2026-10-30 00:16:46.000000000","message":"Done","commit_id":"170b695718bd725aa639439109689349347c9a9e"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"4f840bf36682da44e15e1d9bd293461e6bc22299","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        self.assertEqual(\u0027/nodes/%(node_id)s/history\u0027, sot.base_path)"},{"line_number":33,"context_line":"        self.assertTrue(sot.allow_fetch)"},{"line_number":34,"context_line":"        self.assertTrue(sot.allow_list)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_instantiate(self):"},{"line_number":37,"context_line":"        sot \u003d history.History(**FAKE)"},{"line_number":38,"context_line":"        self.assertEqual(FAKE[\u0027uuid\u0027], sot.id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7cdd32f6_4572f0cd","line":35,"updated":"2024-07-22 11:55:40.000000000","message":"I\u0027m wondering if we should also check /nodes/%(node_id)s/history/%(history_event_uuid)s.","commit_id":"170b695718bd725aa639439109689349347c9a9e"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3f3ff6a42f65aabc6095e653ebc659382ce26e0c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.assertEqual(\u0027/nodes/%(node_id)s/history\u0027, sot.base_path)"},{"line_number":33,"context_line":"        self.assertTrue(sot.allow_fetch)"},{"line_number":34,"context_line":"        self.assertTrue(sot.allow_list)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_instantiate(self):"},{"line_number":37,"context_line":"        sot \u003d history.History(**FAKE)"},{"line_number":38,"context_line":"        self.assertEqual(FAKE[\u0027uuid\u0027], sot.id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"0cb636a4_3154e8fd","line":35,"in_reply_to":"6bbd1582_67871eee","updated":"2026-10-30 00:16:46.000000000","message":"Done","commit_id":"170b695718bd725aa639439109689349347c9a9e"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"7204b6ad83d29c32c009b1bb834f144e5cfb330c","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        self.assertEqual(\u0027/nodes/%(node_id)s/history\u0027, sot.base_path)"},{"line_number":33,"context_line":"        self.assertTrue(sot.allow_fetch)"},{"line_number":34,"context_line":"        self.assertTrue(sot.allow_list)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_instantiate(self):"},{"line_number":37,"context_line":"        sot \u003d history.History(**FAKE)"},{"line_number":38,"context_line":"        self.assertEqual(FAKE[\u0027uuid\u0027], sot.id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"6bbd1582_67871eee","line":35,"in_reply_to":"7cdd32f6_4572f0cd","updated":"2024-07-22 15:26:00.000000000","message":"so you mean something like this? \" self.assertEqual(\u0027/nodes/%(node_id)s/history/%(history_event_uuid)s\u0027, sot.id)\" as id in the class history is the history event uuid","commit_id":"170b695718bd725aa639439109689349347c9a9e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.assertFalse(sot.allow_delete)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_instantiate(self):"},{"line_number":57,"context_line":"        sot \u003d history.History(node_id\u003dNODE_ID, **FAKE)"},{"line_number":58,"context_line":"        self.assertEqual(FAKE[\u0027uuid\u0027], sot.id)"},{"line_number":59,"context_line":"        self.assertEqual(FAKE[\u0027created_at\u0027], sot.created_at)"},{"line_number":60,"context_line":"        self.assertEqual(FAKE[\u0027severity\u0027], sot.severity)"}],"source_content_type":"text/x-python","patch_set":10,"id":"f720e056_8f700d77","line":57,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Argument 2 to \"History\" has incompatible type \"**dict[str, Sequence[Collection[str]] | None]\"; expected \"Connection | None\"  [arg-type]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.assertFalse(sot.allow_delete)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_instantiate(self):"},{"line_number":57,"context_line":"        sot \u003d history.History(node_id\u003dNODE_ID, **FAKE)"},{"line_number":58,"context_line":"        self.assertEqual(FAKE[\u0027uuid\u0027], sot.id)"},{"line_number":59,"context_line":"        self.assertEqual(FAKE[\u0027created_at\u0027], sot.created_at)"},{"line_number":60,"context_line":"        self.assertEqual(FAKE[\u0027severity\u0027], sot.severity)"}],"source_content_type":"text/x-python","patch_set":10,"id":"445877aa_661c7de8","line":57,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Argument 2 to \"History\" has incompatible type \"**dict[str, Sequence[Collection[str]] | None]\"; expected \"bool\"  [arg-type]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def test_request_urls(self):"},{"line_number":68,"context_line":"        # The event is addressed as /nodes/{node_id}/history/{event_uuid},"},{"line_number":69,"context_line":"        # where the event UUID is the resource ID"},{"line_number":70,"context_line":"        sot \u003d history.History(node_id\u003dNODE_ID, **FAKE)"},{"line_number":71,"context_line":"        self.assertEqual("},{"line_number":72,"context_line":"            f\u0027nodes/{NODE_ID}/history/{EVENT_ID}\u0027,"},{"line_number":73,"context_line":"            sot._prepare_request(requires_id\u003dTrue).url,"}],"source_content_type":"text/x-python","patch_set":10,"id":"12b18d8a_975b619b","line":70,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Argument 2 to \"History\" has incompatible type \"**dict[str, Sequence[Collection[str]] | None]\"; expected \"Connection | None\"  [arg-type]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def test_request_urls(self):"},{"line_number":68,"context_line":"        # The event is addressed as /nodes/{node_id}/history/{event_uuid},"},{"line_number":69,"context_line":"        # where the event UUID is the resource ID"},{"line_number":70,"context_line":"        sot \u003d history.History(node_id\u003dNODE_ID, **FAKE)"},{"line_number":71,"context_line":"        self.assertEqual("},{"line_number":72,"context_line":"            f\u0027nodes/{NODE_ID}/history/{EVENT_ID}\u0027,"},{"line_number":73,"context_line":"            sot._prepare_request(requires_id\u003dTrue).url,"}],"source_content_type":"text/x-python","patch_set":10,"id":"a7c5e8e4_b7d74a33","line":70,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Argument 2 to \"History\" has incompatible type \"**dict[str, Sequence[Collection[str]] | None]\"; expected \"bool\"  [arg-type]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_instantiate_list_item(self):"},{"line_number":81,"context_line":"        # The list response only carries a subset of the fields"},{"line_number":82,"context_line":"        sot \u003d history.History(node_id\u003dNODE_ID, **FAKE_LIST_ITEM)"},{"line_number":83,"context_line":"        self.assertEqual(FAKE_LIST_ITEM[\u0027uuid\u0027], sot.id)"},{"line_number":84,"context_line":"        self.assertEqual(FAKE_LIST_ITEM[\u0027created_at\u0027], sot.created_at)"},{"line_number":85,"context_line":"        self.assertEqual(FAKE_LIST_ITEM[\u0027severity\u0027], sot.severity)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdff3d7_2a8b734e","line":82,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Argument 2 to \"History\" has incompatible type \"**dict[str, Sequence[Collection[str]]]\"; expected \"Connection | None\"  [arg-type]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7cd6d117595d321bbced1f566ae17626674ce03b","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_instantiate_list_item(self):"},{"line_number":81,"context_line":"        # The list response only carries a subset of the fields"},{"line_number":82,"context_line":"        sot \u003d history.History(node_id\u003dNODE_ID, **FAKE_LIST_ITEM)"},{"line_number":83,"context_line":"        self.assertEqual(FAKE_LIST_ITEM[\u0027uuid\u0027], sot.id)"},{"line_number":84,"context_line":"        self.assertEqual(FAKE_LIST_ITEM[\u0027created_at\u0027], sot.created_at)"},{"line_number":85,"context_line":"        self.assertEqual(FAKE_LIST_ITEM[\u0027severity\u0027], sot.severity)"}],"source_content_type":"text/x-python","patch_set":10,"id":"cc096530_bf946371","line":82,"updated":"2026-10-30 01:55:37.000000000","message":"pep8: error: Argument 2 to \"History\" has incompatible type \"**dict[str, Sequence[Collection[str]]]\"; expected \"bool\"  [arg-type]","commit_id":"92d422c19ba2672d31c54ca176ef0d8360eb7f48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.assertFalse(sot.allow_commit)"},{"line_number":56,"context_line":"        self.assertFalse(sot.allow_delete)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_instantiate(self):"},{"line_number":59,"context_line":"        sot \u003d history.History(node_id\u003dNODE_ID, **FAKE)"},{"line_number":60,"context_line":"        self.assertEqual(FAKE[\u0027uuid\u0027], sot.id)"},{"line_number":61,"context_line":"        self.assertEqual(FAKE[\u0027created_at\u0027], sot.created_at)"}],"source_content_type":"text/x-python","patch_set":11,"id":"130305c7_0873dc27","line":58,"updated":"2026-10-30 10:53:47.000000000","message":"I was going to say can we call this `test_make_it` like the other tests, but it seems baremetal (and clustering) use `test_instantiate` across the board.","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"}],"openstack/tests/unit/baremetal/v1/test_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":true,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"class TestHistory(TestBaremetalProxy):"},{"line_number":595,"context_line":"    @mock.patch.object(history.History, \u0027list\u0027)"},{"line_number":596,"context_line":"    def test_history_detailed(self, mock_list):"},{"line_number":597,"context_line":"        result \u003d self.proxy.history_events("},{"line_number":598,"context_line":"            node_id\u003d\"87654321-4321-8765-4321-876543218765\","},{"line_number":599,"context_line":"            details\u003dTrue,"},{"line_number":600,"context_line":"            query\u003d1,"},{"line_number":601,"context_line":"        )"},{"line_number":602,"context_line":"        self.assertIs(result, mock_list.return_value)"},{"line_number":603,"context_line":"        mock_list.assert_called_once_with("},{"line_number":604,"context_line":"            self.proxy,"},{"line_number":605,"context_line":"            node_id\u003d\"87654321-4321-8765-4321-876543218765\","},{"line_number":606,"context_line":"            details\u003dTrue,"},{"line_number":607,"context_line":"            query\u003d1,"},{"line_number":608,"context_line":"        )"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    @mock.patch.object(history.History, \u0027list\u0027)"},{"line_number":611,"context_line":"    def test_history_not_detailed(self, mock_list):"}],"source_content_type":"text/x-python","patch_set":11,"id":"d8becf09_9b9bef0b","line":608,"range":{"start_line":596,"start_character":47,"end_line":608,"end_character":9},"updated":"2026-10-30 10:53:47.000000000","message":"Any reason we can\u0027t use `verify_list` here and below? It should work and will handle the mocking for you. An example:\n\nhttps://github.com/openstack/openstacksdk/blob/720ebcd974e5436c3cf3a997a9430cf890f11849/openstack/tests/unit/network/v2/test_proxy.py#L1036-L1042","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"class TestHistory(TestBaremetalProxy):"},{"line_number":595,"context_line":"    @mock.patch.object(history.History, \u0027list\u0027)"},{"line_number":596,"context_line":"    def test_history_detailed(self, mock_list):"},{"line_number":597,"context_line":"        result \u003d self.proxy.history_events("},{"line_number":598,"context_line":"            node_id\u003d\"87654321-4321-8765-4321-876543218765\","},{"line_number":599,"context_line":"            details\u003dTrue,"},{"line_number":600,"context_line":"            query\u003d1,"},{"line_number":601,"context_line":"        )"},{"line_number":602,"context_line":"        self.assertIs(result, mock_list.return_value)"},{"line_number":603,"context_line":"        mock_list.assert_called_once_with("},{"line_number":604,"context_line":"            self.proxy,"},{"line_number":605,"context_line":"            node_id\u003d\"87654321-4321-8765-4321-876543218765\","},{"line_number":606,"context_line":"            details\u003dTrue,"},{"line_number":607,"context_line":"            query\u003d1,"},{"line_number":608,"context_line":"        )"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    @mock.patch.object(history.History, \u0027list\u0027)"},{"line_number":611,"context_line":"    def test_history_not_detailed(self, mock_list):"}],"source_content_type":"text/x-python","patch_set":11,"id":"a70ff965_fee70f6f","line":608,"range":{"start_line":596,"start_character":47,"end_line":608,"end_character":9},"in_reply_to":"d8becf09_9b9bef0b","updated":"2026-11-02 10:06:13.000000000","message":"Done","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"}],"releasenotes/notes/add-node-history-8ba46d8370b10d36.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1d4dcac5c1976c37c4e6a85b3b43ae5b447fb12e","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for querying a node\u0027s history as per functionality"},{"line_number":5,"context_line":"    introduced in API 1.78."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"8f0fdf38_ab57bb01","line":5,"updated":"2024-07-01 16:06:21.000000000","message":"\"bare-metal node\" (otherwise it may not be clear in the context of the whole OpenStack)","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"d2c23afc34b12bdf943f400884820662d716be60","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for querying a node\u0027s history as per functionality"},{"line_number":5,"context_line":"    introduced in API 1.78."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"e743b6b1_975cb3b7","line":5,"in_reply_to":"8f0fdf38_ab57bb01","updated":"2024-07-08 15:03:25.000000000","message":"agree, need to update the release note.","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":37054,"name":"Abdulrahman Al-Taweel","display_name":"ataweel","email":"ataweel@andrew.cmu.edu","username":"ataweel"},"change_message_id":"4a8ae79be70f9bd4c13690f353f37e8324a1977d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for querying a node\u0027s history as per functionality"},{"line_number":5,"context_line":"    introduced in API 1.78."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"d8d1c8ce_4165e552","line":5,"in_reply_to":"e743b6b1_975cb3b7","updated":"2024-07-08 19:30:40.000000000","message":"Done","commit_id":"04b9aa192c85183a6ab7d5bd019c71382815f69f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e6b442e0811b58cec823551f347d414925fa465c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for querying a bare-metal node\u0027s history as per functionality"},{"line_number":5,"context_line":"    introduced in API 1.78."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"c4d879f5_82ff52df","line":4,"updated":"2026-10-30 10:53:47.000000000","message":"nit:\n\n```suggestion\n    Adds support for querying a baremetal node\u0027s history as per functionality\n```\n\nAlso, missing new line","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"33917abdeca84714d764a53764daa6153ede5926","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for querying a bare-metal node\u0027s history as per functionality"},{"line_number":5,"context_line":"    introduced in API 1.78."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"2dac4a35_6b545b64","line":4,"in_reply_to":"c4d879f5_82ff52df","updated":"2026-11-02 10:06:13.000000000","message":"Done","commit_id":"1499a9379481819a197967a2471cd137b7ee0483"}]}
