Skip to content

Using types-jsonschema 4.4.0, mypy does not consider jsonschema.validators.Draft7Validator a type #7028

Closed

Description

@DMRobertson

(I'm not sure if this is best filed as an issue against typeshed or mypy. Happy to move this if it's the latter.)

The snippet

import jsonschema
x: jsonschema.Draft7Validator

does not typecheck on with types-jsonschema 4.4.0.

error: Variable "jsonschema.validators.Draft7Validator" is not valid as a type  [valid-type]

For cross referencing, we noticed this here.

The snippet above does type-check with 4.3.0, where Draft7Validator was annotated as Any. The change was made in #7025 .

Are we misunderstanding or misusing Draft7Validator - is it not expected to be a type like this? If not, perhaps this is a problem in mypy rather than the stubs?

For what it's worth: mypy's documentation suggests that tp: Type[_Validator] is considered a "variable of type _Validator". Perhaps mypy's complaint is that tp's value could be a replaced with a different subtype of _Validator at runtime? With that in mind, I tried patching the stubs to read Draft7Validator: Final[type[_Validator]] but this didn't seem to appease the type gods.

Activity

  1. DMRobertson commented on Jan 24, 2022

    @DMRobertson
    ContributorAuthor

    Come to think of it, maybe Draft7Validator = NewType("Draft7Validator", _Validator) would do the trick?

  2. Akuli commented on Jan 24, 2022

    @Akuli
    Collaborator

    We should probably just use empty classes with _Validator as a base class, as in class Draft7Validator(_Validator): .... At runtime, jsonschema has a function that creates a new validator class, and making new classes in typeshed is the closest we can get to that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions