)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"706bc5c63a698f4dda76938203ee8e442c4b2c7f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a5409276_195847fe","updated":"2026-06-02 16:44:39.000000000","message":"-1 is for the incomplete types. We don\u0027t need to annotate all methods and functions, but we should annotate all parameter of the methods and functions we do annotate","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"6f8c037d543498d9b319a76813125149680d1e99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"243167fd_2f24639c","updated":"2026-05-11 12:07:02.000000000","message":"Yes I can do some more. This is just what I keep locally when I’m working on the type drivers.","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"08eb6b9b46325d1a8a12ee9fc7bfdcf7e8fee834","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7ac6747c_14e8f031","updated":"2026-05-11 09:43:45.000000000","message":"looks ok, do you also plan to extend typing for other parts also?","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"}],"neutron_lib/plugins/ml2/api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"706bc5c63a698f4dda76938203ee8e442c4b2c7f","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# TODO(Python 3.11): replace total\u003dFalse with per-field NotRequired[]"},{"line_number":32,"context_line":"class SegmentDict(TypedDict, total\u003dFalse):"},{"line_number":33,"context_line":"    network_type: str"},{"line_number":34,"context_line":"    id: str"},{"line_number":35,"context_line":"    network_id: str"}],"source_content_type":"text/x-python","patch_set":1,"id":"fdbc603e_fc374044","line":32,"updated":"2026-06-02 16:44:39.000000000","message":"nit: any reason not to do this as `Segment`?\n\n```suggestion\nclass Segment(TypedDict, total\u003dFalse):\n```","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"8980817c97b0092add65717e337d93dea5efe3a3","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# TODO(Python 3.11): replace total\u003dFalse with per-field NotRequired[]"},{"line_number":32,"context_line":"class SegmentDict(TypedDict, total\u003dFalse):"},{"line_number":33,"context_line":"    network_type: str"},{"line_number":34,"context_line":"    id: str"},{"line_number":35,"context_line":"    network_id: str"}],"source_content_type":"text/x-python","patch_set":1,"id":"6828cf5c_02f186ca","line":32,"in_reply_to":"fdbc603e_fc374044","updated":"2026-06-02 23:22:49.000000000","message":"Cause there’s also access and usage of a Segment class which is not used or accessed like a dict while this one is. So this is to make it clear.","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"706bc5c63a698f4dda76938203ee8e442c4b2c7f","unresolved":true,"context_lines":[{"line_number":594,"context_line":"    - release_segment"},{"line_number":595,"context_line":"    \"\"\""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    @abc.abstractmethod"},{"line_number":598,"context_line":"    def reserve_provider_segment("},{"line_number":599,"context_line":"            self, session, segment: SegmentDict,"},{"line_number":600,"context_line":"            filters: dict | None \u003d None) -\u003e SegmentDict:"},{"line_number":601,"context_line":"        \"\"\"Reserve resource associated with a provider network segment."},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        :param session: database session"}],"source_content_type":"text/x-python","patch_set":1,"id":"269f2d87_b8be6d7a","line":600,"range":{"start_line":597,"start_character":23,"end_line":600,"end_character":56},"updated":"2026-06-02 16:44:39.000000000","message":"You\u0027ve missed the `session` param and the parameters for the `dict` generic\n\n```suggestion\n    @abc.abstractmethod\n    def reserve_provider_segment(\n        self,\n        session: orm.session.Session,\n        segment: Segment,\n        filters: dict[str, object] | None \u003d None\n    ) -\u003e Segment:\n```\n\nYou\u0027ll need to add `from sqlalchemy import orm` above, obviously. You may want to simpify this to `from sqlalchemy.orm.session import Session` for typing purposes (`sqlalchemy` is one of the import exceptions in hacking) but that\u0027s up to you.","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"706bc5c63a698f4dda76938203ee8e442c4b2c7f","unresolved":true,"context_lines":[{"line_number":614,"context_line":"    @abc.abstractmethod"},{"line_number":615,"context_line":"    def allocate_tenant_segment("},{"line_number":616,"context_line":"            self, session,"},{"line_number":617,"context_line":"            filters: dict | None \u003d None) -\u003e SegmentDict:"},{"line_number":618,"context_line":"        \"\"\"Allocate resource for a new project network segment."},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        :param session: database session"}],"source_content_type":"text/x-python","patch_set":1,"id":"e82f043a_81a4490b","line":617,"updated":"2026-06-02 16:44:39.000000000","message":"as above","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"706bc5c63a698f4dda76938203ee8e442c4b2c7f","unresolved":true,"context_lines":[{"line_number":633,"context_line":"    # remove the tenant version and make this an abtract method"},{"line_number":634,"context_line":"    def allocate_project_segment("},{"line_number":635,"context_line":"            self, session,"},{"line_number":636,"context_line":"            filters: dict | None \u003d None) -\u003e SegmentDict:"},{"line_number":637,"context_line":"        \"\"\"For backwards-compatibility, call allocate_tenant_segment()\"\"\""},{"line_number":638,"context_line":"        return self.allocate_tenant_segment(session, filters\u003dfilters)"},{"line_number":639,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"498c4fb3_c84f1cbd","line":636,"updated":"2026-06-02 16:44:39.000000000","message":"as above","commit_id":"f025802592484a27cfff6746fc0c82faeaf89792"}]}
