mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-15 00:07:09 +08:00
Fix unresolved placeholder error during serialization (#1161)
This fixes an error that occured during state serialization. Completely unsure how to reproduce this in a test but it resolves a long-standing prolem in our project at work at least.
This commit is contained in:
@@ -16,6 +16,7 @@ from mypy.nodes import (
|
|||||||
Var,
|
Var,
|
||||||
)
|
)
|
||||||
from mypy.plugin import AttributeContext, DynamicClassDefContext, SemanticAnalyzerPluginInterface
|
from mypy.plugin import AttributeContext, DynamicClassDefContext, SemanticAnalyzerPluginInterface
|
||||||
|
from mypy.semanal import has_placeholder
|
||||||
from mypy.types import AnyType, CallableType, Instance, ProperType
|
from mypy.types import AnyType, CallableType, Instance, ProperType
|
||||||
from mypy.types import Type as MypyType
|
from mypy.types import Type as MypyType
|
||||||
from mypy.types import TypeOfAny
|
from mypy.types import TypeOfAny
|
||||||
@@ -246,7 +247,10 @@ def create_manager_info_from_from_queryset_call(
|
|||||||
else:
|
else:
|
||||||
manager_name = f"{base_manager_info.name}From{queryset_info.name}"
|
manager_name = f"{base_manager_info.name}From{queryset_info.name}"
|
||||||
|
|
||||||
new_manager_info = create_manager_class(api, base_manager_info, name or manager_name, call_expr.line)
|
try:
|
||||||
|
new_manager_info = create_manager_class(api, base_manager_info, name or manager_name, call_expr.line)
|
||||||
|
except helpers.IncompleteDefnException:
|
||||||
|
return None
|
||||||
|
|
||||||
popuplate_manager_from_queryset(new_manager_info, queryset_info)
|
popuplate_manager_from_queryset(new_manager_info, queryset_info)
|
||||||
|
|
||||||
@@ -272,6 +276,10 @@ def create_manager_class(
|
|||||||
base_manager_instance = fill_typevars(base_manager_info)
|
base_manager_instance = fill_typevars(base_manager_info)
|
||||||
assert isinstance(base_manager_instance, Instance)
|
assert isinstance(base_manager_instance, Instance)
|
||||||
|
|
||||||
|
# If any of the type vars are undefined we need to defer. This is handled by the caller
|
||||||
|
if any(has_placeholder(type_var) for type_var in base_manager_info.defn.type_vars):
|
||||||
|
raise helpers.IncompleteDefnException
|
||||||
|
|
||||||
manager_info = helpers.create_type_info(name, api.cur_mod_id, bases=[base_manager_instance])
|
manager_info = helpers.create_type_info(name, api.cur_mod_id, bases=[base_manager_instance])
|
||||||
manager_info.line = line
|
manager_info.line = line
|
||||||
manager_info.type_vars = base_manager_info.type_vars
|
manager_info.type_vars = base_manager_info.type_vars
|
||||||
|
|||||||
Reference in New Issue
Block a user