Skip to content

Issue.state_reason can now be duplicate #188

Closed
@sterliakov

Description

@sterliakov

Cross-ref to https://github.com/orgs/community/discussions/150535.

I'm not sure if there is anything to do on the library side, but other users are likely to search for the problem here. API docs do not list "duplicate" as a valid value for Issue.state_reason, but it does not prevent their API from returning such.

In the meantime, the following patch allows arbitrary close_reason values:

def _patch_issue_model():
    """Patch API bug. https://github.com/orgs/community/discussions/150535"""
    from githubkit.typing import Missing
    Issue.model_fields['state_reason'].annotation = Missing[str | None]
    Issue.model_rebuild(force=True)


_patch_issue_model()

My traceback for better indexing:

Traceback (most recent call last):
  File "/home/runner/work/mypy-issues/mypy-issues/.venv/bin/fetch", line 10, in <module>
    sys.exit(fetch_issues())
             ~~~~~~~~~~~~^^
  File "/home/runner/work/mypy-issues/mypy-issues/src/mypy_issues/__init__.py", line 28, in fetch_issues
    download_snippets(token, limit=args.limit)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/mypy-issues/mypy-issues/src/mypy_issues/issues.py", line 47, in download_snippets
    removed = {iss.number for iss in _get_closed_issues(gh, org, repo, since)}
                                     ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/mypy-issues/mypy-issues/src/mypy_issues/issues.py", line 147, in _get_closed_issues
    ).parsed_data
      ^^^^^^^^^^^
  File "/home/runner/work/mypy-issues/mypy-issues/.venv/lib/python3.13/site-packages/githubkit/response.py", line 94, in parsed_data
    return type_validate_json(self._data_model, self.content)
  File "/home/runner/work/mypy-issues/mypy-issues/.venv/lib/python3.13/site-packages/githubkit/compat.py", line 43, in type_validate_json
    return TypeAdapter(type_).validate_json(data)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/runner/work/mypy-issues/mypy-issues/.venv/lib/python3.13/site-packages/pydantic/type_adapter.py", line 446, in validate_json
    return self.validator.validate_json(
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        data, strict=strict, context=context, allow_partial=experimental_allow_partial
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
pydantic_core._pydantic_core.ValidationError: 2 validation errors for list[Issue]
0.state_reason.literal[<UNSET>]
  Input should be <UNSET> [type=literal_error, input_value='duplicate', input_type=str]
    For further information visit https://errors.pydantic.dev/2.10/v/literal_error
0.state_reason.literal['completed','reopened','not_planned']
  Input should be 'completed', 'reopened' or 'not_planned' [type=literal_error, input_value='duplicate', input_type=str]
    For further information visit https://errors.pydantic.dev/2.10/v/literal_error

Please keep this open until the upstream issue is resolved.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Rest APIbugSomething isn't workingschemaschema related

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions