Allow to run from_queryset() with BaseManager, Manager (#271)

* allow to run from_queryset() with BaseManager, Manager

* fix tests
This commit is contained in:
Maksim Kurnikov
2019-12-13 20:16:33 +03:00
committed by GitHub
parent 1c31e71ffc
commit d0c25e3bce
8 changed files with 59 additions and 14 deletions

View File

@@ -1,5 +1,5 @@
from mypy.nodes import (
GDEF, FuncDef, MemberExpr, NameExpr, StrExpr, SymbolTableNode, TypeInfo,
GDEF, FuncDef, MemberExpr, NameExpr, RefExpr, StrExpr, SymbolTableNode, TypeInfo,
)
from mypy.plugin import ClassDefContext, DynamicClassDefContext
from mypy.types import AnyType, Instance, TypeOfAny
@@ -10,9 +10,11 @@ from mypy_django_plugin.lib import helpers
def create_new_manager_class_from_from_queryset_method(ctx: DynamicClassDefContext) -> None:
semanal_api = helpers.get_semanal_api(ctx)
assert isinstance(ctx.call.callee, MemberExpr)
assert isinstance(ctx.call.callee.expr, NameExpr)
base_manager_info = ctx.call.callee.expr.node
callee = ctx.call.callee
assert isinstance(callee, MemberExpr)
assert isinstance(callee.expr, RefExpr)
base_manager_info = callee.expr.node
if base_manager_info is None:
if not semanal_api.final_iteration:
semanal_api.defer()

View File

@@ -144,7 +144,7 @@ class AddManagers(ModelClassInitializer):
return False
def is_any_parametrized_manager(self, typ: Instance) -> bool:
return typ.type.fullname == fullnames.MANAGER_CLASS_FULLNAME and isinstance(typ.args[0], AnyType)
return typ.type.fullname in fullnames.MANAGER_CLASSES and isinstance(typ.args[0], AnyType)
def get_generated_manager_mappings(self, base_manager_fullname: str) -> Dict[str, str]:
base_manager_info = self.lookup_typeinfo(base_manager_fullname)