Skip to content

Repo search results missing has_downloads field #293

@trag1c

Description

@trag1c

Repro for 0.15.3:

from githubkit import GitHub

gh = GitHub("token")
gh.rest.search.repos(q="githubkit").parsed_data
# pydantic_core._pydantic_core.ValidationError: 21 validation errors for SearchRepositoriesGetResponse200
# items.0.has_downloads
#   Field required [type=missing, input_value={'id': 512138996, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
#     For further information visit https://errors.pydantic.dev/2.12/v/missing
Full traceback
Traceback (most recent call last):
  File "<string>", line 4, in <module>
    gh.rest.search.repos(q="githubkit").parsed_data
  File "/Users/trag1c/.cache/uv/archive-v0/SCQsbxhmcwG8trSxWyXaQ/lib/python3.14/site-packages/githubkit/response.py", line 97, in parsed_data
    return type_validate_json(self._data_model, self.content)
  File "/Users/trag1c/.cache/uv/archive-v0/SCQsbxhmcwG8trSxWyXaQ/lib/python3.14/site-packages/githubkit/compat.py", line 57, in type_validate_json
    return TypeAdapter(type_).validate_json(data)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/trag1c/.cache/uv/archive-v0/SCQsbxhmcwG8trSxWyXaQ/lib/python3.14/site-packages/pydantic/type_adapter.py", line 492, in validate_json
    return self.validator.validate_json(
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        data,
        ^^^^^
    ...<5 lines>...
        by_name=by_name,
        ^^^^^^^^^^^^^^^^
    )
    ^
pydantic_core._pydantic_core.ValidationError: 21 validation errors for SearchRepositoriesGetResponse200
items.0.has_downloads
  Field required [type=missing, input_value={'id': 512138996, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.1.has_downloads
  Field required [type=missing, input_value={'id': 3994912, 'node_id'...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.2.has_downloads
  Field required [type=missing, input_value={'id': 191404130, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.3.has_downloads
  Field required [type=missing, input_value={'id': 99353195, 'node_id...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.4.has_downloads
  Field required [type=missing, input_value={'id': 1035356812, 'node_...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.5.has_downloads
  Field required [type=missing, input_value={'id': 1196646305, 'node_...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.6.has_downloads
  Field required [type=missing, input_value={'id': 377402856, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.7.has_downloads
  Field required [type=missing, input_value={'id': 1037660554, 'node_...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.8.has_downloads
  Field required [type=missing, input_value={'id': 618454354, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.9.has_downloads
  Field required [type=missing, input_value={'id': 333656919, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.10.has_downloads
  Field required [type=missing, input_value={'id': 666976811, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.11.has_downloads
  Field required [type=missing, input_value={'id': 648689981, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.12.has_downloads
  Field required [type=missing, input_value={'id': 641948836, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.13.has_downloads
  Field required [type=missing, input_value={'id': 4013218, 'node_id'...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.14.has_downloads
  Field required [type=missing, input_value={'id': 111377720, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.15.has_downloads
  Field required [type=missing, input_value={'id': 61766972, 'node_id...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.16.has_downloads
  Field required [type=missing, input_value={'id': 103235763, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.17.has_downloads
  Field required [type=missing, input_value={'id': 836311737, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.18.has_downloads
  Field required [type=missing, input_value={'id': 110205169, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.19.has_downloads
  Field required [type=missing, input_value={'id': 64573114, 'node_id...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing
items.20.has_downloads
  Field required [type=missing, input_value={'id': 872365266, 'node_i...l': True}, 'score': 1.0}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.12/v/missing

I have no idea how it ends up in this state since the field is there when using gh api:

λ gh api /search/repositories?q=githubkit | from json | get items.0 | get full_name has_downloads
╭───┬─────────────────────╮
│ 0 │ yanyongyu/githubkit │
│ 1 │ true                │
╰───┴─────────────────────╯

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