This commit is contained in:
Maxim Kurnikov
2020-03-15 00:58:11 +03:00
parent 0b1507c81e
commit 1419b144d9
20 changed files with 513 additions and 321 deletions

View File

@@ -653,7 +653,7 @@
- case: related_manager_is_a_subclass_of_default_manager
main: |
from myapp.models import User
reveal_type(User().orders) # N: Revealed type is 'myapp.models.User.Order_RelatedManager'
reveal_type(User().orders) # N: Revealed type is 'main.Order_RelatedManager'
reveal_type(User().orders.get()) # N: Revealed type is 'myapp.models.Order*'
reveal_type(User().orders.manager_method()) # N: Revealed type is 'builtins.int'
installed_apps:

View File

@@ -1,95 +0,0 @@
- case: anonymous_queryset_from_as_manager_inside_model
main: |
from myapp.models import MyModel
reveal_type(MyModel.objects) # N: Revealed type is 'myapp.models.MyQuerySet_AsManager_MyModel'
reveal_type(MyModel.objects.get()) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(MyModel.objects.queryset_method) # N: Revealed type is 'def () -> builtins.int'
reveal_type(MyModel.objects.queryset_method()) # N: Revealed type is 'builtins.int'
installed_apps:
- myapp
files:
- path: myapp/__init__.py
- path: myapp/models.py
content: |
from django.db import models
class MyQuerySet(models.QuerySet):
def queryset_method(self) -> int:
pass
class MyModel(models.Model):
objects = MyQuerySet.as_manager()
- case: two_invocations_parametrized_with_different_models
main: |
from myapp.models import User, Blog
reveal_type(User.objects) # N: Revealed type is 'myapp.models.MyQuerySet_AsManager_User'
reveal_type(User.objects.get()) # N: Revealed type is 'myapp.models.User*'
reveal_type(User.objects.queryset_method) # N: Revealed type is 'def () -> builtins.int'
reveal_type(User.objects.queryset_method()) # N: Revealed type is 'builtins.int'
reveal_type(Blog.objects) # N: Revealed type is 'myapp.models.MyQuerySet_AsManager_Blog'
reveal_type(Blog.objects.get()) # N: Revealed type is 'myapp.models.Blog*'
reveal_type(Blog.objects.queryset_method) # N: Revealed type is 'def () -> builtins.int'
reveal_type(Blog.objects.queryset_method()) # N: Revealed type is 'builtins.int'
installed_apps:
- myapp
files:
- path: myapp/__init__.py
- path: myapp/models.py
content: |
from django.db import models
class MyQuerySet(models.QuerySet):
def queryset_method(self) -> int:
pass
class User(models.Model):
objects = MyQuerySet.as_manager()
class Blog(models.Model):
objects = MyQuerySet.as_manager()
- case: as_manager_outside_model_parametrized_with_any
main: |
from myapp.models import NotModel, outside_objects
reveal_type(NotModel.objects) # N: Revealed type is 'myapp.models.MyQuerySet_AsManager_Any'
reveal_type(NotModel.objects.get()) # N: Revealed type is 'Any'
reveal_type(outside_objects) # N: Revealed type is 'myapp.models.MyQuerySet_AsManager_Any'
reveal_type(outside_objects.get()) # N: Revealed type is 'Any'
installed_apps:
- myapp
files:
- path: myapp/__init__.py
- path: myapp/models.py
content: |
from django.db import models
class MyQuerySet(models.QuerySet):
def queryset_method(self) -> int:
pass
outside_objects = MyQuerySet.as_manager()
class NotModel:
objects = MyQuerySet.as_manager()
- case: test_as_manager_without_name_to_bind_in_different_files
main: |
from myapp.models import MyQuerySet
reveal_type(MyQuerySet.as_manager()) # N: Revealed type is 'Any'
reveal_type(MyQuerySet.as_manager().get()) # N: Revealed type is 'Any'
reveal_type(MyQuerySet.as_manager().mymethod()) # N: Revealed type is 'Any'
from myapp import helpers
installed_apps:
- myapp
files:
- path: myapp/__init__.py
- path: myapp/models.py
content: |
from django.db import models
class MyQuerySet(models.QuerySet):
def mymethod(self) -> int:
pass
class MyModel(models.Model):
objects = MyQuerySet.as_manager()
- path: myapp/helpers.py
content: |
from myapp.models import MyQuerySet
MyQuerySet.as_manager()

View File

@@ -17,11 +17,15 @@
- path: myapp/__init__.py
- path: myapp/models.py
content: |
from typing import TypeVar
from django.db import models
from django.db.models.manager import BaseManager, Manager
from mypy_django_plugin.lib import generics
class ModelQuerySet(models.QuerySet):
generics.make_classes_generic(models.QuerySet)
_M = TypeVar('_M', bound=models.Model)
class ModelQuerySet(models.QuerySet[_M]):
def queryset_method(self) -> str:
return 'hello'