mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-13 07:21:56 +08:00
Do not force django.contrib.* dependencies (#535)
* Do not force django.contrib.* dependencies Fixes #428. Fixes #534. * Add one more test with contenttypes installed, but auth not
This commit is contained in:
committed by
GitHub
parent
f3e0872d6e
commit
d9c851abce
@@ -148,7 +148,9 @@ class DjangoContext:
|
|||||||
raise ValueError("No primary key defined")
|
raise ValueError("No primary key defined")
|
||||||
|
|
||||||
def get_expected_types(self, api: TypeChecker, model_cls: Type[Model], *, method: str) -> Dict[str, MypyType]:
|
def get_expected_types(self, api: TypeChecker, model_cls: Type[Model], *, method: str) -> Dict[str, MypyType]:
|
||||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
contenttypes_in_apps = self.apps_registry.is_installed("django.contrib.contenttypes")
|
||||||
|
if contenttypes_in_apps:
|
||||||
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||||
|
|
||||||
expected_types = {}
|
expected_types = {}
|
||||||
# add pk if not abstract=True
|
# add pk if not abstract=True
|
||||||
@@ -192,7 +194,7 @@ class DjangoContext:
|
|||||||
|
|
||||||
expected_types[field_name] = model_set_type
|
expected_types[field_name] = model_set_type
|
||||||
|
|
||||||
elif isinstance(field, GenericForeignKey):
|
elif contenttypes_in_apps and isinstance(field, GenericForeignKey):
|
||||||
# it's generic, so cannot set specific model
|
# it's generic, so cannot set specific model
|
||||||
field_name = field.name
|
field_name = field.name
|
||||||
gfk_info = helpers.lookup_class_typeinfo(api, field.__class__)
|
gfk_info = helpers.lookup_class_typeinfo(api, field.__class__)
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ from mypy_django_plugin.lib import helpers
|
|||||||
|
|
||||||
|
|
||||||
def set_auth_user_model_as_type_for_request_user(ctx: AttributeContext, django_context: DjangoContext) -> MypyType:
|
def set_auth_user_model_as_type_for_request_user(ctx: AttributeContext, django_context: DjangoContext) -> MypyType:
|
||||||
|
if not django_context.apps_registry.is_installed("django.contrib.auth"):
|
||||||
|
return ctx.default_attr_type
|
||||||
|
|
||||||
# Imported here because django isn't properly loaded yet when module is loaded
|
# Imported here because django isn't properly loaded yet when module is loaded
|
||||||
from django.contrib.auth.base_user import AbstractBaseUser
|
from django.contrib.auth.base_user import AbstractBaseUser
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
|
|||||||
@@ -27,6 +27,24 @@
|
|||||||
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: |
|
custom_settings: |
|
||||||
INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth')
|
INSTALLED_APPS = ('django.contrib.contenttypes', 'django.contrib.auth')
|
||||||
|
- case: request_object_user_without_auth_and_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]'
|
||||||
|
if request.user.is_authenticated:
|
||||||
|
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]'
|
||||||
|
if request.user.is_authenticated:
|
||||||
|
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
|
- case: subclass_request_not_changed_user_type
|
||||||
disable_cache: true
|
disable_cache: true
|
||||||
main: |
|
main: |
|
||||||
|
|||||||
Reference in New Issue
Block a user