unb-mds/2023-2-Squad06

View on GitHub
apps/users/managers.py

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
from typing import TYPE_CHECKING, Any

from django.contrib.auth.models import BaseUserManager

if TYPE_CHECKING:
    from apps.users.models import User
else:
    User = Any


class UserManager(BaseUserManager[User]):
    def _create_user(
        self,
        username: str,
        email: str,
        password: str,
        **fields: bool,
    ) -> User:
        email = self.normalize_email(email)
        user = self.model(username=username, email=email, **fields)

        user.set_password(password)
        user.save()

        return user

    def create_user(
        self, username: str, email: str, password: str, **fields: bool
    ) -> User:
        fields.setdefault("is_staff", False)
        fields.setdefault("is_superuser", False)

        return self._create_user(username, email, password, **fields)

    def create_superuser(
        self, username: str, email: str, password: str, **fields: bool
    ) -> User:
        fields["is_staff"] = True
        fields["is_superuser"] = True

        return self._create_user(username, email, password, **fields)