fix tests for mypy 0.900 (#641)

This commit is contained in:
Cesar Canassa
2021-06-12 00:05:46 +02:00
committed by GitHub
parent 47f1700a8b
commit 77f9926ce1
33 changed files with 370 additions and 369 deletions

View File

@@ -20,7 +20,7 @@ def create_new_manager_class_from_from_queryset_method(ctx: DynamicClassDefConte
assert isinstance(base_manager_info, TypeInfo)
new_manager_info = semanal_api.basic_new_typeinfo(
ctx.name, basetype_or_fallback=Instance(base_manager_info, [AnyType(TypeOfAny.unannotated)])
ctx.name, basetype_or_fallback=Instance(base_manager_info, [AnyType(TypeOfAny.unannotated)]), line=ctx.call.line
)
new_manager_info.line = ctx.call.line
new_manager_info.defn.line = ctx.call.line

View File

@@ -25,6 +25,7 @@ dependencies = [
"typing-extensions",
"django",
"django-stubs-ext",
"types-pytz",
]
setup(

View File

@@ -103,7 +103,7 @@
class A(admin.ModelAdmin):
fieldsets = [ # type: ignore
(None, {}), # E: Missing key 'fields' for TypedDict "_FieldOpts"
(None, {}), # E: Missing key "fields" for TypedDict "_FieldOpts"
]
- case: errors_on_invalid_radio_fields
main: |

View File

@@ -3,7 +3,7 @@
from django.contrib.auth.decorators import login_required
@login_required
def view_func(request): ...
reveal_type(view_func) # N: Revealed type is 'def (request: Any) -> Any'
reveal_type(view_func) # N: Revealed type is "def (request: Any) -> Any"
- case: login_required_fancy
main: |
from django.contrib.auth.decorators import login_required
@@ -11,14 +11,14 @@
from django.http import HttpResponse
@login_required(redirect_field_name='a', login_url='b')
def view_func(request: WSGIRequest, arg: str) -> HttpResponse: ...
reveal_type(view_func) # N: Revealed type is 'def (request: django.core.handlers.wsgi.WSGIRequest, arg: builtins.str) -> django.http.response.HttpResponse'
reveal_type(view_func) # N: Revealed type is "def (request: django.core.handlers.wsgi.WSGIRequest, arg: builtins.str) -> django.http.response.HttpResponse"
- case: login_required_weird
main: |
from django.contrib.auth.decorators import login_required
# This is non-conventional usage, but covered in Django tests, so we allow it.
def view_func(request): ...
wrapped_view = login_required(view_func, redirect_field_name='a', login_url='b')
reveal_type(wrapped_view) # N: Revealed type is 'def (request: Any) -> Any'
reveal_type(wrapped_view) # N: Revealed type is "def (request: Any) -> Any"
- case: login_required_incorrect_return
main: |
from django.contrib.auth.decorators import login_required
@@ -29,7 +29,7 @@
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.username.startswith('super'))
def view_func(request): ...
reveal_type(view_func) # N: Revealed type is 'def (request: Any) -> Any'
reveal_type(view_func) # N: Revealed type is "def (request: Any) -> Any"
- case: user_passes_test_bare_is_error
main: |
from django.http.response import HttpResponse

View File

@@ -2,12 +2,12 @@
main: |
from django.db import connection
with connection.cursor() as cursor:
reveal_type(cursor) # N: Revealed type is 'django.db.backends.utils.CursorWrapper'
reveal_type(cursor) # N: Revealed type is "django.db.backends.utils.CursorWrapper"
cursor.execute("SELECT %s", [123])
- case: raw_connections
main: |
from django.db import connections
reveal_type(connections["test"]) # N: Revealed type is 'django.db.backends.base.base.BaseDatabaseWrapper'
reveal_type(connections["test"]) # N: Revealed type is "django.db.backends.base.base.BaseDatabaseWrapper"
for connection in connections.all():
with connection.cursor() as cursor:
reveal_type(cursor) # N: Revealed type is 'django.db.backends.utils.CursorWrapper'
reveal_type(cursor) # N: Revealed type is "django.db.backends.utils.CursorWrapper"

View File

@@ -3,19 +3,19 @@
from django.db.transaction import atomic
@atomic
def func(x: int) -> list: ...
reveal_type(func) # N: Revealed type is 'def (x: builtins.int) -> builtins.list[Any]'
reveal_type(func) # N: Revealed type is "def (x: builtins.int) -> builtins.list[Any]"
- case: atomic_args
main: |
from django.db.transaction import atomic
@atomic(using='bla', savepoint=False)
def func(x: int) -> list: ...
reveal_type(func) # N: Revealed type is 'def (x: builtins.int) -> builtins.list[Any]'
reveal_type(func) # N: Revealed type is "def (x: builtins.int) -> builtins.list[Any]"
- case: non_atomic_requests_bare
main: |
from django.db.transaction import non_atomic_requests
@non_atomic_requests
def view_func(request): ...
reveal_type(view_func) # N: Revealed type is 'def (request: Any) -> Any'
reveal_type(view_func) # N: Revealed type is "def (request: Any) -> Any"
- case: non_atomic_requests_args
main: |
@@ -24,5 +24,5 @@
from django.db.transaction import non_atomic_requests
@non_atomic_requests
def view_func(request: HttpRequest, arg: str) -> HttpResponse: ...
reveal_type(view_func) # N: Revealed type is 'def (request: django.http.request.HttpRequest, arg: builtins.str) -> django.http.response.HttpResponse'
reveal_type(view_func) # N: Revealed type is "def (request: django.http.request.HttpRequest, arg: builtins.str) -> django.http.response.HttpResponse"

View File

@@ -2,11 +2,11 @@
main: |
from myapp.models import User
user = User(small_int=1, name='user', slug='user', text='user')
reveal_type(user.id) # N: Revealed type is 'builtins.int*'
reveal_type(user.small_int) # N: Revealed type is 'builtins.int*'
reveal_type(user.name) # N: Revealed type is 'builtins.str*'
reveal_type(user.slug) # N: Revealed type is 'builtins.str*'
reveal_type(user.text) # N: Revealed type is 'builtins.str*'
reveal_type(user.id) # N: Revealed type is "builtins.int*"
reveal_type(user.small_int) # N: Revealed type is "builtins.int*"
reveal_type(user.name) # N: Revealed type is "builtins.str*"
reveal_type(user.slug) # N: Revealed type is "builtins.str*"
reveal_type(user.text) # N: Revealed type is "builtins.str*"
installed_apps:
- myapp
files:
@@ -25,9 +25,9 @@
main: |
from myapp.models import Booking
booking = Booking()
reveal_type(booking.id) # N: Revealed type is 'builtins.int*'
reveal_type(booking.time_range) # N: Revealed type is 'Any'
reveal_type(booking.some_decimal) # N: Revealed type is 'decimal.Decimal*'
reveal_type(booking.id) # N: Revealed type is "builtins.int*"
reveal_type(booking.time_range) # N: Revealed type is "Any"
reveal_type(booking.some_decimal) # N: Revealed type is "decimal.Decimal*"
installed_apps:
- myapp
files:
@@ -47,7 +47,7 @@
disable_cache: true
main: |
from myapp.models import User
reveal_type(User().id) # N: Revealed type is 'builtins.int*'
reveal_type(User().id) # N: Revealed type is "builtins.int*"
installed_apps:
- myapp
files:
@@ -62,10 +62,10 @@
disable_cache: true
main: |
from myapp.models import User
reveal_type(User().my_pk) # N: Revealed type is 'builtins.int*'
reveal_type(User().my_pk) # N: Revealed type is "builtins.int*"
reveal_type(User().id)
out: |
main:3: note: Revealed type is 'Any'
main:3: note: Revealed type is "Any"
main:3: error: "User" has no attribute "id"
installed_apps:
- myapp
@@ -83,7 +83,7 @@
MyModel(nulltext="")
MyModel(nulltext=None)
MyModel().nulltext=None
reveal_type(MyModel().nulltext) # N: Revealed type is 'Union[builtins.str, None]'
reveal_type(MyModel().nulltext) # N: Revealed type is "Union[builtins.str, None]"
installed_apps:
- myapp
files:
@@ -100,7 +100,7 @@
MyModel(notnulltext=None) # Should allow None in constructor
MyModel(notnulltext="")
MyModel().notnulltext = None # E: Incompatible types in assignment (expression has type "None", variable has type "Union[str, int, Combinable]")
reveal_type(MyModel().notnulltext) # N: Revealed type is 'builtins.str*'
reveal_type(MyModel().notnulltext) # N: Revealed type is "builtins.str*"
installed_apps:
- myapp
files:
@@ -114,7 +114,7 @@
- case: if_field_called_on_class_return_field_itself
main: |
from myapp.models import MyUser
reveal_type(MyUser.name) # N: Revealed type is 'django.db.models.fields.CharField[Union[builtins.str, builtins.int, django.db.models.expressions.Combinable], builtins.str]'
reveal_type(MyUser.name) # N: Revealed type is "django.db.models.fields.CharField[Union[builtins.str, builtins.int, django.db.models.expressions.Combinable], builtins.str]"
installed_apps:
- myapp
files:
@@ -130,13 +130,13 @@
from django.db import models
class MyClass:
myfield: models.IntegerField[int, int]
reveal_type(MyClass.myfield) # N: Revealed type is 'django.db.models.fields.IntegerField[builtins.int, builtins.int]'
reveal_type(MyClass().myfield) # N: Revealed type is 'django.db.models.fields.IntegerField[builtins.int, builtins.int]'
reveal_type(MyClass.myfield) # N: Revealed type is "django.db.models.fields.IntegerField[builtins.int, builtins.int]"
reveal_type(MyClass().myfield) # N: Revealed type is "django.db.models.fields.IntegerField[builtins.int, builtins.int]"
- case: fields_inside_mixins_used_in_model_subclasses_resolved_as_primitives
main: |
from myapp.models import MyModel, AuthMixin
reveal_type(MyModel().username) # N: Revealed type is 'builtins.str*'
reveal_type(MyModel().username) # N: Revealed type is "builtins.str*"
installed_apps:
- myapp
files:
@@ -159,9 +159,9 @@
class Book(models.Model):
published = cast(models.Field[Year, Year], models.IntegerField())
book = Book()
reveal_type(book.published) # N: Revealed type is 'main.Year*'
reveal_type(book.published) # N: Revealed type is "main.Year*"
book.published = 2006 # E: Incompatible types in assignment (expression has type "int", variable has type "Year")
book.published = Year(2006)
reveal_type(book.published) # N: Revealed type is 'main.Year*'
reveal_type(book.published) # N: Revealed type is "main.Year*"
def accepts_int(arg: int) -> None: ...
accepts_int(book.published)

View File

@@ -6,7 +6,7 @@
Tag(content_object=myuser)
Tag.objects.create(content_object=None)
Tag.objects.create(content_object=myuser)
reveal_type(Tag().content_object) # N: Revealed type is 'Union[Any, None]'
reveal_type(Tag().content_object) # N: Revealed type is "Union[Any, None]"
installed_apps:
- myapp
files:
@@ -27,7 +27,7 @@
Tag(content_object=myuser)
Tag.objects.create(content_object=None)
Tag.objects.create(content_object=myuser)
reveal_type(Tag().content_object) # N: Revealed type is 'Union[Any, None]'
reveal_type(Tag().content_object) # N: Revealed type is "Union[Any, None]"
installed_apps:
- myapp
files:

View File

@@ -1,8 +1,8 @@
- case: nullable_field_with_strict_optional_true
main: |
from myapp.models import MyModel
reveal_type(MyModel().text) # N: Revealed type is 'builtins.str*'
reveal_type(MyModel().text_nullable) # N: Revealed type is 'Union[builtins.str, None]'
reveal_type(MyModel().text) # N: Revealed type is "builtins.str*"
reveal_type(MyModel().text_nullable) # N: Revealed type is "Union[builtins.str, None]"
MyModel().text = None # E: Incompatible types in assignment (expression has type "None", variable has type "Union[str, int, Combinable]")
MyModel().text_nullable = None
installed_apps:
@@ -19,7 +19,7 @@
- case: nullable_array_field
main: |
from myapp.models import MyModel
reveal_type(MyModel().lst) # N: Revealed type is 'Union[builtins.list[builtins.str], None]'
reveal_type(MyModel().lst) # N: Revealed type is "Union[builtins.list[builtins.str], None]"
installed_apps:
- myapp
files:
@@ -35,7 +35,7 @@
- case: nullable_foreign_key
main: |
from myapp.models import Publisher, Book
reveal_type(Book().publisher) # N: Revealed type is 'Union[myapp.models.Publisher, None]'
reveal_type(Book().publisher) # N: Revealed type is "Union[myapp.models.Publisher, None]"
Book().publisher = 11 # E: Incompatible types in assignment (expression has type "int", variable has type "Union[Publisher, Combinable, None]")
installed_apps:
- myapp
@@ -55,8 +55,8 @@
from myapp.models import Inventory
parent = Inventory()
core = Inventory(parent_id=parent.id)
reveal_type(core.parent_id) # N: Revealed type is 'Union[builtins.int, None]'
reveal_type(core.parent) # N: Revealed type is 'Union[myapp.models.Inventory, None]'
reveal_type(core.parent_id) # N: Revealed type is "Union[builtins.int, None]"
reveal_type(core.parent) # N: Revealed type is "Union[myapp.models.Inventory, None]"
Inventory(parent=None)
Inventory(parent_id=None)
installed_apps:

View File

@@ -2,7 +2,7 @@
main: |
from myapp.models import User
user = User(array=[])
reveal_type(user.array) # N: Revealed type is 'builtins.list*[Any]'
reveal_type(user.array) # N: Revealed type is "builtins.list*[Any]"
installed_apps:
- myapp
files:
@@ -19,8 +19,8 @@
main: |
from myapp.models import User
user = User()
reveal_type(user.members) # N: Revealed type is 'builtins.list*[builtins.int]'
reveal_type(user.members_as_text) # N: Revealed type is 'builtins.list*[builtins.str]'
reveal_type(user.members) # N: Revealed type is "builtins.list*[builtins.int]"
reveal_type(user.members_as_text) # N: Revealed type is "builtins.list*[builtins.str]"
installed_apps:
- myapp
files:

View File

@@ -2,9 +2,9 @@
main: |
from myapp.models import Book, Publisher
book = Book()
reveal_type(book.publisher) # N: Revealed type is 'myapp.models.Publisher*'
reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher*"
publisher = Publisher()
reveal_type(publisher.books) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Book]'
reveal_type(publisher.books) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Book]"
installed_apps:
- myapp
files:
@@ -22,8 +22,8 @@
main: |
from myapp.models import Book
book = Book()
reveal_type(book.publisher_id) # N: Revealed type is 'builtins.int*'
reveal_type(book.owner_id) # N: Revealed type is 'builtins.int*'
reveal_type(book.publisher_id) # N: Revealed type is "builtins.int*"
reveal_type(book.owner_id) # N: Revealed type is "builtins.int*"
installed_apps:
- django.contrib.auth
- myapp
@@ -42,12 +42,12 @@
main: |
from myapp.models import Book, Publisher
book = Book()
reveal_type(book.publisher) # N: Revealed type is 'myapp.models.Publisher*'
reveal_type(book.publisher2) # N: Revealed type is 'myapp.models.Publisher*'
reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher*"
reveal_type(book.publisher2) # N: Revealed type is "myapp.models.Publisher*"
publisher = Publisher()
reveal_type(publisher.books) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Book]'
reveal_type(publisher.books2) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Book]'
reveal_type(publisher.books) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Book]"
reveal_type(publisher.books2) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Book]"
installed_apps:
- myapp
files:
@@ -66,7 +66,7 @@
main: |
from myapp2.models import Book
book = Book()
reveal_type(book.publisher) # N: Revealed type is 'myapp.models.Publisher*'
reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher*"
installed_apps:
- myapp
- myapp2
@@ -87,8 +87,8 @@
- case: one_to_one_field_no_related_name
main: |
from myapp.models import User, Profile
reveal_type(User().profile) # N: Revealed type is 'myapp.models.Profile'
reveal_type(Profile().user) # N: Revealed type is 'myapp.models.User*'
reveal_type(User().profile) # N: Revealed type is "myapp.models.Profile"
reveal_type(Profile().user) # N: Revealed type is "myapp.models.User*"
installed_apps:
- myapp
files:
@@ -113,10 +113,10 @@
from django.db import models
class App(models.Model):
def method(self) -> None:
reveal_type(self.views) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.View]'
reveal_type(self.members) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Member]'
reveal_type(self.sheets) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Sheet]'
reveal_type(self.profile) # N: Revealed type is 'myapp.models.Profile'
reveal_type(self.views) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.View]"
reveal_type(self.members) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Member]"
reveal_type(self.sheets) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Sheet]"
reveal_type(self.profile) # N: Revealed type is "myapp.models.Profile"
class View(models.Model):
app = models.ForeignKey(to=App, related_name='views', on_delete=models.CASCADE)
class Member(models.Model):
@@ -129,10 +129,10 @@
- case: test_circular_dependency_in_imports_with_string_based
main: |
from myapp.models import View
reveal_type(View().app.views) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.View]'
reveal_type(View().app.views) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.View]"
reveal_type(View().app.unknown)
out: |
main:3: note: Revealed type is 'Any'
main:3: note: Revealed type is "Any"
main:3: error: "App" has no attribute "unknown"
installed_apps:
- myapp
@@ -151,13 +151,13 @@
from django.db import models
class App(models.Model):
def method(self) -> None:
reveal_type(self.views) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.View]'
reveal_type(self.views) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.View]"
- case: models_related_managers_work_with_direct_model_inheritance_and_with_inheritance_from_other_model
main: |
from myapp.models import App
reveal_type(App().views) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.View]'
reveal_type(App().views2) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.View2]'
reveal_type(App().views) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.View]"
reveal_type(App().views2) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.View2]"
installed_apps:
- myapp
files:
@@ -175,7 +175,7 @@
- case: models_imported_inside_init_file_foreign_key
main: |
from myapp2.models import View
reveal_type(View().app.views) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp2.models.View]'
reveal_type(View().app.views) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp2.models.View]"
installed_apps:
- myapp
- myapp2
@@ -200,8 +200,8 @@
- case: models_imported_inside_init_file_one_to_one_field
main: |
from myapp2.models import Profile
reveal_type(Profile().user) # N: Revealed type is 'myapp.models.user.User*'
reveal_type(Profile().user.profile) # N: Revealed type is 'myapp2.models.Profile'
reveal_type(Profile().user) # N: Revealed type is "myapp.models.user.User*"
reveal_type(Profile().user.profile) # N: Revealed type is "myapp2.models.Profile"
installed_apps:
- myapp
- myapp2
@@ -226,8 +226,8 @@
- case: models_triple_circular_reference
main: |
from myapp.models import App
reveal_type(App().owner) # N: Revealed type is 'myapp.models.user.User*'
reveal_type(App().owner.profile) # N: Revealed type is 'myapp.models.profile.Profile'
reveal_type(App().owner) # N: Revealed type is "myapp.models.user.User*"
reveal_type(App().owner.profile) # N: Revealed type is "myapp.models.profile.Profile"
installed_apps:
- myapp
files:
@@ -256,8 +256,8 @@
- case: many_to_many_field_converts_to_queryset_of_model_type
main: |
from myapp.models import App, Member
reveal_type(Member().apps) # N: Revealed type is 'django.db.models.manager.RelatedManager*[myapp.models.App]'
reveal_type(App().members) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Member]'
reveal_type(Member().apps) # N: Revealed type is "django.db.models.manager.RelatedManager*[myapp.models.App]"
reveal_type(App().members) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Member]"
installed_apps:
- myapp
files:
@@ -273,7 +273,7 @@
- case: many_to_many_works_with_string_if_imported
main: |
from myapp.models import Member
reveal_type(Member().apps) # N: Revealed type is 'django.db.models.manager.RelatedManager*[myapp2.models.App]'
reveal_type(Member().apps) # N: Revealed type is "django.db.models.manager.RelatedManager*[myapp2.models.App]"
installed_apps:
- myapp
- myapp2
@@ -294,7 +294,7 @@
- case: foreign_key_with_self
main: |
from myapp.models import User
reveal_type(User().parent) # N: Revealed type is 'myapp.models.User*'
reveal_type(User().parent) # N: Revealed type is "myapp.models.User*"
installed_apps:
- myapp
files:
@@ -308,7 +308,7 @@
- case: many_to_many_with_self
main: |
from myapp.models import User
reveal_type(User().friends) # N: Revealed type is 'django.db.models.manager.RelatedManager*[myapp.models.User]'
reveal_type(User().friends) # N: Revealed type is "django.db.models.manager.RelatedManager*[myapp.models.User]"
installed_apps:
- myapp
files:
@@ -339,7 +339,7 @@
- case: if_no_related_name_is_passed_create_default_related_managers
main: |
from myapp.models import Publisher
reveal_type(Publisher().book_set) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Book]'
reveal_type(Publisher().book_set) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Book]"
installed_apps:
- myapp
files:
@@ -357,14 +357,14 @@
import datetime
from myapp.models import Book, Book2
reveal_type(Book().publisher_id) # N: Revealed type is 'builtins.str*'
reveal_type(Book().publisher_id) # N: Revealed type is "builtins.str*"
Book(publisher_id=1)
Book(publisher_id='hello')
Book(publisher_id=datetime.datetime.now()) # E: Incompatible type for "publisher_id" of "Book" (got "datetime", expected "Union[str, int, Combinable, None]")
Book.objects.create(publisher_id=1)
Book.objects.create(publisher_id='hello')
reveal_type(Book2().publisher_id) # N: Revealed type is 'builtins.int*'
reveal_type(Book2().publisher_id) # N: Revealed type is "builtins.int*"
Book2(publisher_id=1)
Book2(publisher_id=[]) # E: Incompatible type for "publisher_id" of "Book2" (got "List[Any]", expected "Union[float, int, str, Combinable, None]")
Book2.objects.create(publisher_id=1)
@@ -390,7 +390,7 @@
- case: if_model_is_defined_as_name_of_the_class_look_for_it_in_the_same_app
main: |
from myapp.models import Book
reveal_type(Book().publisher) # N: Revealed type is 'myapp.models.publisher.Publisher*'
reveal_type(Book().publisher) # N: Revealed type is "myapp.models.publisher.Publisher*"
installed_apps:
- myapp
files:
@@ -437,14 +437,14 @@
main: |
from myapp.models import Book, Publisher
book = Book()
reveal_type(book.publisher) # N: Revealed type is 'myapp.models.Publisher*'
reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher*"
publisher = Publisher()
reveal_type(publisher.books)
reveal_type(publisher.books2) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Book]'
reveal_type(publisher.books2) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Book]"
out: |
main:6: error: "Publisher" has no attribute "books"; maybe "books2"?
main:6: note: Revealed type is 'Any'
main:6: note: Revealed type is "Any"
installed_apps:
- myapp
files:
@@ -464,7 +464,7 @@
main: |
from myapp.models import Book
book = Book()
reveal_type(book.publisher) # N: Revealed type is 'myapp.models.Publisher*'
reveal_type(book.publisher) # N: Revealed type is "myapp.models.Publisher*"
custom_settings: |
INSTALLED_APPS = ('django.contrib.contenttypes', 'myapp')
BOOK_RELATED_MODEL = 'myapp.Publisher'
@@ -484,7 +484,7 @@
- case: foreign_key_with_custom_app_name
main: |
from myapp.models import MyMain
reveal_type(MyMain().user) # N: Revealed type is 'myapp2.models.MyUser*'
reveal_type(MyMain().user) # N: Revealed type is "myapp2.models.MyUser*"
installed_apps:
- myapp
- myapp2.apps.MyApp2Config
@@ -512,7 +512,7 @@
- case: related_field_to_extracted_from_function
main: |
from myapp.models import Profile
reveal_type(Profile().user) # N: Revealed type is 'myapp.models.User*'
reveal_type(Profile().user) # N: Revealed type is "myapp.models.User*"
installed_apps:
- myapp
files:
@@ -531,8 +531,8 @@
- case: related_manager_name_defined_by_pattern
main: |
from myapp.models import Publisher
reveal_type(Publisher().books) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Book]'
reveal_type(Publisher().articles) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Article]'
reveal_type(Publisher().books) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Book]"
reveal_type(Publisher().articles) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Article]"
installed_apps:
- myapp
files:
@@ -555,9 +555,9 @@
- case: test_related_fields_returned_as_descriptors_from_model_class
main: |
from myapp.models import Author, Blog, Publisher, Profile
reveal_type(Author.blogs) # N: Revealed type is 'django.db.models.fields.related_descriptors.ManyToManyDescriptor'
reveal_type(Blog.publisher) # N: Revealed type is 'django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor'
reveal_type(Publisher.profile) # N: Revealed type is 'django.db.models.fields.related_descriptors.ForwardOneToOneDescriptor'
reveal_type(Author.blogs) # N: Revealed type is "django.db.models.fields.related_descriptors.ManyToManyDescriptor"
reveal_type(Blog.publisher) # N: Revealed type is "django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor"
reveal_type(Publisher.profile) # N: Revealed type is "django.db.models.fields.related_descriptors.ForwardOneToOneDescriptor"
installed_apps:
- myapp
files:
@@ -579,12 +579,12 @@
- case: test_foreign_key_from_superclass_inherits_correctly
main: |
from myapp.models import MyUser, Book, Article, LibraryEntity
reveal_type(Book().registered_by_user) # N: Revealed type is 'myapp.models.MyUser*'
reveal_type(Article().registered_by_user) # N: Revealed type is 'myapp.models.MyUser*'
reveal_type(Book().registered_by_user) # N: Revealed type is "myapp.models.MyUser*"
reveal_type(Article().registered_by_user) # N: Revealed type is "myapp.models.MyUser*"
user = MyUser()
reveal_type(user.book_set) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Book]'
reveal_type(user.article_set) # N: Revealed type is 'django.db.models.manager.RelatedManager[myapp.models.Article]'
reveal_type(user.book_set) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Book]"
reveal_type(user.article_set) # N: Revealed type is "django.db.models.manager.RelatedManager[myapp.models.Article]"
installed_apps:
- myapp
files:
@@ -629,11 +629,11 @@
- case: resolve_primary_keys_for_foreign_keys_with_abstract_self_model
main: |
from myapp.models import User
reveal_type(User().parent) # N: Revealed type is 'myapp.models.User*'
reveal_type(User().parent_id) # N: Revealed type is 'builtins.int*'
reveal_type(User().parent) # N: Revealed type is "myapp.models.User*"
reveal_type(User().parent_id) # N: Revealed type is "builtins.int*"
reveal_type(User().parent2) # N: Revealed type is 'Union[myapp.models.User, None]'
reveal_type(User().parent2_id) # N: Revealed type is 'Union[builtins.int, None]'
reveal_type(User().parent2) # N: Revealed type is "Union[myapp.models.User, None]"
reveal_type(User().parent2_id) # N: Revealed type is "Union[builtins.int, None]"
installed_apps:
- myapp
files:
@@ -653,12 +653,12 @@
- case: related_manager_is_a_subclass_of_default_manager
main: |
from myapp.models import User, Order, Product
reveal_type(User().orders) # N: Revealed type is 'myapp.models.User_Order_RelatedManager1'
reveal_type(User().orders.get()) # N: Revealed type is 'myapp.models.Order*'
reveal_type(User().orders.manager_method()) # N: Revealed type is 'builtins.int'
reveal_type(Order().products) # N: Revealed type is 'myapp.models.Order_Product_RelatedManager1'
reveal_type(Order().products.get()) # N: Revealed type is 'myapp.models.Product*'
reveal_type(Order().products.queryset_method()) # N: Revealed type is 'builtins.int'
reveal_type(User().orders) # N: Revealed type is "myapp.models.User_Order_RelatedManager1"
reveal_type(User().orders.get()) # N: Revealed type is "myapp.models.Order*"
reveal_type(User().orders.manager_method()) # N: Revealed type is "builtins.int"
reveal_type(Order().products) # N: Revealed type is "myapp.models.Order_Product_RelatedManager1"
reveal_type(Order().products.get()) # N: Revealed type is "myapp.models.Product*"
reveal_type(Order().products.queryset_method()) # N: Revealed type is "builtins.int"
# TODO: realted manager support to use the same type for all related managers
if 1 == 2:
manager = User().products

View File

@@ -3,22 +3,22 @@
from myapp.models import Blog
qs = Blog.objects.all()
reveal_type(qs) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.Blog]'
reveal_type(qs.get(id=1)) # N: Revealed type is 'myapp.models.Blog*'
reveal_type(iter(qs)) # N: Revealed type is 'typing.Iterator[myapp.models.Blog*]'
reveal_type(qs.iterator()) # N: Revealed type is 'typing.Iterator[myapp.models.Blog*]'
reveal_type(qs.first()) # N: Revealed type is 'Union[myapp.models.Blog*, None]'
reveal_type(qs.earliest()) # N: Revealed type is 'myapp.models.Blog*'
reveal_type(qs[0]) # N: Revealed type is 'myapp.models.Blog*'
reveal_type(qs[:9]) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.Blog]'
reveal_type(qs.in_bulk()) # N: Revealed type is 'builtins.dict[Any, myapp.models.Blog*]'
reveal_type(qs) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Blog]"
reveal_type(qs.get(id=1)) # N: Revealed type is "myapp.models.Blog*"
reveal_type(iter(qs)) # N: Revealed type is "typing.Iterator[myapp.models.Blog*]"
reveal_type(qs.iterator()) # N: Revealed type is "typing.Iterator[myapp.models.Blog*]"
reveal_type(qs.first()) # N: Revealed type is "Union[myapp.models.Blog*, None]"
reveal_type(qs.earliest()) # N: Revealed type is "myapp.models.Blog*"
reveal_type(qs[0]) # N: Revealed type is "myapp.models.Blog*"
reveal_type(qs[:9]) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Blog]"
reveal_type(qs.in_bulk()) # N: Revealed type is "builtins.dict[Any, myapp.models.Blog*]"
# .dates / .datetimes
reveal_type(Blog.objects.dates("created_at", "day")) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Blog*, datetime.date]'
reveal_type(Blog.objects.datetimes("created_at", "day")) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Blog*, datetime.datetime]'
reveal_type(Blog.objects.dates("created_at", "day")) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Blog*, datetime.date]"
reveal_type(Blog.objects.datetimes("created_at", "day")) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Blog*, datetime.datetime]"
# AND-ing QuerySets
reveal_type(Blog.objects.all() & Blog.objects.all()) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.Blog]'
reveal_type(Blog.objects.all() & Blog.objects.all()) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Blog]"
installed_apps:
- myapp
files:
@@ -34,7 +34,7 @@
- case: queryset_missing_method
main: |
from myapp.models import User
reveal_type(User.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.User]'
reveal_type(User.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.User]"
User.objects.not_existing_method() # E: "Manager[User]" has no attribute "not_existing_method"
installed_apps:
- myapp
@@ -44,4 +44,4 @@
content: |
from django.db import models
class User(models.Model):
pass
pass

View File

@@ -1,9 +1,9 @@
- case: from_queryset_with_base_manager
main: |
from myapp.models import MyModel
reveal_type(MyModel().objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
reveal_type(MyModel().objects.get()) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is 'builtins.str'
reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.MyModel_NewManager[myapp.models.MyModel]"
reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -23,9 +23,9 @@
- case: from_queryset_with_manager
main: |
from myapp.models import MyModel
reveal_type(MyModel().objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
reveal_type(MyModel().objects.get()) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is 'builtins.str'
reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.MyModel_NewManager[myapp.models.MyModel]"
reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -45,11 +45,11 @@
- case: from_queryset_returns_intersection_of_manager_and_queryset
main: |
from myapp.models import MyModel, NewManager
reveal_type(NewManager()) # N: Revealed type is 'myapp.models.NewManager'
reveal_type(MyModel.objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
reveal_type(MyModel.objects.get()) # N: Revealed type is 'Any'
reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is 'builtins.int'
reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is 'builtins.str'
reveal_type(NewManager()) # N: Revealed type is "myapp.models.NewManager"
reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.MyModel_NewManager[myapp.models.MyModel]"
reveal_type(MyModel.objects.get()) # N: Revealed type is "Any"
reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is "builtins.int"
reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -71,11 +71,11 @@
- case: from_queryset_with_class_name_provided
main: |
from myapp.models import MyModel, NewManager
reveal_type(NewManager()) # N: Revealed type is 'myapp.models.NewManager'
reveal_type(MyModel.objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
reveal_type(MyModel.objects.get()) # N: Revealed type is 'Any'
reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is 'builtins.int'
reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is 'builtins.str'
reveal_type(NewManager()) # N: Revealed type is "myapp.models.NewManager"
reveal_type(MyModel.objects) # N: Revealed type is "myapp.models.MyModel_NewManager[myapp.models.MyModel]"
reveal_type(MyModel.objects.get()) # N: Revealed type is "Any"
reveal_type(MyModel.objects.manager_only_method()) # N: Revealed type is "builtins.int"
reveal_type(MyModel.objects.manager_and_queryset_method()) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -97,9 +97,9 @@
- case: from_queryset_with_class_inheritance
main: |
from myapp.models import MyModel
reveal_type(MyModel().objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
reveal_type(MyModel().objects.get()) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is 'builtins.str'
reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.MyModel_NewManager[myapp.models.MyModel]"
reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(MyModel().objects.queryset_method()) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -121,10 +121,10 @@
- case: from_queryset_with_manager_in_another_directory_and_imports
main: |
from myapp.models import MyModel
reveal_type(MyModel().objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
reveal_type(MyModel().objects.get()) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(MyModel().objects.queryset_method) # N: Revealed type is 'def (param: Union[builtins.str, None] =) -> Union[builtins.str, None]'
reveal_type(MyModel().objects.queryset_method('str')) # N: Revealed type is 'Union[builtins.str, None]'
reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.MyModel_NewManager[myapp.models.MyModel]"
reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(MyModel().objects.queryset_method) # N: Revealed type is "def (param: Union[builtins.str, None] =) -> Union[builtins.str, None]"
reveal_type(MyModel().objects.queryset_method('str')) # N: Revealed type is "Union[builtins.str, None]"
installed_apps:
- myapp
files:
@@ -151,10 +151,10 @@
disable_cache: true
main: |
from myapp.models import MyModel
reveal_type(MyModel().objects) # N: Revealed type is 'myapp.models.MyModel_NewManager[myapp.models.MyModel]'
reveal_type(MyModel().objects.get()) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(MyModel().objects.base_queryset_method) # N: Revealed type is 'def (param: Union[builtins.int, builtins.str]) -> <nothing>'
reveal_type(MyModel().objects.base_queryset_method(2)) # N: Revealed type is '<nothing>'
reveal_type(MyModel().objects) # N: Revealed type is "myapp.models.MyModel_NewManager[myapp.models.MyModel]"
reveal_type(MyModel().objects.get()) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(MyModel().objects.base_queryset_method) # N: Revealed type is "def (param: Union[builtins.int, builtins.str]) -> <nothing>"
reveal_type(MyModel().objects.base_queryset_method(2)) # N: Revealed type is "<nothing>"
installed_apps:
- myapp
files:
@@ -178,4 +178,4 @@
from django.db import models
class BaseQuerySet(models.QuerySet):
def base_queryset_method(self, param: Union[int, str]) -> NoReturn:
raise ValueError
raise ValueError

View File

@@ -2,13 +2,13 @@
main: |
from myapp.models import Blog
values = Blog.objects.values('num_posts', 'text').get()
reveal_type(values) # N: Revealed type is 'TypedDict({'num_posts': builtins.int, 'text': builtins.str})'
reveal_type(values["num_posts"]) # N: Revealed type is 'builtins.int'
reveal_type(values["text"]) # N: Revealed type is 'builtins.str'
reveal_type(values) # N: Revealed type is "TypedDict({'num_posts': builtins.int, 'text': builtins.str})"
reveal_type(values["num_posts"]) # N: Revealed type is "builtins.int"
reveal_type(values["text"]) # N: Revealed type is "builtins.str"
values_pk = Blog.objects.values('pk').get()
reveal_type(values_pk) # N: Revealed type is 'TypedDict({'pk': builtins.int})'
reveal_type(values_pk["pk"]) # N: Revealed type is 'builtins.int'
reveal_type(values_pk) # N: Revealed type is "TypedDict({'pk': builtins.int})"
reveal_type(values_pk["pk"]) # N: Revealed type is "builtins.int"
installed_apps:
- myapp
files:
@@ -24,10 +24,10 @@
main: |
from myapp.models import Blog
all_values_dict = Blog.objects.values().get()
reveal_type(all_values_dict) # N: Revealed type is 'TypedDict({'id': builtins.int, 'num_posts': builtins.int, 'text': builtins.str})'
reveal_type(all_values_dict["id"]) # N: Revealed type is 'builtins.int'
reveal_type(all_values_dict["num_posts"]) # N: Revealed type is 'builtins.int'
reveal_type(all_values_dict["text"]) # N: Revealed type is 'builtins.str'
reveal_type(all_values_dict) # N: Revealed type is "TypedDict({'id': builtins.int, 'num_posts': builtins.int, 'text': builtins.str})"
reveal_type(all_values_dict["id"]) # N: Revealed type is "builtins.int"
reveal_type(all_values_dict["num_posts"]) # N: Revealed type is "builtins.int"
reveal_type(all_values_dict["text"]) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -45,16 +45,16 @@
main: |
from myapp.models import Blog
values1 = Blog.objects.values('publisher').get()
reveal_type(values1) # N: Revealed type is 'TypedDict({'publisher': builtins.int})'
reveal_type(values1['publisher']) # N: Revealed type is 'builtins.int'
reveal_type(values1) # N: Revealed type is "TypedDict({'publisher': builtins.int})"
reveal_type(values1['publisher']) # N: Revealed type is "builtins.int"
values2 = Blog.objects.values('publisher_id').get()
reveal_type(values2) # N: Revealed type is 'TypedDict({'publisher_id': builtins.int})'
reveal_type(values2["publisher_id"]) # N: Revealed type is 'builtins.int'
reveal_type(values2) # N: Revealed type is "TypedDict({'publisher_id': builtins.int})"
reveal_type(values2["publisher_id"]) # N: Revealed type is "builtins.int"
# all values return _id version
all_values = Blog.objects.values().get()
reveal_type(all_values) # N: Revealed type is 'TypedDict({'id': builtins.int, 'publisher_id': builtins.int})'
reveal_type(all_values) # N: Revealed type is "TypedDict({'id': builtins.int, 'publisher_id': builtins.int})"
installed_apps:
- myapp
files:
@@ -71,10 +71,10 @@
main: |
from myapp.models import Entry
values = Entry.objects.values('blog__num_articles', 'blog__publisher__name').get()
reveal_type(values) # N: Revealed type is 'TypedDict({'blog__num_articles': builtins.int, 'blog__publisher__name': builtins.str})'
reveal_type(values) # N: Revealed type is "TypedDict({'blog__num_articles': builtins.int, 'blog__publisher__name': builtins.str})"
pk_values = Entry.objects.values('blog__pk', 'blog__publisher__pk').get()
reveal_type(pk_values) # N: Revealed type is 'TypedDict({'blog__pk': builtins.int, 'blog__publisher__pk': builtins.int})'
reveal_type(pk_values) # N: Revealed type is "TypedDict({'blog__pk': builtins.int, 'blog__publisher__pk': builtins.int})"
installed_apps:
- myapp
files:
@@ -94,7 +94,7 @@
main: |
from myapp.models import Publisher
related_model_values = Publisher.objects.values('id', 'blog__name').get()
reveal_type(related_model_values) # N: Revealed type is 'TypedDict({'id': builtins.int, 'blog__name': builtins.str})'
reveal_type(related_model_values) # N: Revealed type is "TypedDict({'id': builtins.int, 'blog__name': builtins.str})"
installed_apps:
- myapp
files:
@@ -111,8 +111,8 @@
- case: values_of_many_to_many_field
main: |
from myapp.models import Author, Book
reveal_type(Book.objects.values('authors')) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Book, TypedDict({'authors': builtins.int})]'
reveal_type(Author.objects.values('books')) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Author, TypedDict({'books': builtins.int})]'
reveal_type(Book.objects.values('authors')) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Book, TypedDict({'authors': builtins.int})]"
reveal_type(Author.objects.values('books')) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Author, TypedDict({'books': builtins.int})]"
installed_apps:
- myapp
files:

View File

@@ -1,20 +1,20 @@
- case: values_list_simple_field_returns_queryset_of_tuples
main: |
from myapp.models import MyUser
reveal_type(MyUser.objects.values_list('name').get()) # N: Revealed type is 'Tuple[builtins.str]'
reveal_type(MyUser.objects.values_list('id', 'name').get()) # N: Revealed type is 'Tuple[builtins.int, builtins.str]'
reveal_type(MyUser.objects.values_list('name').get()) # N: Revealed type is "Tuple[builtins.str]"
reveal_type(MyUser.objects.values_list('id', 'name').get()) # N: Revealed type is "Tuple[builtins.int, builtins.str]"
values_tuple = MyUser.objects.values_list('name', 'age').get()
reveal_type(values_tuple[0]) # N: Revealed type is 'builtins.str'
reveal_type(values_tuple[1]) # N: Revealed type is 'builtins.int'
reveal_type(values_tuple[0]) # N: Revealed type is "builtins.str"
reveal_type(values_tuple[1]) # N: Revealed type is "builtins.int"
# no fields specified return all fields
all_values_tuple = MyUser.objects.values_list().get()
reveal_type(all_values_tuple) # N: Revealed type is 'Tuple[builtins.int, builtins.str, builtins.int]'
reveal_type(all_values_tuple) # N: Revealed type is "Tuple[builtins.int, builtins.str, builtins.int]"
# pk as field
pk_values = MyUser.objects.values_list('pk').get()
reveal_type(pk_values) # N: # N: Revealed type is 'Tuple[builtins.int]'
reveal_type(pk_values) # N: # N: Revealed type is "Tuple[builtins.int]"
installed_apps:
- myapp
files:
@@ -30,13 +30,13 @@
main: |
from myapp.models import Post, Blog
values_tuple = Post.objects.values_list('blog', 'blog__num_posts', 'blog__publisher', 'blog__publisher__name').get()
reveal_type(values_tuple[0]) # N: Revealed type is 'myapp.models.Blog'
reveal_type(values_tuple[1]) # N: Revealed type is 'builtins.int'
reveal_type(values_tuple[2]) # N: Revealed type is 'myapp.models.Publisher'
reveal_type(values_tuple[3]) # N: Revealed type is 'builtins.str'
reveal_type(values_tuple[0]) # N: Revealed type is "myapp.models.Blog"
reveal_type(values_tuple[1]) # N: Revealed type is "builtins.int"
reveal_type(values_tuple[2]) # N: Revealed type is "myapp.models.Publisher"
reveal_type(values_tuple[3]) # N: Revealed type is "builtins.str"
reverse_fields_list = Blog.objects.values_list('post__text').get()
reveal_type(reverse_fields_list) # N: Revealed type is 'Tuple[builtins.str]'
reveal_type(reverse_fields_list) # N: Revealed type is "Tuple[builtins.str]"
installed_apps:
- myapp
files:
@@ -56,15 +56,15 @@
- case: values_list_flat_true_methods
main: |
from myapp.models import MyUser, MyUser2
reveal_type(MyUser.objects.values_list('name', flat=True).get()) # N: Revealed type is 'builtins.str*'
reveal_type(MyUser.objects.values_list('name', flat=True).get()) # N: Revealed type is "builtins.str*"
reveal_type(MyUser.objects.values_list('name', 'age', flat=True).get())
# flat=True without specified fields returns primary key values
reveal_type(MyUser.objects.values_list(flat=True)[0]) # N: Revealed type is 'builtins.int*'
reveal_type(MyUser2.objects.values_list(flat=True)[0]) # N: Revealed type is 'builtins.str*'
reveal_type(MyUser.objects.values_list(flat=True)[0]) # N: Revealed type is "builtins.int*"
reveal_type(MyUser2.objects.values_list(flat=True)[0]) # N: Revealed type is "builtins.str*"
out: |
main:3: error: 'flat' is not valid when 'values_list' is called with more than one field
main:3: note: Revealed type is 'Any'
main:3: note: Revealed type is "Any"
installed_apps:
- myapp
files:
@@ -82,26 +82,26 @@
main: |
from myapp.models import MyUser
values_named_tuple = MyUser.objects.values_list('name', 'age', named=True).get()
reveal_type(values_named_tuple) # N: Revealed type is 'Tuple[builtins.str, builtins.int, fallback=main.Row]'
reveal_type(values_named_tuple.name) # N: Revealed type is 'builtins.str'
reveal_type(values_named_tuple.age) # N: Revealed type is 'builtins.int'
reveal_type(values_named_tuple) # N: Revealed type is "Tuple[builtins.str, builtins.int, fallback=main.Row]"
reveal_type(values_named_tuple.name) # N: Revealed type is "builtins.str"
reveal_type(values_named_tuple.age) # N: Revealed type is "builtins.int"
# no fields specified, returns all fields namedtuple
all_values_named_tuple = MyUser.objects.values_list(named=True).get()
reveal_type(all_values_named_tuple.id) # N: Revealed type is 'builtins.int'
reveal_type(all_values_named_tuple.name) # N: Revealed type is 'builtins.str'
reveal_type(all_values_named_tuple.age) # N: Revealed type is 'builtins.int'
reveal_type(all_values_named_tuple.is_admin) # N: Revealed type is 'builtins.bool'
reveal_type(all_values_named_tuple.id) # N: Revealed type is "builtins.int"
reveal_type(all_values_named_tuple.name) # N: Revealed type is "builtins.str"
reveal_type(all_values_named_tuple.age) # N: Revealed type is "builtins.int"
reveal_type(all_values_named_tuple.is_admin) # N: Revealed type is "builtins.bool"
# pk as field
pk_values = MyUser.objects.values_list('pk', named=True).get()
reveal_type(pk_values) # N: Revealed type is 'Tuple[builtins.int, fallback=main.Row2]'
reveal_type(pk_values.pk) # N: # N: Revealed type is 'builtins.int'
reveal_type(pk_values) # N: Revealed type is "Tuple[builtins.int, fallback=main.Row2]"
reveal_type(pk_values.pk) # N: # N: Revealed type is "builtins.int"
# values_list(named=True) inside function
def func() -> None:
from myapp.models import MyUser
reveal_type(MyUser.objects.values_list('name', named=True).get()) # N: Revealed type is 'Tuple[builtins.str, fallback=main.Row3]'
reveal_type(MyUser.objects.values_list('name', named=True).get()) # N: Revealed type is "Tuple[builtins.str, fallback=main.Row3]"
installed_apps:
- myapp
files:
@@ -120,7 +120,7 @@
reveal_type(MyUser.objects.values_list('name', flat=True, named=True).get())
out: |
main:2: error: 'flat' and 'named' can't be used together
main:2: note: Revealed type is 'Any'
main:2: note: Revealed type is "Any"
installed_apps:
- myapp
files:
@@ -140,12 +140,12 @@
reveal_type(Blog.objects.values_list('publisher__unknown').get())
out: |
main:2: error: Cannot resolve keyword 'unknown' into field. Choices are: id, publisher, publisher_id
main:2: note: Revealed type is 'Any'
main:2: note: Revealed type is "Any"
main:3: error: Cannot resolve keyword 'unknown' into field. Choices are: id, publisher, publisher_id
main:3: note: Revealed type is 'Any'
main:3: note: Revealed type is "Any"
main:4: error: Cannot resolve keyword 'unknown' into field. Choices are: id, publisher, publisher_id
main:4: note: Revealed type is 'Any'
main:5: note: Revealed type is 'Tuple[Any]'
main:4: note: Revealed type is "Any"
main:5: note: Revealed type is "Tuple[Any]"
installed_apps:
- myapp
files:
@@ -162,16 +162,16 @@
main: |
from myapp.models import Entry, Blog
values = Entry.objects.values_list('blog__num_articles', 'blog__publisher__name', named=True).get()
reveal_type(values.blog__num_articles) # N: Revealed type is 'builtins.int'
reveal_type(values.blog__publisher__name) # N: Revealed type is 'builtins.str'
reveal_type(values.blog__num_articles) # N: Revealed type is "builtins.int"
reveal_type(values.blog__publisher__name) # N: Revealed type is "builtins.str"
pk_values = Entry.objects.values_list('blog__pk', 'blog__publisher__pk', named=True).get()
reveal_type(pk_values.blog__pk) # N: Revealed type is 'builtins.int'
reveal_type(pk_values.blog__publisher__pk) # N: Revealed type is 'builtins.int'
reveal_type(pk_values.blog__pk) # N: Revealed type is "builtins.int"
reveal_type(pk_values.blog__publisher__pk) # N: Revealed type is "builtins.int"
# reverse relation
reverse_values = Blog.objects.values_list('entry__text', named=True).get()
reveal_type(reverse_values.entry__text) # N: Revealed type is 'builtins.str'
reveal_type(reverse_values.entry__text) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -191,10 +191,10 @@
- case: values_list_flat_true_with_ids
main: |
from myapp.models import Blog, Publisher
reveal_type(Blog.objects.values_list('id', flat=True)) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Blog, builtins.int]'
reveal_type(Blog.objects.values_list('publisher_id', flat=True)) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Blog, builtins.int]'
reveal_type(Blog.objects.values_list('id', flat=True)) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Blog, builtins.int]"
reveal_type(Blog.objects.values_list('publisher_id', flat=True)) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Blog, builtins.int]"
# is Iterable[int]
reveal_type(list(Blog.objects.values_list('id', flat=True))) # N: Revealed type is 'builtins.list[builtins.int*]'
reveal_type(list(Blog.objects.values_list('id', flat=True))) # N: Revealed type is "builtins.list[builtins.int*]"
installed_apps:
- myapp
files:
@@ -210,9 +210,9 @@
- case: subclass_of_queryset_has_proper_typings_on_methods
main: |
from myapp.models import TransactionQuerySet
reveal_type(TransactionQuerySet()) # N: Revealed type is 'myapp.models.TransactionQuerySet'
reveal_type(TransactionQuerySet().values()) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Transaction, TypedDict({'id': builtins.int, 'total': builtins.int})]'
reveal_type(TransactionQuerySet().values_list()) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Transaction, Tuple[builtins.int, builtins.int]]'
reveal_type(TransactionQuerySet()) # N: Revealed type is "myapp.models.TransactionQuerySet"
reveal_type(TransactionQuerySet().values()) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Transaction, TypedDict({'id': builtins.int, 'total': builtins.int})]"
reveal_type(TransactionQuerySet().values_list()) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Transaction, Tuple[builtins.int, builtins.int]]"
installed_apps:
- myapp
files:
@@ -228,8 +228,8 @@
- case: values_list_of_many_to_many_field
main: |
from myapp.models import Author, Book
reveal_type(Book.objects.values_list('authors')) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Book, Tuple[builtins.int]]'
reveal_type(Author.objects.values_list('books')) # N: Revealed type is 'django.db.models.query.ValuesQuerySet[myapp.models.Author, Tuple[builtins.int]]'
reveal_type(Book.objects.values_list('authors')) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Book, Tuple[builtins.int]]"
reveal_type(Author.objects.values_list('books')) # N: Revealed type is "django.db.models.query.ValuesQuerySet[myapp.models.Author, Tuple[builtins.int]]"
installed_apps:
- myapp
files:
@@ -240,4 +240,4 @@
class Author(models.Model):
pass
class Book(models.Model):
authors = models.ManyToManyField(Author, related_name='books')
authors = models.ManyToManyField(Author, related_name='books')

View File

@@ -1,8 +1,8 @@
- case: test_every_model_has_objects_queryset_available
main: |
from myapp.models import User
reveal_type(User.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.User]'
reveal_type(User.objects.get()) # N: Revealed type is 'myapp.models.User*'
reveal_type(User.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.User]"
reveal_type(User.objects.get()) # N: Revealed type is "myapp.models.User*"
installed_apps:
- myapp
files:
@@ -16,8 +16,8 @@
- case: every_model_has_its_own_objects_queryset
main: |
from myapp.models import Parent, Child
reveal_type(Parent.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.Parent]'
reveal_type(Child.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.Child]'
reveal_type(Parent.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Parent]"
reveal_type(Child.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Child]"
installed_apps:
- myapp
files:
@@ -34,7 +34,7 @@
main: |
from myapp.models import Base, MyModel
base_instance = Base(MyModel)
reveal_type(base_instance.model_cls._default_manager) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel]'
reveal_type(base_instance.model_cls._default_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]"
installed_apps:
- myapp
files:
@@ -48,17 +48,17 @@
class Base(Generic[_T]):
def __init__(self, model_cls: Type[_T]):
self.model_cls = model_cls
reveal_type(self.model_cls._default_manager) # N: Revealed type is 'django.db.models.manager.BaseManager[django.db.models.base.Model]'
reveal_type(self.model_cls._default_manager) # N: Revealed type is "django.db.models.manager.BaseManager[django.db.models.base.Model]"
class MyModel(models.Model):
pass
class Child(Base[MyModel]):
def method(self) -> None:
reveal_type(self.model_cls._default_manager) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel]'
reveal_type(self.model_cls._default_manager) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]"
- case: if_custom_manager_defined_it_is_set_to_default_manager
main: |
from myapp.models import MyModel
reveal_type(MyModel._default_manager) # N: Revealed type is 'myapp.models.CustomManager[myapp.models.MyModel]'
reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.CustomManager[myapp.models.MyModel]"
installed_apps:
- myapp
files:
@@ -76,7 +76,7 @@
- case: if_default_manager_name_is_passed_set_default_manager_to_it
main: |
from myapp.models import MyModel
reveal_type(MyModel._default_manager) # N: Revealed type is 'myapp.models.Manager2[myapp.models.MyModel]'
reveal_type(MyModel._default_manager) # N: Revealed type is "myapp.models.Manager2[myapp.models.MyModel]"
installed_apps:
- myapp
files:
@@ -100,9 +100,9 @@
- case: test_leave_as_is_if_objects_is_set_and_fill_typevars_with_outer_class
main: |
from myapp.models import MyUser
reveal_type(MyUser.objects) # N: Revealed type is 'myapp.models.UserManager[myapp.models.MyUser]'
reveal_type(MyUser.objects.get()) # N: Revealed type is 'myapp.models.MyUser*'
reveal_type(MyUser.objects.get_or_404()) # N: Revealed type is 'myapp.models.MyUser'
reveal_type(MyUser.objects) # N: Revealed type is "myapp.models.UserManager[myapp.models.MyUser]"
reveal_type(MyUser.objects.get()) # N: Revealed type is "myapp.models.MyUser*"
reveal_type(MyUser.objects.get_or_404()) # N: Revealed type is "myapp.models.MyUser"
installed_apps:
- myapp
files:
@@ -121,8 +121,8 @@
- case: model_imported_from_different_file
main: |
from myapp.models import Inventory, Band
reveal_type(Inventory.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.main.Inventory]'
reveal_type(Band.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.Band]'
reveal_type(Inventory.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.main.Inventory]"
reveal_type(Band.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.Band]"
installed_apps:
- myapp
files:
@@ -142,10 +142,10 @@
- case: managers_that_defined_on_other_models_do_not_influence
main: |
from myapp.models import AbstractPerson, Book
reveal_type(AbstractPerson.abstract_persons) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.AbstractPerson]'
reveal_type(Book.published_objects) # N: Revealed type is 'myapp.models.PublishedBookManager[myapp.models.Book]'
reveal_type(AbstractPerson.abstract_persons) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.AbstractPerson]"
reveal_type(Book.published_objects) # N: Revealed type is "myapp.models.PublishedBookManager[myapp.models.Book]"
Book.published_objects.create(title='hello')
reveal_type(Book.annotated_objects) # N: Revealed type is 'myapp.models.AnnotatedBookManager[myapp.models.Book]'
reveal_type(Book.annotated_objects) # N: Revealed type is "myapp.models.AnnotatedBookManager[myapp.models.Book]"
Book.annotated_objects.create(title='hello')
installed_apps:
- myapp
@@ -196,11 +196,11 @@
- case: model_has_a_manager_of_the_same_type
main: |
from myapp.models import UnrelatedModel, MyModel
reveal_type(UnrelatedModel.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.UnrelatedModel]'
reveal_type(UnrelatedModel.objects.first()) # N: Revealed type is 'Union[myapp.models.UnrelatedModel*, None]'
reveal_type(UnrelatedModel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.UnrelatedModel]"
reveal_type(UnrelatedModel.objects.first()) # N: Revealed type is "Union[myapp.models.UnrelatedModel*, None]"
reveal_type(MyModel.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel]'
reveal_type(MyModel.objects.first()) # N: Revealed type is 'Union[myapp.models.MyModel*, None]'
reveal_type(MyModel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]"
reveal_type(MyModel.objects.first()) # N: Revealed type is "Union[myapp.models.MyModel*, None]"
installed_apps:
- myapp
files:
@@ -217,11 +217,11 @@
- case: manager_without_annotation_of_the_model_gets_it_from_outer_one
main: |
from myapp.models import UnrelatedModel2, MyModel2
reveal_type(UnrelatedModel2.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.UnrelatedModel2]'
reveal_type(UnrelatedModel2.objects.first()) # N: Revealed type is 'Union[myapp.models.UnrelatedModel2*, None]'
reveal_type(UnrelatedModel2.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.UnrelatedModel2]"
reveal_type(UnrelatedModel2.objects.first()) # N: Revealed type is "Union[myapp.models.UnrelatedModel2*, None]"
reveal_type(MyModel2.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel2]'
reveal_type(MyModel2.objects.first()) # N: Revealed type is 'Union[myapp.models.MyModel2*, None]'
reveal_type(MyModel2.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel2]"
reveal_type(MyModel2.objects.first()) # N: Revealed type is "Union[myapp.models.MyModel2*, None]"
installed_apps:
- myapp
files:
@@ -238,11 +238,11 @@
- case: inherited_manager_has_the_proper_type_of_model
main: |
from myapp.models import ParentOfMyModel3, MyModel3
reveal_type(ParentOfMyModel3.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.ParentOfMyModel3]'
reveal_type(ParentOfMyModel3.objects.first()) # N: Revealed type is 'Union[myapp.models.ParentOfMyModel3*, None]'
reveal_type(ParentOfMyModel3.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.ParentOfMyModel3]"
reveal_type(ParentOfMyModel3.objects.first()) # N: Revealed type is "Union[myapp.models.ParentOfMyModel3*, None]"
reveal_type(MyModel3.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel3]'
reveal_type(MyModel3.objects.first()) # N: Revealed type is 'Union[myapp.models.MyModel3*, None]'
reveal_type(MyModel3.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel3]"
reveal_type(MyModel3.objects.first()) # N: Revealed type is "Union[myapp.models.MyModel3*, None]"
installed_apps:
- myapp
files:
@@ -259,11 +259,11 @@
- case: inheritance_with_explicit_type_on_child_manager
main: |
from myapp.models import ParentOfMyModel4, MyModel4
reveal_type(ParentOfMyModel4.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.ParentOfMyModel4]'
reveal_type(ParentOfMyModel4.objects.first()) # N: Revealed type is 'Union[myapp.models.ParentOfMyModel4*, None]'
reveal_type(ParentOfMyModel4.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.ParentOfMyModel4]"
reveal_type(ParentOfMyModel4.objects.first()) # N: Revealed type is "Union[myapp.models.ParentOfMyModel4*, None]"
reveal_type(MyModel4.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel4]'
reveal_type(MyModel4.objects.first()) # N: Revealed type is 'Union[myapp.models.MyModel4*, None]'
reveal_type(MyModel4.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel4]"
reveal_type(MyModel4.objects.first()) # N: Revealed type is "Union[myapp.models.MyModel4*, None]"
installed_apps:
- myapp
files:
@@ -281,11 +281,11 @@
#- case: inheritance_of_two_models_with_custom_objects_manager
# main: |
# from myapp.models import MyBaseUser, MyUser
# reveal_type(MyBaseUser.objects) # N: Revealed type is 'myapp.models.MyBaseManager[myapp.models.MyBaseUser]'
# reveal_type(MyBaseUser.objects.get()) # N: Revealed type is 'myapp.models.MyBaseUser'
# reveal_type(MyBaseUser.objects) # N: Revealed type is "myapp.models.MyBaseManager[myapp.models.MyBaseUser]"
# reveal_type(MyBaseUser.objects.get()) # N: Revealed type is "myapp.models.MyBaseUser"
#
# reveal_type(MyUser.objects) # N: Revealed type is 'myapp.models.MyManager[myapp.models.MyUser]'
# reveal_type(MyUser.objects.get()) # N: Revealed type is 'myapp.models.MyUser'
# reveal_type(MyUser.objects) # N: Revealed type is "myapp.models.MyManager[myapp.models.MyUser]"
# reveal_type(MyUser.objects.get()) # N: Revealed type is "myapp.models.MyUser"
# installed_apps:
# - myapp
# files:
@@ -307,18 +307,18 @@
- case: custom_manager_returns_proper_model_types
main: |
from myapp.models import User
reveal_type(User.objects) # N: Revealed type is 'myapp.models.User_MyManager2[myapp.models.User]'
reveal_type(User.objects.select_related()) # N: Revealed type is 'myapp.models.User_MyManager2[myapp.models.User]'
reveal_type(User.objects.get()) # N: Revealed type is 'myapp.models.User*'
reveal_type(User.objects.get_instance()) # N: Revealed type is 'builtins.int'
reveal_type(User.objects.get_instance_untyped('hello')) # N: Revealed type is 'Any'
reveal_type(User.objects) # N: Revealed type is "myapp.models.User_MyManager2[myapp.models.User]"
reveal_type(User.objects.select_related()) # N: Revealed type is "myapp.models.User_MyManager2[myapp.models.User]"
reveal_type(User.objects.get()) # N: Revealed type is "myapp.models.User*"
reveal_type(User.objects.get_instance()) # N: Revealed type is "builtins.int"
reveal_type(User.objects.get_instance_untyped('hello')) # N: Revealed type is "Any"
from myapp.models import ChildUser
reveal_type(ChildUser.objects) # N: Revealed type is 'myapp.models.ChildUser_MyManager2[myapp.models.ChildUser]'
reveal_type(ChildUser.objects.select_related()) # N: Revealed type is 'myapp.models.ChildUser_MyManager2[myapp.models.ChildUser]'
reveal_type(ChildUser.objects.get()) # N: Revealed type is 'myapp.models.ChildUser*'
reveal_type(ChildUser.objects.get_instance()) # N: Revealed type is 'builtins.int'
reveal_type(ChildUser.objects.get_instance_untyped('hello')) # N: Revealed type is 'Any'
reveal_type(ChildUser.objects) # N: Revealed type is "myapp.models.ChildUser_MyManager2[myapp.models.ChildUser]"
reveal_type(ChildUser.objects.select_related()) # N: Revealed type is "myapp.models.ChildUser_MyManager2[myapp.models.ChildUser]"
reveal_type(ChildUser.objects.get()) # N: Revealed type is "myapp.models.ChildUser*"
reveal_type(ChildUser.objects.get_instance()) # N: Revealed type is "builtins.int"
reveal_type(ChildUser.objects.get_instance_untyped('hello')) # N: Revealed type is "Any"
installed_apps:
- myapp
files:
@@ -339,8 +339,8 @@
- case: custom_manager_annotate_method_before_type_declaration
main: |
from myapp.models import ModelA, ModelB, ManagerA
reveal_type(ModelA.objects) # N: Revealed type is 'myapp.models.ModelA_ManagerA1[myapp.models.ModelA]'
reveal_type(ModelA.objects.do_something) # N: Revealed type is 'def (other_obj: myapp.models.ModelB) -> builtins.str'
reveal_type(ModelA.objects) # N: Revealed type is "myapp.models.ModelA_ManagerA1[myapp.models.ModelA]"
reveal_type(ModelA.objects.do_something) # N: Revealed type is "def (other_obj: myapp.models.ModelB) -> builtins.str"
installed_apps:
- myapp
files:

View File

@@ -1,28 +1,28 @@
- case: contrib_auth_model_fields
main: |
from django.contrib.auth.models import User
reveal_type(User().username) # N: Revealed type is 'builtins.str*'
reveal_type(User().password) # N: Revealed type is 'builtins.str*'
reveal_type(User().first_name) # N: Revealed type is 'builtins.str*'
reveal_type(User().last_name) # N: Revealed type is 'builtins.str*'
reveal_type(User().email) # N: Revealed type is 'builtins.str*'
reveal_type(User().is_staff) # N: Revealed type is 'builtins.bool'
reveal_type(User().is_active) # N: Revealed type is 'builtins.bool'
reveal_type(User().date_joined) # N: Revealed type is 'datetime.datetime*'
reveal_type(User().last_login) # N: Revealed type is 'Union[datetime.datetime, None]'
reveal_type(User().is_authenticated) # N: Revealed type is 'Literal[True]'
reveal_type(User().is_anonymous) # N: Revealed type is 'Literal[False]'
reveal_type(User().username) # N: Revealed type is "builtins.str*"
reveal_type(User().password) # N: Revealed type is "builtins.str*"
reveal_type(User().first_name) # N: Revealed type is "builtins.str*"
reveal_type(User().last_name) # N: Revealed type is "builtins.str*"
reveal_type(User().email) # N: Revealed type is "builtins.str*"
reveal_type(User().is_staff) # N: Revealed type is "builtins.bool"
reveal_type(User().is_active) # N: Revealed type is "builtins.bool"
reveal_type(User().date_joined) # N: Revealed type is "datetime.datetime*"
reveal_type(User().last_login) # N: Revealed type is "Union[datetime.datetime, None]"
reveal_type(User().is_authenticated) # N: Revealed type is "Literal[True]"
reveal_type(User().is_anonymous) # N: Revealed type is "Literal[False]"
from django.contrib.auth.models import AnonymousUser
reveal_type(AnonymousUser().is_authenticated) # N: Revealed type is 'Literal[False]'
reveal_type(AnonymousUser().is_anonymous) # N: Revealed type is 'Literal[True]'
reveal_type(AnonymousUser().is_authenticated) # N: Revealed type is "Literal[False]"
reveal_type(AnonymousUser().is_anonymous) # N: Revealed type is "Literal[True]"
from django.contrib.auth.models import Permission
reveal_type(Permission().name) # N: Revealed type is 'builtins.str*'
reveal_type(Permission().codename) # N: Revealed type is 'builtins.str*'
reveal_type(Permission().name) # N: Revealed type is "builtins.str*"
reveal_type(Permission().codename) # N: Revealed type is "builtins.str*"
from django.contrib.auth.models import PermissionsMixin
reveal_type(PermissionsMixin().is_superuser) # N: Revealed type is 'builtins.bool'
reveal_type(PermissionsMixin().is_superuser) # N: Revealed type is "builtins.bool"
from django.contrib.auth.models import Group
reveal_type(Group().name) # N: Revealed type is 'builtins.str*'
reveal_type(Group().name) # N: Revealed type is "builtins.str*"

View File

@@ -3,7 +3,7 @@
from myapp.models import MyUser
user = MyUser(name='user', gender='M')
user.get_name_display() # E: "MyUser" has no attribute "get_name_display"; maybe "get_gender_display"?
reveal_type(user.get_gender_display()) # N: Revealed type is 'builtins.str'
reveal_type(user.get_gender_display()) # N: Revealed type is "builtins.str"
installed_apps:
- myapp
files:
@@ -22,10 +22,10 @@
- case: date_datetime_fields_have_get_next_by_get_previous_by
main: |
from myapp.models import MyUser
reveal_type(MyUser().get_next_by_date()) # N: Revealed type is 'myapp.models.MyUser'
reveal_type(MyUser().get_next_by_datetime()) # N: Revealed type is 'myapp.models.MyUser'
reveal_type(MyUser().get_previous_by_date()) # N: Revealed type is 'myapp.models.MyUser'
reveal_type(MyUser().get_previous_by_datetime()) # N: Revealed type is 'myapp.models.MyUser'
reveal_type(MyUser().get_next_by_date()) # N: Revealed type is "myapp.models.MyUser"
reveal_type(MyUser().get_next_by_datetime()) # N: Revealed type is "myapp.models.MyUser"
reveal_type(MyUser().get_previous_by_date()) # N: Revealed type is "myapp.models.MyUser"
reveal_type(MyUser().get_previous_by_datetime()) # N: Revealed type is "myapp.models.MyUser"
# accept arbitrary kwargs
MyUser().get_next_by_date(arg1=1, arg2=2)

View File

@@ -50,12 +50,12 @@
main: |
from myapp.models import B
b_instance = B()
reveal_type(b_instance.b_attr) # N: Revealed type is 'builtins.int'
reveal_type(b_instance.b_attr) # N: Revealed type is "builtins.int"
reveal_type(b_instance.non_existent_attribute)
b_instance.non_existent_attribute = 2
out: |
main:5: note: Revealed type is 'Any'
main:5: note: Revealed type is "Any"
main:5: error: "B" has no attribute "non_existent_attribute"
main:6: error: "B" has no attribute "non_existent_attribute"
installed_apps:
@@ -73,7 +73,7 @@
- case: fields_recognized_if_base_model_is_subclass_of_models_model
main: |
from myapp.models import User
reveal_type(User().username) # N: Revealed type is 'builtins.str*'
reveal_type(User().username) # N: Revealed type is "builtins.str*"
installed_apps:
- myapp
files:
@@ -94,8 +94,8 @@
- case: django_contrib_gis_base_model_mixin_inheritance
main: |
from myapp.models import User
reveal_type(User().name) # N: Revealed type is 'builtins.str*'
reveal_type(User().updated_at) # N: Revealed type is 'datetime.datetime*'
reveal_type(User().name) # N: Revealed type is "builtins.str*"
reveal_type(User().updated_at) # N: Revealed type is "datetime.datetime*"
installed_apps:
- myapp
files:
@@ -112,4 +112,4 @@
class Meta:
abstract = True
class User(Mixin1, Mixin2):
name = models.TextField()
name = models.TextField()

View File

@@ -1,7 +1,7 @@
- case: meta_attribute_has_a_type_of_current_model
main: |
from myapp.models import MyUser
reveal_type(MyUser._meta) # N: Revealed type is 'django.db.models.options.Options[myapp.models.MyUser]'
reveal_type(MyUser._meta) # N: Revealed type is "django.db.models.options.Options[myapp.models.MyUser]"
installed_apps:
- myapp
files:
@@ -15,13 +15,13 @@
- case: get_field_returns_proper_field_type
main: |
from myapp.models import MyUser
reveal_type(MyUser._meta.get_field('base_name')) # N: Revealed type is 'django.db.models.fields.CharField[Any, Any]'
reveal_type(MyUser._meta.get_field('name')) # N: Revealed type is 'django.db.models.fields.CharField[Any, Any]'
reveal_type(MyUser._meta.get_field('age')) # N: Revealed type is 'django.db.models.fields.IntegerField[Any, Any]'
reveal_type(MyUser._meta.get_field('base_name')) # N: Revealed type is "django.db.models.fields.CharField[Any, Any]"
reveal_type(MyUser._meta.get_field('name')) # N: Revealed type is "django.db.models.fields.CharField[Any, Any]"
reveal_type(MyUser._meta.get_field('age')) # N: Revealed type is "django.db.models.fields.IntegerField[Any, Any]"
reveal_type(MyUser._meta.get_field('unknown'))
reveal_type(MyUser._meta.get_field('to_user')) # N: Revealed type is 'django.db.models.fields.related.ForeignKey[Any, Any]'
reveal_type(MyUser._meta.get_field('to_user')) # N: Revealed type is "django.db.models.fields.related.ForeignKey[Any, Any]"
out: |
main:5: note: Revealed type is 'Any'
main:5: note: Revealed type is "Any"
main:5: error: MyUser has no field named 'unknown'
installed_apps:
- myapp
@@ -42,7 +42,7 @@
from myapp.models import AbstractModel
class MyModel(AbstractModel):
pass
reveal_type(MyModel._meta.get_field('field')) # N: Revealed type is 'Any'
reveal_type(MyModel._meta.get_field('field')) # N: Revealed type is "Any"
installed_apps:
- myapp
files:

View File

@@ -4,7 +4,7 @@
Blog(publisher=Publisher())
Blog.objects.create(publisher=Publisher())
Blog().publisher = Publisher()
reveal_type(Blog().publisher) # N: Revealed type is 'myapp.models.PublisherProxy*'
reveal_type(Blog().publisher) # N: Revealed type is "myapp.models.PublisherProxy*"
installed_apps:
- myapp
files:

View File

@@ -2,7 +2,7 @@
main: |
from myapp.models import MyUser
user = MyUser(pk=1)
reveal_type(user._state) # N: Revealed type is 'django.db.models.base.ModelState'
reveal_type(user._state) # N: Revealed type is "django.db.models.base.ModelState"
installed_apps:
- myapp
files:

View File

@@ -7,7 +7,7 @@
def lower(value: str) -> str:
return value.lower()
reveal_type(lower) # N: Revealed type is 'def (value: builtins.str) -> builtins.str'
reveal_type(lower) # N: Revealed type is "def (value: builtins.str) -> builtins.str"
- case: register_filter_named
main: |
@@ -18,7 +18,7 @@
def lower(value: str) -> str:
return value.lower()
reveal_type(lower) # N: Revealed type is 'def (value: builtins.str) -> builtins.str'
reveal_type(lower) # N: Revealed type is "def (value: builtins.str) -> builtins.str"
- case: register_simple_tag_no_args
main: |
@@ -30,7 +30,7 @@
def current_time(format_string: str) -> str:
return datetime.datetime.now().strftime(format_string)
reveal_type(current_time) # N: Revealed type is 'def (format_string: builtins.str) -> builtins.str'
reveal_type(current_time) # N: Revealed type is "def (format_string: builtins.str) -> builtins.str"
- case: register_simple_tag_context
main: |
@@ -43,7 +43,7 @@
timezone = context['timezone']
return "test"
reveal_type(current_time) # N: Revealed type is 'def (context: builtins.dict[builtins.str, Any], format_string: builtins.str) -> builtins.str'
reveal_type(current_time) # N: Revealed type is "def (context: builtins.dict[builtins.str, Any], format_string: builtins.str) -> builtins.str"
- case: register_simple_tag_named
main: |
@@ -55,7 +55,7 @@
def some_function(value: int) -> int:
return value - 2
reveal_type(some_function) # N: Revealed type is 'def (value: builtins.int) -> builtins.int'
reveal_type(some_function) # N: Revealed type is "def (value: builtins.int) -> builtins.int"
- case: register_tag_no_args
main: |
@@ -68,7 +68,7 @@
def cycle(parser: Parser, token: Token) -> CycleNode:
return CycleNode([])
reveal_type(cycle) # N: Revealed type is 'def (parser: django.template.base.Parser, token: django.template.base.Token) -> django.template.defaulttags.CycleNode'
reveal_type(cycle) # N: Revealed type is "def (parser: django.template.base.Parser, token: django.template.base.Token) -> django.template.defaulttags.CycleNode"
- case: register_tag_named
main: |
@@ -81,7 +81,7 @@
def cycle_impl(parser: Parser, token: Token) -> CycleNode:
return CycleNode([])
reveal_type(cycle_impl) # N: Revealed type is 'def (parser: django.template.base.Parser, token: django.template.base.Token) -> django.template.defaulttags.CycleNode'
reveal_type(cycle_impl) # N: Revealed type is "def (parser: django.template.base.Parser, token: django.template.base.Token) -> django.template.defaulttags.CycleNode"
- case: register_inclusion_tag
main: |
@@ -93,4 +93,4 @@
def format_results(results: List[str]) -> str:
return ', '.join(results)
reveal_type(format_results) # N: Revealed type is 'def (results: builtins.list[builtins.str]) -> builtins.str'
reveal_type(format_results) # N: Revealed type is "def (results: builtins.list[builtins.str]) -> builtins.str"

View File

@@ -4,9 +4,9 @@
class ExampleTestCase(TestCase):
def test_method(self) -> None:
reveal_type(self.client) # N: Revealed type is 'django.test.client.Client'
reveal_type(self.client) # N: Revealed type is "django.test.client.Client"
resp = self.client.post('/url', {'doit': 'srs'}, 'application/json', False, True, extra='value')
reveal_type(resp.status_code) # N: Revealed type is 'builtins.int'
reveal_type(resp.status_code) # N: Revealed type is "builtins.int"
# Attributes monkey-patched by test Client class:
resp.json()
reveal_type(resp.wsgi_request) # N: Revealed type is 'django.core.handlers.wsgi.WSGIRequest'
reveal_type(resp.wsgi_request) # N: Revealed type is "django.core.handlers.wsgi.WSGIRequest"

View File

@@ -2,9 +2,9 @@
main: |
from myapp.models import MyModel
mymodel = MyModel(user_id=1)
reveal_type(mymodel.id) # N: Revealed type is 'builtins.int*'
reveal_type(mymodel.user) # N: Revealed type is 'django.contrib.auth.models.User*'
reveal_type(mymodel.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel]'
reveal_type(mymodel.id) # N: Revealed type is "builtins.int*"
reveal_type(mymodel.user) # N: Revealed type is "django.contrib.auth.models.User*"
reveal_type(mymodel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyModel]"
mypy_config: |
[mypy.plugins.django-stubs]
django_settings_module = mysettings
@@ -20,13 +20,13 @@
class MyModel(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
if TYPE_CHECKING:
reveal_type(MyModel().user) # N: Revealed type is 'django.contrib.auth.models.User*'
reveal_type(MyModel().user) # N: Revealed type is "django.contrib.auth.models.User*"
- case: generate_pyproject_toml_and_settings_file_from_installed_apps_key
main: |
from myapp.models import MyModel
mymodel = MyModel(user_id=1)
reveal_type(mymodel.id) # N: Revealed type is 'builtins.int*'
reveal_type(mymodel.id) # N: Revealed type is "builtins.int*"
installed_apps:
- django.contrib.auth
- myapp

View File

@@ -39,11 +39,11 @@
form_class = MyForm
def post(self, request, *args: Any, **kwds: Any):
form_class = self.get_form_class()
reveal_type(form_class) # N: Revealed type is 'Type[main.MyForm]'
reveal_type(self.get_form(None)) # N: Revealed type is 'main.MyForm'
reveal_type(self.get_form()) # N: Revealed type is 'main.MyForm'
reveal_type(self.get_form(form_class)) # N: Revealed type is 'main.MyForm'
reveal_type(self.get_form(MyForm2)) # N: Revealed type is 'main.MyForm2'
reveal_type(form_class) # N: Revealed type is "Type[main.MyForm]"
reveal_type(self.get_form(None)) # N: Revealed type is "main.MyForm"
reveal_type(self.get_form()) # N: Revealed type is "main.MyForm"
reveal_type(self.get_form(form_class)) # N: Revealed type is "main.MyForm"
reveal_type(self.get_form(MyForm2)) # N: Revealed type is "main.MyForm2"
- case: updateview_form_valid_has_form_save
main: |
@@ -55,7 +55,7 @@
class MyView(UpdateView):
form_class = MyForm
def form_valid(self, form: forms.BaseModelForm):
reveal_type(form.save) # N: Revealed type is 'def (commit: builtins.bool =) -> Any'
reveal_type(form.save) # N: Revealed type is "def (commit: builtins.bool =) -> Any"
- case: successmessagemixin_compatible_with_formmixin
main: |

View File

@@ -18,13 +18,13 @@
def decorated_func(param1: str, param2: int) -> bool:
pass
# Ensure that the function's type is preserved
reveal_type(decorated_func) # N: Revealed type is 'def (param1: builtins.str, param2: builtins.int) -> builtins.bool'
reveal_type(decorated_func) # N: Revealed type is "def (param1: builtins.str, param2: builtins.int) -> builtins.bool"
@transaction.atomic(using="mydb")
def decorated_func_using(param1: str, param2: int) -> bool:
pass
# Ensure that the function's type is preserved
reveal_type(decorated_func_using) # N: Revealed type is 'def (param1: builtins.str, param2: builtins.int) -> builtins.bool'
reveal_type(decorated_func_using) # N: Revealed type is "def (param1: builtins.str, param2: builtins.int) -> builtins.bool"
class ClassWithAtomicMethod:
# Bare decorator
@@ -39,26 +39,26 @@
pass
ClassWithAtomicMethod().atomic_method1("abc") # E: Argument 1 to "atomic_method1" of "ClassWithAtomicMethod" has incompatible type "str"; expected "int"
# Ensure that the method's type is preserved
reveal_type(ClassWithAtomicMethod().atomic_method1) # N: Revealed type is 'def (abc: builtins.int) -> builtins.str'
reveal_type(ClassWithAtomicMethod().atomic_method1) # N: Revealed type is "def (abc: builtins.int) -> builtins.str"
# Ensure that the method's type is preserved
reveal_type(ClassWithAtomicMethod().atomic_method3) # N: Revealed type is 'def (myparam: builtins.str) -> builtins.int'
reveal_type(ClassWithAtomicMethod().atomic_method3) # N: Revealed type is "def (myparam: builtins.str) -> builtins.int"
- case: mark_safe_decorator_and_function
main: |
from django.utils.safestring import mark_safe
s = 'hello'
reveal_type(mark_safe(s)) # N: Revealed type is 'django.utils.safestring.SafeText'
reveal_type(mark_safe(s) + mark_safe(s)) # N: Revealed type is 'django.utils.safestring.SafeText'
reveal_type(s + mark_safe(s)) # N: Revealed type is 'builtins.str'
reveal_type(mark_safe(s)) # N: Revealed type is "django.utils.safestring.SafeText"
reveal_type(mark_safe(s) + mark_safe(s)) # N: Revealed type is "django.utils.safestring.SafeText"
reveal_type(s + mark_safe(s)) # N: Revealed type is "builtins.str"
s += mark_safe(s)
reveal_type(s) # N: Revealed type is 'builtins.str'
reveal_type(s) # N: Revealed type is "builtins.str"
ms = mark_safe(s)
ms += mark_safe(s)
reveal_type(ms) # N: Revealed type is 'django.utils.safestring.SafeText'
reveal_type(ms) # N: Revealed type is "django.utils.safestring.SafeText"
@mark_safe
def func(s: str) -> str:
pass
reveal_type(func) # N: Revealed type is 'def (s: builtins.str) -> builtins.str'
reveal_type(func) # N: Revealed type is "def (s: builtins.str) -> builtins.str"

View File

@@ -5,15 +5,15 @@
from django.core.mail.message import EmailMessage
message = EmailMessage()
reveal_type(message) # N: Revealed type is 'django.core.mail.message.EmailMessage'
reveal_type(message) # N: Revealed type is "django.core.mail.message.EmailMessage"
message.attach("myfilename", "mycontent", "text/plain")
mime_text = MIMEText("mytext")
reveal_type(mime_text) # N: Revealed type is 'email.mime.text.MIMEText'
reveal_type(mime_text) # N: Revealed type is "email.mime.text.MIMEText"
message.attach(mime_text)
mime_image = MIMEImage("mydata", "image/png")
reveal_type(mime_image) # N: Revealed type is 'email.mime.image.MIMEImage'
reveal_type(mime_image) # N: Revealed type is "email.mime.image.MIMEImage"
message.attach(mime_image)
reveal_type(message.attachments) # N: Revealed type is 'builtins.list[Any]'
reveal_type(message.attachments) # N: Revealed type is "builtins.list[Any]"

View File

@@ -2,9 +2,9 @@
disable_cache: true
main: |
from django.http.request import HttpRequest
reveal_type(HttpRequest().user) # N: Revealed type is 'Union[myapp.models.MyUser, django.contrib.auth.models.AnonymousUser]'
reveal_type(HttpRequest().user) # N: Revealed type is "Union[myapp.models.MyUser, django.contrib.auth.models.AnonymousUser]"
# check that other fields work ok
reveal_type(HttpRequest().method) # N: Revealed type is 'Union[builtins.str, None]'
reveal_type(HttpRequest().method) # N: Revealed type is "Union[builtins.str, None]"
custom_settings: |
INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth', 'myapp')
AUTH_USER_MODEL='myapp.MyUser'
@@ -20,11 +20,11 @@
main: |
from django.http.request import HttpRequest
request = HttpRequest()
reveal_type(request.user) # N: Revealed type is 'Union[django.contrib.auth.models.User, django.contrib.auth.models.AnonymousUser]'
reveal_type(request.user) # N: Revealed type is "Union[django.contrib.auth.models.User, django.contrib.auth.models.AnonymousUser]"
if not request.user.is_anonymous:
reveal_type(request.user) # N: Revealed type is 'django.contrib.auth.models.User'
reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User"
if request.user.is_authenticated:
reveal_type(request.user) # N: Revealed type is 'django.contrib.auth.models.User'
reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User"
custom_settings: |
INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth')
- case: request_object_user_without_auth_and_contenttypes_apps
@@ -32,17 +32,17 @@
main: |
from django.http.request import HttpRequest
request = HttpRequest()
reveal_type(request.user) # N: Revealed type is 'Union[django.contrib.auth.base_user.AbstractBaseUser, django.contrib.auth.models.AnonymousUser]'
reveal_type(request.user) # N: Revealed type is "Union[django.contrib.auth.base_user.AbstractBaseUser, django.contrib.auth.models.AnonymousUser]"
if request.user.is_authenticated:
reveal_type(request.user) # N: Revealed type is 'django.contrib.auth.base_user.AbstractBaseUser'
reveal_type(request.user) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser"
- case: request_object_user_without_auth_but_with_contenttypes_apps
disable_cache: true
main: |
from django.http.request import HttpRequest
request = HttpRequest()
reveal_type(request.user) # N: Revealed type is 'Union[django.contrib.auth.base_user.AbstractBaseUser, django.contrib.auth.models.AnonymousUser]'
reveal_type(request.user) # N: Revealed type is "Union[django.contrib.auth.base_user.AbstractBaseUser, django.contrib.auth.models.AnonymousUser]"
if request.user.is_authenticated:
reveal_type(request.user) # N: Revealed type is 'django.contrib.auth.base_user.AbstractBaseUser'
reveal_type(request.user) # N: Revealed type is "django.contrib.auth.base_user.AbstractBaseUser"
custom_settings: |
INSTALLED_APPS = ('django.contrib.contenttypes',)
- case: subclass_request_not_changed_user_type
@@ -53,7 +53,7 @@
foo: int # Just do something
request = MyRequest()
reveal_type(request.user) # N: Revealed type is 'Union[django.contrib.auth.models.User, django.contrib.auth.models.AnonymousUser]'
reveal_type(request.user) # N: Revealed type is "Union[django.contrib.auth.models.User, django.contrib.auth.models.AnonymousUser]"
custom_settings: |
INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth')
@@ -66,7 +66,7 @@
user: User # Override the type of user
request = MyRequest()
reveal_type(request.user) # N: Revealed type is 'django.contrib.auth.models.User'
reveal_type(request.user) # N: Revealed type is "django.contrib.auth.models.User"
custom_settings: |
INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth')

View File

@@ -3,11 +3,11 @@
main: |
from django.conf import settings
# standard settings
reveal_type(settings.AUTH_USER_MODEL) # N: Revealed type is 'builtins.str'
reveal_type(settings.ROOT_DIR) # N: Revealed type is 'builtins.str'
reveal_type(settings.APPS_DIR) # N: Revealed type is 'pathlib.Path*'
reveal_type(settings.NUMBERS) # N: Revealed type is 'builtins.list[builtins.str*]'
reveal_type(settings.DICT) # N: Revealed type is 'builtins.dict[Any, Any]'
reveal_type(settings.AUTH_USER_MODEL) # N: Revealed type is "builtins.str"
reveal_type(settings.ROOT_DIR) # N: Revealed type is "builtins.str"
reveal_type(settings.APPS_DIR) # N: Revealed type is "pathlib.Path*"
reveal_type(settings.NUMBERS) # N: Revealed type is "builtins.list[builtins.str*]"
reveal_type(settings.DICT) # N: Revealed type is "builtins.dict[Any, Any]"
custom_settings: |
from base import *
SECRET_KEY = 112233
@@ -23,8 +23,8 @@
- case: global_settings_are_always_loaded
main: |
from django.conf import settings
reveal_type(settings.AUTH_USER_MODEL) # N: Revealed type is 'builtins.str'
reveal_type(settings.AUTHENTICATION_BACKENDS) # N: Revealed type is 'typing.Sequence[builtins.str]'
reveal_type(settings.AUTH_USER_MODEL) # N: Revealed type is "builtins.str"
reveal_type(settings.AUTHENTICATION_BACKENDS) # N: Revealed type is "typing.Sequence[builtins.str]"
installed_apps: []
- case: fail_if_there_is_no_setting
@@ -32,7 +32,7 @@
from django.conf import settings
reveal_type(settings.NOT_EXISTING)
out: |
main:2: note: Revealed type is 'Any'
main:2: note: Revealed type is "Any"
main:2: error: 'Settings' object has no attribute 'NOT_EXISTING'
- case: override_default_setting_with_different_type_in_the_different_module
@@ -40,8 +40,8 @@
from settings.basic_settings import *
main: |
from django.conf import settings
reveal_type(settings.MEDIA_ROOT) # N: Revealed type is 'pathlib.Path*'
reveal_type(settings.MEDIA_ROOT / 'part') # N: Revealed type is 'pathlib.Path*'
reveal_type(settings.MEDIA_ROOT) # N: Revealed type is "pathlib.Path*"
reveal_type(settings.MEDIA_ROOT / 'part') # N: Revealed type is "pathlib.Path*"
files:
- path: settings/__init__.py
- path: settings/basic_settings.py

View File

@@ -3,13 +3,13 @@
from django.shortcuts import get_object_or_404, get_list_or_404
from myapp.models import MyModel
reveal_type(get_object_or_404(MyModel)) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(get_object_or_404(MyModel.objects)) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(get_object_or_404(MyModel.objects.get_queryset())) # N: Revealed type is 'myapp.models.MyModel*'
reveal_type(get_object_or_404(MyModel)) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(get_object_or_404(MyModel.objects)) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(get_object_or_404(MyModel.objects.get_queryset())) # N: Revealed type is "myapp.models.MyModel*"
reveal_type(get_list_or_404(MyModel)) # N: Revealed type is 'builtins.list[myapp.models.MyModel*]'
reveal_type(get_list_or_404(MyModel.objects)) # N: Revealed type is 'builtins.list[myapp.models.MyModel*]'
reveal_type(get_list_or_404(MyModel.objects.get_queryset())) # N: Revealed type is 'builtins.list[myapp.models.MyModel*]'
reveal_type(get_list_or_404(MyModel)) # N: Revealed type is "builtins.list[myapp.models.MyModel*]"
reveal_type(get_list_or_404(MyModel.objects)) # N: Revealed type is "builtins.list[myapp.models.MyModel*]"
reveal_type(get_list_or_404(MyModel.objects.get_queryset())) # N: Revealed type is "builtins.list[myapp.models.MyModel*]"
installed_apps:
- myapp
files:
@@ -25,7 +25,7 @@
main: |
from django.contrib.auth import get_user_model
UserModel = get_user_model()
reveal_type(UserModel.objects) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyUser]'
reveal_type(UserModel.objects) # N: Revealed type is "django.db.models.manager.Manager[myapp.models.MyUser]"
custom_settings: |
INSTALLED_APPS = ('django.contrib.contenttypes', 'myapp')
AUTH_USER_MODEL = 'myapp.MyUser'
@@ -46,14 +46,14 @@
TestContext = TypedDict("TestContext", {"user": Any})
test_context: TestContext = {"user": "test"}
reveal_type(test_context) # N: Revealed type is 'TypedDict('main.TestContext', {'user': Any})'
reveal_type(render(HttpRequest(), '', test_context)) # N: Revealed type is 'django.http.response.HttpResponse'
reveal_type(test_context) # N: Revealed type is "TypedDict('main.TestContext', {'user': Any})"
reveal_type(render(HttpRequest(), '', test_context)) # N: Revealed type is "django.http.response.HttpResponse"
- case: check_redirect_return_annotation
main: |
from django.shortcuts import redirect
reveal_type(redirect(to = '', permanent = True)) # N: Revealed type is 'django.http.response.HttpResponsePermanentRedirect'
reveal_type(redirect(to = '', permanent = False)) # N: Revealed type is 'django.http.response.HttpResponseRedirect'
reveal_type(redirect(to = '', permanent = True)) # N: Revealed type is "django.http.response.HttpResponsePermanentRedirect"
reveal_type(redirect(to = '', permanent = False)) # N: Revealed type is "django.http.response.HttpResponseRedirect"
var = True
reveal_type(redirect(to = '', permanent = var)) # N: Revealed type is 'Union[django.http.response.HttpResponseRedirect, django.http.response.HttpResponsePermanentRedirect]'
reveal_type(redirect(to = '', permanent = var)) # N: Revealed type is "Union[django.http.response.HttpResponseRedirect, django.http.response.HttpResponsePermanentRedirect]"

View File

@@ -5,7 +5,7 @@
from django.contrib.auth.decorators import login_required
@method_decorator(login_required, name='dispatch')
class TestView(View): ...
reveal_type(TestView()) # N: Revealed type is 'main.TestView'
reveal_type(TestView()) # N: Revealed type is "main.TestView"
- case: method_decorator_function
main: |
from django.views.generic.base import View
@@ -17,4 +17,4 @@
@method_decorator(login_required)
def dispatch(self, request: HttpRequest, *args, **kwargs) -> HttpResponseBase:
return super().dispatch(request, *args, **kwargs)
reveal_type(dispatch) # N: Revealed type is 'def (self: main.TestView, request: django.http.request.HttpRequest, *args: Any, **kwargs: Any) -> django.http.response.HttpResponseBase'
reveal_type(dispatch) # N: Revealed type is "def (self: main.TestView, request: django.http.request.HttpRequest, *args: Any, **kwargs: Any) -> django.http.response.HttpResponseBase"

View File

@@ -7,12 +7,12 @@
@cached_property
def attr(self) -> List[str]: ...
reveal_type(attr) # N: Revealed type is 'django.utils.functional.cached_property[builtins.list*[builtins.str]]'
reveal_type(attr.name) # N: Revealed type is 'builtins.str'
reveal_type(attr) # N: Revealed type is "django.utils.functional.cached_property[builtins.list*[builtins.str]]"
reveal_type(attr.name) # N: Revealed type is "builtins.str"
reveal_type(Foo.attr) # N: Revealed type is 'django.utils.functional.cached_property[builtins.list*[builtins.str]]'
reveal_type(Foo.attr.func) # N: Revealed type is 'def (*Any, **Any) -> builtins.list*[builtins.str]'
reveal_type(Foo.attr) # N: Revealed type is "django.utils.functional.cached_property[builtins.list*[builtins.str]]"
reveal_type(Foo.attr.func) # N: Revealed type is "def (*Any, **Any) -> builtins.list*[builtins.str]"
f = Foo()
reveal_type(f.attr) # N: Revealed type is 'builtins.list*[builtins.str]'
reveal_type(f.attr) # N: Revealed type is "builtins.list*[builtins.str]"
f.attr.name # E: "List[str]" has no attribute "name"