-
-
Notifications
You must be signed in to change notification settings - Fork 496
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Bug report
Repo to reproduce here : https://github.com/BMourguesFieldbox/mypy_bug
Install dependencies, and run mypy --config-file mypy.ini mre/views.py from the mypy_bug directory.
Files of interest:
Custom manager in models.py
Annotation defined in annotations.py
and usage in views.py
What's wrong
Mypy django plugin raises when using WithAnnotations on a custom manager.
Traceback from MRE:
bug_report/mypy_bug/mypy_bug
└─$ mypy --config-file mypy.ini mre/views.py
mypy_bug/settings.py:28: error: Need type annotation for "ALLOWED_HOSTS" (hint: "ALLOWED_HOSTS: list[<type>] = ...") [var-annotated]
mre/models.py:27: error: Incompatible types in assignment (expression has type "ManagerFromMyModelQueryset[Any]", variable has type "MyModelQueryset") [assignment]
mre/views.py:3: error: INTERNAL ERROR -- Please try using mypy master on GitHub:
https://mypy.readthedocs.io/en/stable/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 1.17.0
Traceback (most recent call last):
File "mypy/checkexpr.py", line 5960, in accept
File "mypy/nodes.py", line 1952, in accept
File "mypy/checkexpr.py", line 3326, in visit_member_expr
File "mypy/checkexpr.py", line 3356, in analyze_ordinary_member_access
File "mypy/checkmember.py", line 225, in analyze_member_access
File "mypy/checkmember.py", line 242, in _analyze_member_access
File "mypy/checkmember.py", line 382, in analyze_instance_member_access
File "mypy/checkmember.py", line 564, in analyze_member_var_access
File "mypy/checkmember.py", line 928, in analyze_var
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 294, in resolve_manager_method
return resolve_manager_method_from_instance(instance=ctx.type, method_name=method_name, ctx=ctx)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 267, in resolve_manager_method_from_instance
method_type = get_method_type_from_dynamic_manager(api, method_name, instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 103, in get_method_type_from_dynamic_manager
_process_dynamic_method(
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 155, in _process_dynamic_method
ret_type = _replace_type_var(ret_type, base_that_has_method.self_type.fullname, queryset_instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 253, in _replace_type_var
ret_type.args = tuple(_replace_type_var(item, to_replace, replace_by) for item in ret_type.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 253, in <genexpr>
ret_type.args = tuple(_replace_type_var(item, to_replace, replace_by) for item in ret_type.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 253, in _replace_type_var
ret_type.args = tuple(_replace_type_var(item, to_replace, replace_by) for item in ret_type.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 253, in <genexpr>
ret_type.args = tuple(_replace_type_var(item, to_replace, replace_by) for item in ret_type.args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 261, in _replace_type_var
ret_type.items = [_replace_type_var(item, to_replace, replace_by) for item in ret_type.items]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bmourgues/Documents/Perso/bug_report/mypy_bug/.venv/lib/python3.12/site-packages/mypy_django_plugin/transformers/managers.py", line 249, in _replace_type_var
ret_type = copy_type(get_proper_type(ret_type))
^^^^^^^^^^^^^^^^^^^^^^^^^
File "mypy/types.py", line 3202, in get_proper_type
TypeError: mypy.types.Type or None object expected; got str
mre/views.py:3: : note: use --pdb to drop into pdb
How is that should be
I'd expect mypy to validate the type without error.
System information
- OS: Ubuntu 22
python
version: 3.12django
version: 5.2mypy
version: 1.16.1django-stubs
version: 5.2.2django-stubs-ext
version: 5.2.2
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working