add proper stubs for django.contrib.auth.models model fields (#170)

This commit is contained in:
Maxim Kurnikov
2019-09-18 01:40:15 +03:00
committed by GitHub
parent a8fdd4c673
commit 64720f492c
3 changed files with 40 additions and 18 deletions

View File

@@ -13,14 +13,12 @@ class BaseUserManager(models.Manager[_T]):
def get_by_natural_key(self, username: Optional[str]) -> _T: ...
class AbstractBaseUser(models.Model):
password: models.CharField = ...
last_login: models.DateTimeField = ...
is_active: models.BooleanField = ...
password = models.CharField(max_length=128)
last_login = models.DateTimeField(blank=True, null=True)
REQUIRED_FIELDS: List[str] = ...
class Meta: ...
def get_username(self) -> str: ...
def clean(self) -> None: ...
def save(self, *args: Any, **kwargs: Any) -> None: ...
def natural_key(self) -> Tuple[str]: ...
@property
def is_anonymous(self) -> bool: ...

View File

@@ -15,17 +15,17 @@ class PermissionManager(models.Manager):
class Permission(models.Model):
content_type_id: int
name: models.CharField = ...
content_type: models.ForeignKey = models.ForeignKey(ContentType, on_delete=models.CASCADE)
codename: models.CharField = ...
name = models.CharField(max_length=255)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
codename = models.CharField(max_length=100)
def natural_key(self) -> Tuple[str, str, str]: ...
class GroupManager(models.Manager):
def get_by_natural_key(self, name: str) -> Group: ...
class Group(models.Model):
name: models.CharField = ...
permissions: models.ManyToManyField = models.ManyToManyField(Permission)
name = models.CharField(max_length=150)
permissions = models.ManyToManyField(Permission)
def natural_key(self): ...
_T = TypeVar("_T", bound=Model)
@@ -39,7 +39,7 @@ class UserManager(BaseUserManager[_T]):
) -> _T: ...
class PermissionsMixin(models.Model):
is_superuser: models.BooleanField = ...
is_superuser = models.BooleanField()
groups: models.ManyToManyField = models.ManyToManyField(Group)
user_permissions: models.ManyToManyField = models.ManyToManyField(Permission)
def get_group_permissions(self, obj: None = ...) -> Set[str]: ...
@@ -50,15 +50,17 @@ class PermissionsMixin(models.Model):
class AbstractUser(AbstractBaseUser, PermissionsMixin): # type: ignore
username_validator: UnicodeUsernameValidator = ...
username: models.CharField = ...
first_name: models.CharField = ...
last_name: models.CharField = ...
email: models.EmailField = ...
is_staff: models.BooleanField = ...
date_joined: models.DateTimeField = ...
username = models.CharField(max_length=150)
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=150, blank=True)
email = models.EmailField(blank=True)
is_staff = models.BooleanField()
is_active = models.BooleanField()
date_joined = models.DateTimeField()
EMAIL_FIELD: str = ...
USERNAME_FIELD: str = ...
def clean(self) -> None: ...
def get_full_name(self) -> str: ...
def get_short_name(self) -> str: ...
def email_user(self, subject: str, message: str, from_email: str = ..., **kwargs: Any) -> None: ...

View File

@@ -0,0 +1,22 @@
- 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]'
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*'
from django.contrib.auth.models import PermissionsMixin
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*'