Fix typing of LetterCase - #560
Open
mtnpke wants to merge 1 commit into
Open
Conversation
Multiple issues prevented the letter_case argument on the dataclass_json decorator to work correctly with strict type checking settings and PyRight: * While config() etc. correctly accept also a callable instead of only an enum member, the dataclass_json decorator did not do this. Since the enum members are mapped to callables, which cannot be used as base types, they cannot be used as argument values of type LetterCase. * All functions in stringcase.py were missing type hints. * The LetterCase enum members need concrete type definitions, so that there arguments are sufficiently constrained and they are compatible with the correct callable type `Callable[[str], str]`. PyRight would otherwise infer `Callable[..., str]`, which is not narrow enough. These changes allow a JSON dataclass with letter_case argument to pass type testing with basedpyright. The code is fully backwards-compatible, as only type information is enhanced.
mtnpke
force-pushed
the
lettercase-typing
branch
from
April 29, 2025 07:49
e39c25f to
08266a6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Multiple issues prevented the letter_case argument on the dataclass_json decorator to work correctly with strict type checking settings and PyRight:
Callable[[str], str]. PyRight would otherwise inferCallable[..., str], which is not narrow enough.These changes allow a JSON dataclass with letter_case argument to pass type testing with basedpyright. The code is fully backwards-compatible, as only type information is enhanced. Since dataclasses-json includes the
py.typedmarker file, it would be helpful if the type info was as complete and useful as it can be.Test case:
Result before:
Result after: