From 77f9926ce1e9606b32b0bc0d8b30c2a22f6398f9 Mon Sep 17 00:00:00 2001 From: Cesar Canassa Date: Sat, 12 Jun 2021 00:05:46 +0200 Subject: [PATCH] fix tests for mypy 0.900 (#641) --- mypy_django_plugin/transformers/managers.py | 2 +- setup.py | 1 + .../typecheck/contrib/admin/test_options.yml | 2 +- .../contrib/auth/test_decorators.yml | 8 +- tests/typecheck/db/test_connection.yml | 6 +- tests/typecheck/db/test_transaction.yml | 8 +- tests/typecheck/fields/test_base.yml | 38 +++--- .../fields/test_generic_foreign_key.yml | 4 +- tests/typecheck/fields/test_nullable.yml | 12 +- .../typecheck/fields/test_postgres_fields.yml | 6 +- tests/typecheck/fields/test_related.yml | 118 +++++++++--------- .../managers/querysets/test_basic_methods.yml | 28 ++--- .../managers/querysets/test_from_queryset.yml | 56 ++++----- .../managers/querysets/test_values.yml | 38 +++--- .../managers/querysets/test_values_list.yml | 88 ++++++------- tests/typecheck/managers/test_managers.yml | 98 +++++++-------- .../typecheck/models/test_contrib_models.yml | 34 ++--- tests/typecheck/models/test_extra_methods.yml | 10 +- tests/typecheck/models/test_inheritance.yml | 12 +- tests/typecheck/models/test_meta_options.yml | 14 +-- tests/typecheck/models/test_proxy_models.yml | 2 +- tests/typecheck/models/test_state.yml | 2 +- tests/typecheck/template/test_library.yml | 16 +-- tests/typecheck/test/test_testcase.yml | 6 +- tests/typecheck/test_config.yml | 10 +- tests/typecheck/test_forms.yml | 12 +- tests/typecheck/test_helpers.yml | 20 +-- tests/typecheck/test_mail.yml | 8 +- tests/typecheck/test_request.yml | 22 ++-- tests/typecheck/test_settings.yml | 20 +-- tests/typecheck/test_shortcuts.yml | 24 ++-- tests/typecheck/utils/test_decorators.yml | 4 +- tests/typecheck/utils/test_functional.yml | 10 +- 33 files changed, 370 insertions(+), 369 deletions(-) diff --git a/mypy_django_plugin/transformers/managers.py b/mypy_django_plugin/transformers/managers.py index 4914cea..976e4cd 100644 --- a/mypy_django_plugin/transformers/managers.py +++ b/mypy_django_plugin/transformers/managers.py @@ -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 diff --git a/setup.py b/setup.py index 95d0b49..63b28bd 100644 --- a/setup.py +++ b/setup.py @@ -25,6 +25,7 @@ dependencies = [ "typing-extensions", "django", "django-stubs-ext", + "types-pytz", ] setup( diff --git a/tests/typecheck/contrib/admin/test_options.yml b/tests/typecheck/contrib/admin/test_options.yml index 0180715..080755c 100644 --- a/tests/typecheck/contrib/admin/test_options.yml +++ b/tests/typecheck/contrib/admin/test_options.yml @@ -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: | diff --git a/tests/typecheck/contrib/auth/test_decorators.yml b/tests/typecheck/contrib/auth/test_decorators.yml index 616e007..18ac1d3 100644 --- a/tests/typecheck/contrib/auth/test_decorators.yml +++ b/tests/typecheck/contrib/auth/test_decorators.yml @@ -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 diff --git a/tests/typecheck/db/test_connection.yml b/tests/typecheck/db/test_connection.yml index 9e2e939..6b3f88b 100644 --- a/tests/typecheck/db/test_connection.yml +++ b/tests/typecheck/db/test_connection.yml @@ -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" diff --git a/tests/typecheck/db/test_transaction.yml b/tests/typecheck/db/test_transaction.yml index 446dfc4..7919c75 100644 --- a/tests/typecheck/db/test_transaction.yml +++ b/tests/typecheck/db/test_transaction.yml @@ -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" diff --git a/tests/typecheck/fields/test_base.yml b/tests/typecheck/fields/test_base.yml index 42cd2e5..014c04b 100644 --- a/tests/typecheck/fields/test_base.yml +++ b/tests/typecheck/fields/test_base.yml @@ -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) diff --git a/tests/typecheck/fields/test_generic_foreign_key.yml b/tests/typecheck/fields/test_generic_foreign_key.yml index b15690a..bd67909 100644 --- a/tests/typecheck/fields/test_generic_foreign_key.yml +++ b/tests/typecheck/fields/test_generic_foreign_key.yml @@ -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: diff --git a/tests/typecheck/fields/test_nullable.yml b/tests/typecheck/fields/test_nullable.yml index e143001..e1fb2c6 100644 --- a/tests/typecheck/fields/test_nullable.yml +++ b/tests/typecheck/fields/test_nullable.yml @@ -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: diff --git a/tests/typecheck/fields/test_postgres_fields.yml b/tests/typecheck/fields/test_postgres_fields.yml index 2d2c002..7d94fc0 100644 --- a/tests/typecheck/fields/test_postgres_fields.yml +++ b/tests/typecheck/fields/test_postgres_fields.yml @@ -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: diff --git a/tests/typecheck/fields/test_related.yml b/tests/typecheck/fields/test_related.yml index 20a0450..e5d249d 100644 --- a/tests/typecheck/fields/test_related.yml +++ b/tests/typecheck/fields/test_related.yml @@ -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 diff --git a/tests/typecheck/managers/querysets/test_basic_methods.yml b/tests/typecheck/managers/querysets/test_basic_methods.yml index 55d4c4e..5bcf47e 100644 --- a/tests/typecheck/managers/querysets/test_basic_methods.yml +++ b/tests/typecheck/managers/querysets/test_basic_methods.yml @@ -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 \ No newline at end of file + pass diff --git a/tests/typecheck/managers/querysets/test_from_queryset.yml b/tests/typecheck/managers/querysets/test_from_queryset.yml index e9f2ad4..e291ba8 100644 --- a/tests/typecheck/managers/querysets/test_from_queryset.yml +++ b/tests/typecheck/managers/querysets/test_from_queryset.yml @@ -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]) -> ' - reveal_type(MyModel().objects.base_queryset_method(2)) # N: Revealed type is '' + 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]) -> " + reveal_type(MyModel().objects.base_queryset_method(2)) # N: Revealed type is "" 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 \ No newline at end of file + raise ValueError diff --git a/tests/typecheck/managers/querysets/test_values.yml b/tests/typecheck/managers/querysets/test_values.yml index 40ffa59..2defd0a 100644 --- a/tests/typecheck/managers/querysets/test_values.yml +++ b/tests/typecheck/managers/querysets/test_values.yml @@ -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: diff --git a/tests/typecheck/managers/querysets/test_values_list.yml b/tests/typecheck/managers/querysets/test_values_list.yml index c67f265..380d7f0 100644 --- a/tests/typecheck/managers/querysets/test_values_list.yml +++ b/tests/typecheck/managers/querysets/test_values_list.yml @@ -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') \ No newline at end of file + authors = models.ManyToManyField(Author, related_name='books') diff --git a/tests/typecheck/managers/test_managers.yml b/tests/typecheck/managers/test_managers.yml index 72d62d2..5f8acec 100644 --- a/tests/typecheck/managers/test_managers.yml +++ b/tests/typecheck/managers/test_managers.yml @@ -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: diff --git a/tests/typecheck/models/test_contrib_models.yml b/tests/typecheck/models/test_contrib_models.yml index 73be029..94409e4 100644 --- a/tests/typecheck/models/test_contrib_models.yml +++ b/tests/typecheck/models/test_contrib_models.yml @@ -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*" diff --git a/tests/typecheck/models/test_extra_methods.yml b/tests/typecheck/models/test_extra_methods.yml index 846e8ab..6a4174d 100644 --- a/tests/typecheck/models/test_extra_methods.yml +++ b/tests/typecheck/models/test_extra_methods.yml @@ -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) diff --git a/tests/typecheck/models/test_inheritance.yml b/tests/typecheck/models/test_inheritance.yml index 78366f4..f36b6a5 100644 --- a/tests/typecheck/models/test_inheritance.yml +++ b/tests/typecheck/models/test_inheritance.yml @@ -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() \ No newline at end of file + name = models.TextField() diff --git a/tests/typecheck/models/test_meta_options.yml b/tests/typecheck/models/test_meta_options.yml index 248f4e1..ab50d2b 100644 --- a/tests/typecheck/models/test_meta_options.yml +++ b/tests/typecheck/models/test_meta_options.yml @@ -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: diff --git a/tests/typecheck/models/test_proxy_models.yml b/tests/typecheck/models/test_proxy_models.yml index ba46845..7648756 100644 --- a/tests/typecheck/models/test_proxy_models.yml +++ b/tests/typecheck/models/test_proxy_models.yml @@ -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: diff --git a/tests/typecheck/models/test_state.yml b/tests/typecheck/models/test_state.yml index c7dd4b8..a24cf63 100644 --- a/tests/typecheck/models/test_state.yml +++ b/tests/typecheck/models/test_state.yml @@ -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: diff --git a/tests/typecheck/template/test_library.yml b/tests/typecheck/template/test_library.yml index c0735ce..b3fd4dd 100644 --- a/tests/typecheck/template/test_library.yml +++ b/tests/typecheck/template/test_library.yml @@ -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" diff --git a/tests/typecheck/test/test_testcase.yml b/tests/typecheck/test/test_testcase.yml index d7125c3..d3d0e05 100644 --- a/tests/typecheck/test/test_testcase.yml +++ b/tests/typecheck/test/test_testcase.yml @@ -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" diff --git a/tests/typecheck/test_config.yml b/tests/typecheck/test_config.yml index 8cf9961..295dc20 100644 --- a/tests/typecheck/test_config.yml +++ b/tests/typecheck/test_config.yml @@ -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 diff --git a/tests/typecheck/test_forms.yml b/tests/typecheck/test_forms.yml index 7178cb8..e308f9a 100644 --- a/tests/typecheck/test_forms.yml +++ b/tests/typecheck/test_forms.yml @@ -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: | diff --git a/tests/typecheck/test_helpers.yml b/tests/typecheck/test_helpers.yml index 11d6ca8..b2367f4 100644 --- a/tests/typecheck/test_helpers.yml +++ b/tests/typecheck/test_helpers.yml @@ -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" diff --git a/tests/typecheck/test_mail.yml b/tests/typecheck/test_mail.yml index 5c2c428..ecf2a22 100644 --- a/tests/typecheck/test_mail.yml +++ b/tests/typecheck/test_mail.yml @@ -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]" diff --git a/tests/typecheck/test_request.yml b/tests/typecheck/test_request.yml index 080a225..1384977 100644 --- a/tests/typecheck/test_request.yml +++ b/tests/typecheck/test_request.yml @@ -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') diff --git a/tests/typecheck/test_settings.yml b/tests/typecheck/test_settings.yml index ed5debd..ae45e00 100644 --- a/tests/typecheck/test_settings.yml +++ b/tests/typecheck/test_settings.yml @@ -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 diff --git a/tests/typecheck/test_shortcuts.yml b/tests/typecheck/test_shortcuts.yml index a06dcf6..6659878 100644 --- a/tests/typecheck/test_shortcuts.yml +++ b/tests/typecheck/test_shortcuts.yml @@ -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]" diff --git a/tests/typecheck/utils/test_decorators.yml b/tests/typecheck/utils/test_decorators.yml index 31a02f8..1eff2f6 100644 --- a/tests/typecheck/utils/test_decorators.yml +++ b/tests/typecheck/utils/test_decorators.yml @@ -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" diff --git a/tests/typecheck/utils/test_functional.yml b/tests/typecheck/utils/test_functional.yml index 0407c18..e0c18ff 100644 --- a/tests/typecheck/utils/test_functional.yml +++ b/tests/typecheck/utils/test_functional.yml @@ -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"