)]}'
{".pre-commit-config.yaml":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0c3a93ae0980b820d9e1da136f4d90176419f340","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    hooks:"},{"line_number":5,"context_line":"      - id: mypy"},{"line_number":6,"context_line":"        args: [--config-file\u003dpyproject.toml]"},{"line_number":7,"context_line":"        additional_dependencies: [types-PyYAML]"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"27de80cc_3720f16e","line":7,"updated":"2026-03-31 19:07:24.000000000","message":"Instead or in addition, we should add this to test-requirements.txt so types can/will resolve properly for developers in their ide, for instance. I\u0027m going to +2 this, but we should shift around this dependency location in a follow-up.","commit_id":"c03e9b215bf850d996637ea1f1cbfa77a4c44760"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"6d4a86f69b67327b6f332d2792bdb0861396a61b","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    hooks:"},{"line_number":5,"context_line":"      - id: mypy"},{"line_number":6,"context_line":"        args: [--config-file\u003dpyproject.toml]"},{"line_number":7,"context_line":"        additional_dependencies: [types-PyYAML]"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"d522806f_80ea22ab","line":7,"in_reply_to":"27de80cc_3720f16e","updated":"2026-04-01 05:34:06.000000000","message":"++","commit_id":"c03e9b215bf850d996637ea1f1cbfa77a4c44760"}],"ironicclient/v1/create_resources.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"cec326026ab0cef3f128dbb9add44c424038c1bc","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"ae0b6d72_ba46438f","line":22,"updated":"2026-03-24 22:12:56.000000000","message":"https://pypi.org/project/types-PyYAML/ looks like this is another situation like with requests where you just need the stubs as well?","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":38828,"name":"Karan Anand","display_name":"Karan","email":"anandkarancompsci@gmail.com","username":"anandkaranubc"},"change_message_id":"7eef17802a0f29c75b2aaa9d0d810f262e53f959","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"f7015f4f_c95254fe","line":22,"in_reply_to":"02dbbd58_df98a1c5","updated":"2026-03-24 22:23:48.000000000","message":"Sure, just wanted to run it by you first if that was a valid change. I will do that in a separate change, if that\u0027s ok. Once we are done with the whole production code?","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80e9e39bf9bf03ee7b387a6c99ce5838a1f6cfb3","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"563362cf_de125a94","line":22,"in_reply_to":"54843892_b88b2c3b","updated":"2026-03-27 13:58:36.000000000","message":"`types-PyYAML` is in the denylist so it won\u0027t get picked up by the requirements job. The was done in https://review.opendev.org/c/openstack/requirements/+/970441 which also captures the rationale for that decision.\n\nwrt placement of the dependency, I have been defining these in the `mypy` tox testenv for now. I have considered adding a `typing` or `types` extra or dependency-group (so you can do `pip install python-ironicclient[types]`) but I haven\u0027t determined whether the value of this is high enough or not. If we did make this decision we\u0027d like want to do it for all typed packages.\n\nI would *not* include these type stubs in `test-requirements.txt` for the same reason I don\u0027t believe hacking or flake8 should be there (unless you\u0027re providing custom rules): they\u0027re not needed at (testing) runtime.","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"6b9dbd0ef68c3e1bcf723e315ddaddc018136d78","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"56d64b1c_5de924f7","line":22,"in_reply_to":"54878dbf_34da9fe8","updated":"2026-04-01 16:16:54.000000000","message":"@stephenfin@redhat.com I\u0027ve asked Karan to follow up and add it to `test-requirements.txt` -- without having it there, developers using an IDE or any other tooking to install a venv where they might expect type checking to work would be in for a nasty surprise. There\u0027s almost zero cost in adding it; but developer overhead cost to not adding it.","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":38828,"name":"Karan Anand","display_name":"Karan","email":"anandkarancompsci@gmail.com","username":"anandkaranubc"},"change_message_id":"e2e06bbbf5b5012b51fb41da41b012ff2010b6c1","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"54878dbf_34da9fe8","line":22,"in_reply_to":"563362cf_de125a94","updated":"2026-03-29 18:32:02.000000000","message":"Thanks @stephenfin@redhat.com for the feedback. I added the dependency in the `tox.ini` and `.pre-commit-config.yaml` too. I hope that aligns with your comment above. Thanks again!\n\ncc: @jay@jvf.cc","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":38828,"name":"Karan Anand","display_name":"Karan","email":"anandkarancompsci@gmail.com","username":"anandkaranubc"},"change_message_id":"9d6a31912c1daad295e5612f5eec0c29853195c3","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"f4a06c9d_f65582cf","line":22,"in_reply_to":"7668c6cf_1199f88d","updated":"2026-03-24 22:47:54.000000000","message":"including other files too which need the types-requests/types-yaml update?","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"3e9500b3c9266533eff002f1ebf52050d40aaed9","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"02dbbd58_df98a1c5","line":22,"in_reply_to":"7f78f8a0_09673313","updated":"2026-03-24 22:22:05.000000000","message":"Just add it to test-requirements.txt then you avoid all the global-requirements shenanigans.","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":38828,"name":"Karan Anand","display_name":"Karan","email":"anandkarancompsci@gmail.com","username":"anandkaranubc"},"change_message_id":"7a81f959a8a505d8bd2c81e6ca28af2f209bd0ab","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f78f8a0_09673313","line":22,"in_reply_to":"ae0b6d72_ba46438f","updated":"2026-03-24 22:20:40.000000000","message":"Yes Sir. That is something I wanted to bring up tomorrow. It\u0027s a small change but touches the project\u0027s dependency policy, if we are ok with it?","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"90b94d5bda553a0966595a710a08e94303b34cb8","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"54843892_b88b2c3b","line":22,"in_reply_to":"f4a06c9d_f65582cf","updated":"2026-03-24 22:55:15.000000000","message":"I\u0027d add the requirement for the first one that needs it and build from there, like you have for everything else. There\u0027s really no wrong way to shape it as long as you don\u0027t try to do a large swath of the codebase in one change.","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b99c76925f1941468e333a7d7cec3b0b45b71dd2","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from typing import cast"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import jsonschema"},{"line_number":22,"context_line":"import yaml  # type: ignore[import-untyped]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironicclient import exc"},{"line_number":25,"context_line":"from ironicclient.v1 import client as v1_client"}],"source_content_type":"text/x-python","patch_set":4,"id":"7668c6cf_1199f88d","line":22,"in_reply_to":"f7015f4f_c95254fe","updated":"2026-03-24 22:45:53.000000000","message":"I\u0027d just do it in this change TBH.","commit_id":"c433806a9524527d296189b59a7c9274dde69e65"}]}
