Skip to content

Commit 02999f3

Browse files
authored
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.
1 parent 3bc8278 commit 02999f3

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

mypy_django_plugin/transformers/managers.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
Var,
1717
)
1818
from mypy.plugin import AttributeContext, DynamicClassDefContext, SemanticAnalyzerPluginInterface
19+
from mypy.semanal import has_placeholder
1920
from mypy.types import AnyType, CallableType, Instance, ProperType
2021
from mypy.types import Type as MypyType
2122
from mypy.types import TypeOfAny
@@ -246,7 +247,10 @@ def create_manager_info_from_from_queryset_call(
246247
else:
247248
manager_name = f"{base_manager_info.name}From{queryset_info.name}"
248249

249-
new_manager_info = create_manager_class(api, base_manager_info, name or manager_name, call_expr.line)
250+
try:
251+
new_manager_info = create_manager_class(api, base_manager_info, name or manager_name, call_expr.line)
252+
except helpers.IncompleteDefnException:
253+
return None
250254

251255
popuplate_manager_from_queryset(new_manager_info, queryset_info)
252256

@@ -272,6 +276,10 @@ def create_manager_class(
272276
base_manager_instance = fill_typevars(base_manager_info)
273277
assert isinstance(base_manager_instance, Instance)
274278

279+
# If any of the type vars are undefined we need to defer. This is handled by the caller
280+
if any(has_placeholder(type_var) for type_var in base_manager_info.defn.type_vars):
281+
raise helpers.IncompleteDefnException
282+
275283
manager_info = helpers.create_type_info(name, api.cur_mod_id, bases=[base_manager_instance])
276284
manager_info.line = line
277285
manager_info.type_vars = base_manager_info.type_vars

0 commit comments

Comments
 (0)