
    xh                         S SK Jr  S SKJrJrJr  S SKJr  S SKJ	r	J
r
  S SKJr  S SKJr   " S S\5      r " S	 S
\\5      rg)    )parse)AbstractBaseUserBaseUserManagerPermissionsMixin)models)ExistsOuterRef)gettext_lazy)ProjectAlertStatusc                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
UserManager   z
A custom user manager to deal with emails as unique identifiers for auth
instead of usernames. The default that's used is "UserManager"
c                     U(       d  [        S5      eU R                  U5      nU R                  " SSU0UD6nUR                  U5        UR	                  5         U$ )z=
Creates and saves a User with the given email and password.
zThe Email must be setemail )
ValueErrornormalize_emailmodelset_passwordsave)selfr   passwordextra_fieldsusers        /code/apps/users/models.pycreate_userUserManager.create_user   sU     455$$U+zz666(#		    c                    UR                  SS5        UR                  SS5        UR                  SS5        UR                  S5      SLa  [        S5      eUR                  S5      SLa  [        S5      eU R                  " X40 UD6$ )Nis_staffTis_superuser	is_activez"Superuser must have is_staff=True.z&Superuser must have is_superuser=True.)
setdefaultgetr   r   )r   r   r   r   s       r   create_superuserUserManager.create_superuser!   s    
D15T2J't3ABBN+47EFF@<@@r   c                 j    U R                  US9nU R                  X!R                  R                  5      $ )zODistinct users associated with a project notification who should receive alerts)Oorganizations_ext_organizationuser__teams__projects__projectalert__notification)filter_exclude_recipientsproject_alertproject)r   notificationquerysets      r   alert_notification_recipients)UserManager.alert_notification_recipients,   s7    ;;\h  
 ''2L2L2T2TUUr   c                 V    U R                  US9nU R                  X!R                  5      $ )zQDistinct users associated with a project uptime monitor who should receive alerts)<organizations_ext_organizationuser__teams__projects__monitor)r)   r*   r,   )r   monitorr.   s      r   uptime_monitor_recipients%UserManager.uptime_monitor_recipients3   s/    ;;IP  
 ''//BBr   c                 N   SSK Jn  UR                  R                  [	        S5      U[
        R                  S9nUR                  R                  [	        S5      US9nUR                  [        U5      [        U5      ) [        R                  " SS9) -  -  5      R                  5       $ )zNExclude from queryset users who have a preference not to receive notificationsr   )UserProjectAlertpk)r   r,   status)r   r,   T)subscribe_by_default)apps.projects.modelsr7   objectsr)   r	   r   OFFexcluder   r   Qdistinct)r   r.   r,   r7   explicit_offhas_project_alerts         r   r*   UserManager._exclude_recipients:   s    9'//66$9K9O9O 7 
 -44;;$ < 
 < ())VXX4-P,PPR
 (*	r   r   N)__name__
__module____qualname____firstlineno____doc__r   r%   r/   r4   r*   __static_attributes__r   r   r   r   r      s#    

	AVCr   r   c                      \ rS rSr\R
                  " SSS9r\R                  " \" S5      SSS9r	\R                  " \" S5      S	\" S
5      S9r\R                  " \" S5      S\" S5      S9r\R                  " SSS9r\R                  " SS9r\R                  " SSS9r\R                  " \S9rSrSr\" 5       rS rS rS r\S 5       r\S 5       rS\4S jrSr g)UserL   Tcase_insensitive)uniquedb_collationname   )
max_lengthblankzstaff statusFz3Designates whether the user can log into this site.)default	help_textactivezeDesignates whether this user should be treated as active. Unselect this instead of deleting accounts.)nullrS   )auto_now_addzISubscribe to project notifications by default. Overrides project settings)rT   r   c                     U R                   $ Nr   r   s    r   __str__User.__str__g       zzr   c                     U R                   $ rZ   r[   r\   s    r   get_full_nameUser.get_full_namej   r_   r   c                     U R                   $ rZ   r[   r\   s    r   get_short_nameUser.get_short_namem   r_   r   c                     U R                   $ rZ   r[   r\   s    r   usernameUser.usernamep   s    zzr   c                     g rZ   r   r\   s    r   
auth_tokenUser.auth_tokent   s    r   tagsc                    [         R                  " UR                  S5      5      nU R                  c  0 U l        U Vs0 s H&  o3S   R	                  S5      (       d  M  US   US   _M(     snU R                  S'   gs  snf )z/
Set UTM querystring to user's analytics field
?Nr   utm_   register)r   	parse_qslstrip	analytics
startswith)r   rl   parsed_tagstags       r   set_register_analytics_tags User.set_register_analytics_tagsx   so     oodjjo6>>!DN&1&
&1sV5F5Fv5NNCFCFNk&
z" &
s   A<A<)rt   N)!rD   rE   rF   rG   r   
EmailFieldr   	CharField_rP   BooleanFieldr    r"   	JSONFieldrt   DateTimeFieldcreatedr:   dictoptionsUSERNAME_FIELDEMAIL_FIELDr   r<   r]   ra   rd   propertyrg   rj   strrx   rI   r   r   r   rK   rK   L   s   T8JKEAfI#TBD""	.IJH
 ##	(:
I   d$7I""5G!..] t,GNKmG    	
 	
r   rK   N)urllibr   django.contrib.auth.modelsr   r   r   	django.dbr   django.db.modelsr   r	   django.utils.translationr
   r|   r;   r   r   rK   r   r   r   <module>r      s=     
  - 6 3:/ :z5
- 5
r   