typing: fix BaseFactory callable return type for parameterized generics. (Works in VSCode only) #1137
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.
Currently factory_boy only supports proper return type hints only when using the
.create()
method. This PR is meant to address the type hint that gets inferred when calling the factory class itself, and this works fine for VSCode. With this change, the concrete type provided is inferred instead of "NoReturn" which is caused by theraise errors.FactoryError('You cannot instantiate BaseFactory')
inBaseFactory.__new__
This is the smallest drop-in fix that doesn't require larger changes to the codebase. One could possibly create a similar annotation on the subclass
Factory
as well, and that might be more "correct" since BaseFactory's__new__
is technically never actually reached in typical (compliant) code as the subclass Factory is using the custom metaclassFactoryMetaClass
which overloads the__new__
and__call__
functions.Before changes:

After changes:

Possible points of exploration:
__call__
level of certain classes