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:
Sigurd Ljødal
2022-09-23 20:35:23 +02:00
committed by GitHub
parent 3bc8278424
commit 02999f3e86

View File

@@ -16,6 +16,7 @@ from mypy.nodes import (
Var,
)
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 Type as MypyType
from mypy.types import TypeOfAny
@@ -246,7 +247,10 @@ def create_manager_info_from_from_queryset_call(
else:
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)
@@ -272,6 +276,10 @@ def create_manager_class(
base_manager_instance = fill_typevars(base_manager_info)
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.line = line
manager_info.type_vars = base_manager_info.type_vars