Skip to content

Conversation

sirosen
Copy link
Contributor

@sirosen sirosen commented Aug 19, 2025

In python-jsonschema/jsonschema#1396 , the type signature for Validator.__init__ is updated to better match the runtime signature. This backports the fix to typeshed, keeping the copies of this data in sync. python-jsonschema/jsonschema#1396 is, itself, a response to feedback on jsonschema about the changes in typeshed #14327.

In addition to the __init__ fix, a couple of additional small changes are made, both in jsonschema and here in the stubs:

  1. In jsonschema, the type for create() in validators.py was updated to be notated with -> type[Validator]. This was necessary for internal testing on types to correctly read that validator classes created by this factory implement the protocol.

  2. Here, in order to better guarantee that the types align, the _Validator class (which does not exist in jsonschema, but is only defined here in the stubs) now inherits from Validator.

  3. The init signature for _Validator is updated to match

  4. tests/mypy_test.py flags the schema instance variable annotation as mismatching between Validator and _Validator. Review against the jsonschema source reveals that _Validator was closer to correct, so Validator is fixed to match.

Any further changes (e.g., elimination of _Validator or changing create's return type annotation) are left as potential future work.

In python-jsonschema/jsonschema#1396 , the type signature for
`Validator.__init__` is updated to better match the runtime signature.
This backports the fix to typeshed, keeping the copies of this data in
sync. python-jsonschema/jsonschema#1396 is, itself, a response to
feedback on `jsonschema` about the changes in `typeshed` python#14327.

In addition to the `__init__` fix, a couple of additional small changes
are made, both in `jsonschema` and here in the stubs:

1. In `jsonschema`, the type for `create()` in `validators.py` was
   updated to be notated with `-> type[Validator]`. This was necessary
   for internal testing on types to correctly read that validator
   classes created by this factory implement the protocol.

2. Here, in order to better guarantee that the types align, the
   `_Validator` class (which does not exist in `jsonschema`, but is only
   defined here in the stubs) now inherits from `Validator`.

3. The init signature for `_Validator` is updated to match

4. `tests/mypy_test.py` flags the `schema` instance variable annotation
   as mismatching between `Validator` and `_Validator`. Review against
   the `jsonschema` source reveals that `_Validator` was closer to
   correct, so `Validator` is fixed to match.

Any further changes (e.g., elimination of `_Validator` or changing
`create`'s return type annotation) are left as potential future work.

This comment has been minimized.

@srittau
Copy link
Collaborator

srittau commented Aug 20, 2025

Considering this is tracking changes made in jsonschema 4.25.1 (if I understand correctly), we should update the version field in METADATA.toml to version = "~=4.25.1"

@sirosen
Copy link
Contributor Author

sirosen commented Aug 20, 2025

I'm not sure, since this is actually more accurate to the runtime behavior in earlier versions as well?

4.25.1 updates the Validator protocol, but that's also about trying to be more accurate. I'm unclear on how tools are consuming the version information from typeshed, so I don't know whether or not an update is appropriate.

I suppose on the grounds that "it tracks upstream and also fixes bugs in the types", it should update? I'll push the change, but LMK if it makes sense to back it out.

Copy link
Contributor

Diff from mypy_primer, showing the effect of this PR on open source code:

schemathesis (https://github.com/schemathesis/schemathesis)
- src/schemathesis/specs/openapi/definitions.py: note: In function "make_validator":
- src/schemathesis/specs/openapi/definitions.py:1918: error: Missing positional argument "registry" in call to "Validator"  [call-arg]
- src/schemathesis/generation/coverage.py: note: In function "cover_schema_iter":
- src/schemathesis/generation/coverage.py:622: error: Missing positional argument "registry" in call to "Validator"  [call-arg]
- src/schemathesis/generation/coverage.py:632: error: Missing positional argument "registry" in call to "Validator"  [call-arg]
- src/schemathesis/generation/coverage.py: note: In function "_negative_type":
- src/schemathesis/generation/coverage.py:1250: error: Missing positional argument "registry" in call to "Validator"  [call-arg]
- src/schemathesis/specs/openapi/negative/__init__.py: note: In function "get_validator":
- src/schemathesis/specs/openapi/negative/__init__.py:43: error: Missing positional argument "registry" in call to "Validator"  [call-arg]
- src/schemathesis/specs/openapi/negative/__init__.py: note: At top level:
- src/schemathesis/specs/openapi/stateful/__init__.py: note: In function "into_step_input":
- src/schemathesis/specs/openapi/stateful/__init__.py:291: error: Missing positional argument "registry" in call to "Validator"  [call-arg]

check-jsonschema (https://github.com/python-jsonschema/check-jsonschema)
+ src/check_jsonschema/formats/__init__.py:56: error: Unused "type: ignore" comment  [unused-ignore]

discord.py (https://github.com/Rapptz/discord.py)
- discord/ext/commands/hybrid.py:508: error: Overlap between argument names and ** TypedDict items: "name", "description"  [misc]
+ discord/ext/commands/hybrid.py:508: error: Overlap between argument names and ** TypedDict items: "description", "name"  [misc]
- discord/ext/commands/hybrid.py:629: error: Overlap between argument names and ** TypedDict items: "name", "description"  [misc]
+ discord/ext/commands/hybrid.py:629: error: Overlap between argument names and ** TypedDict items: "description", "name"  [misc]

@srittau srittau merged commit 2b27104 into python:main Aug 20, 2025
48 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants