o aR>@sRddlmZddlmZddlmZmZddlmZddl m Z ddl m Z ddl mZddlmZdd lmZdd lmZdd lmZd d lmZddZGdddejZGdddejZGdddejZGdddejZ GdddeZ!ddZ"ddZ#ddZ$Gd d!d!ejZ%Gd"d#d#ee%Z&Gd$d%d%e&Z'Gd&d'd'Z(d(S)))apps)auth)AbstractBaseUserBaseUserManager) make_password) ContentType)PermissionDenied) send_mail)models) EmptyManager)timezone) gettext_lazy)UnicodeUsernameValidatorcKst|_|jdgddS)zZ A signal receiver which updates the last_login date for the user logging in. last_login) update_fieldsN)r nowrsave)senderuserkwargsr3z-PermissionsMixin.has_perms..rr" perm_listrgrrr has_perms.szPermissionsMixin.has_permscCs|jr|jrdSt||S)z Return True if the user has any permissions in the given app label. Use similar logic as has_perm(), above. T)rer^r})r"r#rrrr|5s  z!PermissionsMixin.has_module_permsr:)r%r&r'r<r BooleanFieldr3r^rMrDrIr)user_permissionsr7rrrrzrr|rrrrr~sD       r~c seZdZdZeZejedddedegdedidZ ejed ddd Z ejed ddd Z ej ed dd Z ejeddeddZejeddeddZejedejdZeZdZdZdgZGdddZfddZddZddZd"d d!ZZS)# AbstractUserz An abstract base class implementing a fully featured User model with admin-compliant permissions. Username and password are required. Other fields are optional. rOrETzFRequired. 150 characters or fewer. Letters, digits and @/./+/-/_ only.rFz)A user with that username already exists.)r,rFr validatorserror_messagesz first name)r,rGz last namez email address)rGz staff statusFz9Designates whether the user can log into this admin site.ractivezeDesignates whether this user should be treated as active. Unselect this instead of deleting accounts.z date joined)rrPc@s eZdZedZedZdZdS)zAbstractUser.MetarusersTN)r%r&r'r3r-r4rrrrrr7lsr7cs t|jj|j|_dSr:)superclean __class__rrSrPr8rrrrqs zAbstractUser.cleancCsd|j|jf}|S)zT Return the first_name plus the last_name, with a space in between. z%s %s) first_name last_namestrip)r" full_namerrr get_full_nameuszAbstractUser.get_full_namecCrJ)z#Return the short name for the user.)rr8rrrget_short_name|zAbstractUser.get_short_nameNcKst||||jgfi|dS)zSend an email to this user.N)r rP)r"subjectmessage from_emailrrrr email_userszAbstractUser.email_userr:) r%r&r'r<rusername_validatorr r=r3rOrr EmailFieldrPrr]re DateTimeFieldr r date_joinedrNr EMAIL_FIELDUSERNAME_FIELDREQUIRED_FIELDSr7rrrr __classcell__rrrrrAsJ  rc@s"eZdZdZGdddejZdS)Userz Users within the Django authentication system are represented by this model. Username and password are required. Other fields are optional. c@r)z User.MetaAUTH_USER_MODELN)r%r&r' swappablerrrrr7rr7N)r%r&r'r<rr7rrrrrsrc@seZdZdZdZdZdZdZdZe e Z e e Z ddZddZdd Zd d Zd d ZddZddZddZeddZeddZd*ddZd*ddZd*ddZd*ddZd*d d!Zd"d#Zed$d%Zed&d'Z d(d)Z!dS)+ AnonymousUserNFcCdS)Nrrr8rrrr9zAnonymousUser.__str__cCs t||jSr:)rjr)r"otherrrr__eq__rCzAnonymousUser.__eq__cCr)Nrrr8rrr__hash__rzAnonymousUser.__hash__cCtd)NzLCannot cast AnonymousUser to int. Are you trying to use it in place of User?)rlr8rrr__int__rLzAnonymousUser.__int__cCrNz=Django doesn't provide a DB representation for AnonymousUser.NotImplementedErrorr8rrrrrLzAnonymousUser.savecCrrrr8rrrdeleterLzAnonymousUser.deletecCrrrr" raw_passwordrrr set_passwordrLzAnonymousUser.set_passwordcCrrrrrrrcheck_passwordrLzAnonymousUser.check_passwordcCrJr:)_groupsr8rrrrIrzAnonymousUser.groupscCrJr:)_user_permissionsr8rrrrrzAnonymousUser.user_permissionscCr)NrrrrrrrrCz"AnonymousUser.get_user_permissionscCstSr:)rsrrrrrrKz#AnonymousUser.get_group_permissionscCrrrrrrrrrCz!AnonymousUser.get_all_permissionscCst|||dS)N)rg)r{rrrrrzszAnonymousUser.has_permcr)Nc3rr:rrrrrrrz*AnonymousUser.has_perms..rrrrrrszAnonymousUser.has_permscCs t||Sr:)r})r"modulerrrr|s zAnonymousUser.has_module_permscCr)NTrr8rrr is_anonymouszAnonymousUser.is_anonymouscCr)NFrr8rrris_authenticatedrzAnonymousUser.is_authenticatedcCrJr:)rOr8rrr get_usernamerKzAnonymousUser.get_usernamer:)"r%r&r'idpkrOr]rer^r rDrr)rr9rrrrrrrpropertyrIrrrrrzrr|rrrrrrrrs@          rN)) django.appsrdjango.contribrdjango.contrib.auth.base_userrrdjango.contrib.auth.hashersr"django.contrib.contenttypes.modelsrdjango.core.exceptionsrdjango.core.mailr django.dbr django.db.models.managerr django.utilsr django.utils.translationr r3rrrManagerrModelr)rArDrNrxr{r}r~rrrrrrrs2            / %@ YD