Skip to content

Commit b98b96f

Browse files
committed
Handle static methods
1 parent 38df105 commit b98b96f

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

mypy_django_plugin/transformers/managers.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,25 @@ def get_method_type_from_dynamic_manager(
4848
queryset_info = helpers.lookup_fully_qualified_typeinfo(api, queryset_fullname)
4949
assert queryset_info is not None
5050

51-
def get_funcdef_type(
52-
definition: Union[FuncBase, Decorator, None]
53-
) -> Optional[ProperType]:
51+
def get_funcdef(definition: Union[FuncBase, Decorator, None]) -> Optional[FuncBase]:
5452
# TODO: Handle @overload?
5553
if isinstance(definition, FuncBase) and not isinstance(
5654
definition, OverloadedFuncDef
5755
):
58-
return definition.type
56+
return definition
5957
elif isinstance(definition, Decorator):
60-
return definition.func.type
58+
return definition.func
6159
return None
6260

63-
method_type = get_funcdef_type(queryset_info.get_method(method_name))
64-
if method_type is None:
61+
meth = get_funcdef(queryset_info.get_method(method_name))
62+
if meth is None:
6563
return None
64+
method_type = meth.type
6665

6766
assert isinstance(method_type, CallableType)
67+
if meth.is_static:
68+
return method_type
69+
6870
# Drop any 'self' argument as our manager is already initialized
6971
return method_type.copy_modified(
7072
arg_types=method_type.arg_types[1:],

tests/typecheck/managers/test_managers.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,8 +579,8 @@
579579
main: |
580580
from myapp.models import MyModel
581581
reveal_type(MyModel.objects.get()) # N: Revealed type is "myapp.models.MyModel"
582-
reveal_type(MyModel.objects.do_something()) # N: Revealed type is "str"
583-
reveal_type(MyModel.objects.do_something(2)) # N: Revealed type is "str"
582+
reveal_type(MyModel.objects.do_something()) # N: Revealed type is "builtins.str"
583+
reveal_type(MyModel.objects.do_something(2)) # N: Revealed type is "builtins.str"
584584
installed_apps:
585585
- myapp
586586
files:

0 commit comments

Comments
 (0)