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")
|
||||
|
||||
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 = {}
|
||||
# add pk if not abstract=True
|
||||
@@ -192,7 +194,7 @@ class DjangoContext:
|
||||
|
||||
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
|
||||
field_name = field.name
|
||||
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:
|
||||
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
|
||||
from django.contrib.auth.base_user import AbstractBaseUser
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
|
||||
@@ -27,6 +27,24 @@
|
||||
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
|
||||
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
|
||||
disable_cache: true
|
||||
main: |
|
||||
|
||||
Reference in New Issue
Block a user