o
    Lf`                     @   sl   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ ddl	m
Z
 G dd	 d	ejZG d
d dejZdS )    N)	timedelta)modelsQ)timezone   )app_settingsc                   @   sn   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )EmailAddressManagerc                 C   s2   d}t jrdS t jr| j|d }|t jk }|S )NTuser)r   CHANGE_EMAILMAX_EMAIL_ADDRESSESfiltercount)selfr   retr    r   Y/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/account/managers.pycan_add_email   s   
z!EmailAddressManager.can_add_emailc                 C   s&   t jsJ | jjj|ddd S )z^
        Returns the email address the user is in the process of changing to, if any.
        Fr   verifiedpk)r   r   modelobjectsr   order_bylastr   r   r   r   r   get_new   s   
zEmailAddressManager.get_newc                 C   sT   t jsJ | |}|s| jjj||d}n||_d|_d|_|	  |
| |S )z
        Adds an email address the user wishes to change to, replacing his
        current email address once confirmed.
        )r   emailF)r   r   r   r   r   creater   r   primarysavesend_confirmation)r   requestr   r   instancer   r   r   add_new_email!   s   


z!EmailAddressManager.add_new_emailFc                 C   s2   | j ||d|id\}}|r|r|j||d |S )Nr   )r   email__iexactdefaults)signup)get_or_creater"   )r   r#   r   r   confirmr(   email_addresscreatedr   r   r   	add_email4   s   

zEmailAddressManager.add_emailc                 C   s   | j |dddd S )NTr   z-primaryr   )r   r   firstr   r   r   r   get_verified>   s   z EmailAddressManager.get_verifiedc                 C   s*   z| j |ddW S  | jjy   Y d S w )NT)r   r    )getr   DoesNotExistr   r   r   r   get_primaryA   s
   zEmailAddressManager.get_primaryc                 C   s0   ddl m} | |}|r|j}|S ||}|S )Nr   )
user_email)allauth.account.utilsr3   r2   r   )r   r   r3   r    r   r   r   r   get_primary_emailG   s   
z%EmailAddressManager.get_primary_emailc                 C   s   dd | j d|dD S )Nc                 S   s   g | ]}|j qS r   r
   ).0addressr   r   r   
<listcomp>T   s    z5EmailAddressManager.get_users_for.<locals>.<listcomp>T)r   r&   )r   r   r   r   r   r   get_users_forQ   s   z!EmailAddressManager.get_users_forc                 C   s
   ||_ dS )a  
        In a multi-db setup, inserting records and re-reading them later
        on may result in not being able to find newly inserted
        records. Therefore, we maintain a cache for the user so that
        we can avoid database access when we need to re-read..
        N)_emailaddress_cache)r   r   	addressesr   r   r   fill_cache_for_userX   s   
z'EmailAddressManager.fill_cache_for_userc                 C   s^   d}t ||d }|d u r| j||d}||_|S |D ]}|j | kr)|  S q| j )Nr;   )r   r&   )getattrr0   r   r   lowerr   r1   )r   r   r   	cache_keyr<   r   r7   r   r   r   get_for_usera   s   
z EmailAddressManager.get_for_userc                 C   s   | j |dd S )NT)r&   r   )r   existsr9   r   r   r   is_verifiedp   s   zEmailAddressManager.is_verifiedc                 C   s4   dd |D }|s|   S tdd |}| |S )Nc                 S   s   g | ]}t |d qS ))r&   r   )r6   er   r   r   r8   t   s    z.EmailAddressManager.lookup.<locals>.<listcomp>c                 S   s   | |B S Nr   )abr   r   r   <lambda>w   s    z,EmailAddressManager.lookup.<locals>.<lambda>)none	functoolsreducer   )r   emailsq_listqr   r   r   lookups   s
   
zEmailAddressManager.lookupN)FF)__name__
__module____qualname__r   r   r%   r-   r/   r2   r5   r:   r=   rA   rC   rO   r   r   r   r   r	      s    	


	r	   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
EmailConfirmationManagerc                 C   s   |  |  S rE   )r   	expired_qr   r   r   r   all_expired|   s   z$EmailConfirmationManager.all_expiredc                 C   s   |  |  jddS )NF)email_address__verified)excluderT   r   rU   r   r   r   	all_valid   s   z"EmailConfirmationManager.all_validc                 C   s   t  ttjd }t|dS )N)days)sent__lt)r   nowr   r   EMAIL_CONFIRMATION_EXPIRE_DAYSr   )r   sent_thresholdr   r   r   rT      s   
z"EmailConfirmationManager.expired_qc                 C   s   |     d S rE   )rV   deleterU   r   r   r   delete_expired_confirmations   s   z5EmailConfirmationManager.delete_expired_confirmationsN)rP   rQ   rR   rV   rY   rT   r`   r   r   r   r   rS   {   s
    rS   )rJ   datetimer   	django.dbr   django.db.modelsr   django.utilsr    r   Managerr	   rS   r   r   r   r   <module>   s    p