From 8343d768957a0c31f1fdb8003151855f0a2adf4f Mon Sep 17 00:00:00 2001 From: Maksim Kurnikov Date: Tue, 19 Nov 2019 04:54:17 +0300 Subject: [PATCH] Fix has_perm() methods for auth backend, and for contrib.auth.models (#232) * fix has_perm() methods * lint --- django-stubs/contrib/auth/backends.pyi | 20 +++++++++++--------- django-stubs/contrib/auth/models.pyi | 20 +++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/django-stubs/contrib/auth/backends.pyi b/django-stubs/contrib/auth/backends.pyi index 28fe66d..5dfd3de 100644 --- a/django-stubs/contrib/auth/backends.pyi +++ b/django-stubs/contrib/auth/backends.pyi @@ -3,20 +3,22 @@ from typing import Any, Optional, Set, Union from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.auth.models import AnonymousUser, User +from django.db.models.base import Model + +_AnyUser = Union[Model, AnonymousUser] + UserModel: Any class ModelBackend: def authenticate( - self, request: Any, username: Optional[Union[int, str]] = ..., password: Optional[str] = ..., **kwargs: Any + self, request: Any, username: Optional[str] = ..., password: Optional[str] = ..., **kwargs: Any ) -> Optional[AbstractBaseUser]: ... - def user_can_authenticate(self, user: Optional[AbstractBaseUser]) -> bool: ... - def get_user_permissions(self, user_obj: AbstractBaseUser, obj: None = ...) -> Set[str]: ... - def get_group_permissions(self, user_obj: AbstractBaseUser, obj: None = ...) -> Set[str]: ... - def get_all_permissions(self, user_obj: AbstractBaseUser, obj: Optional[str] = ...) -> Set[str]: ... - def has_perm( - self, user_obj: Union[AbstractBaseUser, AnonymousUser], perm: str, obj: Optional[str] = ... - ) -> bool: ... - def has_module_perms(self, user_obj: Union[AbstractBaseUser, AnonymousUser], app_label: str) -> bool: ... + def user_can_authenticate(self, user: Optional[_AnyUser]) -> bool: ... + def get_user_permissions(self, user_obj: _AnyUser, obj: Optional[Model] = ...) -> Set[str]: ... + def get_group_permissions(self, user_obj: _AnyUser, obj: Optional[Model] = ...) -> Set[str]: ... + def get_all_permissions(self, user_obj: _AnyUser, obj: Optional[Model] = ...) -> Set[str]: ... + def has_perm(self, user_obj: _AnyUser, perm: str, obj: Optional[Model] = ...) -> bool: ... + def has_module_perms(self, user_obj: _AnyUser, app_label: str) -> bool: ... def get_user(self, user_id: int) -> AbstractBaseUser: ... class AllowAllUsersModelBackend(ModelBackend): ... diff --git a/django-stubs/contrib/auth/models.pyi b/django-stubs/contrib/auth/models.pyi index fcc4e20..53a987d 100644 --- a/django-stubs/contrib/auth/models.pyi +++ b/django-stubs/contrib/auth/models.pyi @@ -1,4 +1,4 @@ -from typing import Any, Collection, Optional, Set, Tuple, Type, TypeVar +from typing import Any, Collection, Optional, Set, Tuple, Type, TypeVar, Union from django.contrib.auth.base_user import AbstractBaseUser as AbstractBaseUser, BaseUserManager as BaseUserManager from django.contrib.auth.validators import UnicodeUsernameValidator @@ -8,6 +8,8 @@ from django.db.models.manager import EmptyManager from django.db import models +_AnyUser = Union[Model, "AnonymousUser"] + def update_last_login(sender: Type[AbstractBaseUser], user: AbstractBaseUser, **kwargs: Any) -> None: ... class PermissionManager(models.Manager["Permission"]): @@ -46,10 +48,10 @@ class PermissionsMixin(models.Model): is_superuser = models.BooleanField() groups = models.ManyToManyField(Group) user_permissions = models.ManyToManyField(Permission) - def get_group_permissions(self, obj: None = ...) -> Set[str]: ... - def get_all_permissions(self, obj: Optional[str] = ...) -> Set[str]: ... - def has_perm(self, perm: str, obj: Optional[str] = ...) -> bool: ... - def has_perms(self, perm_list: Collection[str], obj: None = ...) -> bool: ... + def get_group_permissions(self, obj: Optional[_AnyUser] = ...) -> Set[str]: ... + def get_all_permissions(self, obj: Optional[_AnyUser] = ...) -> Set[str]: ... + def has_perm(self, perm: str, obj: Optional[_AnyUser] = ...) -> bool: ... + def has_perms(self, perm_list: Collection[str], obj: Optional[_AnyUser] = ...) -> bool: ... def has_module_perms(self, app_label: str) -> bool: ... class AbstractUser(AbstractBaseUser, PermissionsMixin): # type: ignore @@ -86,10 +88,10 @@ class AnonymousUser: def groups(self) -> EmptyManager: ... @property def user_permissions(self) -> EmptyManager: ... - def get_group_permissions(self, obj: None = ...) -> Set[Any]: ... - def get_all_permissions(self, obj: Any = ...) -> Set[str]: ... - def has_perm(self, perm: str, obj: None = ...) -> bool: ... - def has_perms(self, perm_list: Collection[str], obj: None = ...) -> bool: ... + def get_group_permissions(self, obj: Optional[_AnyUser] = ...) -> Set[Any]: ... + def get_all_permissions(self, obj: Optional[_AnyUser] = ...) -> Set[str]: ... + def has_perm(self, perm: str, obj: Optional[_AnyUser] = ...) -> bool: ... + def has_perms(self, perm_list: Collection[str], obj: Optional[_AnyUser] = ...) -> bool: ... def has_module_perms(self, module: str) -> bool: ... @property def is_anonymous(self) -> bool: ...