a
    T+_S
                     @   sd   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 )    )	timedelta)models)Q)timezone   )app_settingsc                   @   s>   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd ZdS )EmailAddressManagerc                 C   s(   d}t jr$| j|d }|t jk }|S )NTuser)r   ZMAX_EMAIL_ADDRESSESfiltercount)selfr
   retr    r   P/var/www/html/Ranjet/env/lib/python3.9/site-packages/allauth/account/managers.pycan_add_email   s
    
z!EmailAddressManager.can_add_emailFc                 C   s2   | j ||d|id\}}|r.|r.|j||d |S )Nemail)r
   email__iexactdefaults)signup)Zget_or_createZsend_confirmation)r   requestr
   r   Zconfirmr   Zemail_addresscreatedr   r   r   	add_email   s    

zEmailAddressManager.add_emailc                 C   s.   z| j |ddW S  | jjy(   Y d S 0 d S )NT)r
   Zprimary)getmodelDoesNotExist)r   r
   r   r   r   get_primary   s    zEmailAddressManager.get_primaryc                 C   s   dd | j d|dD S )Nc                 S   s   g | ]
}|j qS r   r	   ).0addressr   r   r   
<listcomp>%   s   z5EmailAddressManager.get_users_for.<locals>.<listcomp>T)Zverifiedr   )r   )r   r   r   r   r   get_users_for"   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_user)   s    z'EmailAddressManager.fill_cache_for_userc                 C   sb   d}t ||d }|d u r0| j||d}||_|S |D ]}|j | kr4|  S q4| j d S )Nr!   )r
   r   )getattrr   r
   r   lowerr   r   )r   r
   r   Z	cache_keyr"   r   r   r   r   r   get_for_user2   s    
z EmailAddressManager.get_for_userN)FF)	__name__
__module____qualname__r   r   r   r    r#   r&   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 N)r   	expired_qr   r   r   r   all_expiredC   s    z$EmailConfirmationManager.all_expiredc                 C   s   |  |  S r+   )excluder,   r-   r   r   r   	all_validF   s    z"EmailConfirmationManager.all_validc                 C   s   t  ttjd }t|dS )N)days)Zsent__lt)r   nowr   r   ZEMAIL_CONFIRMATION_EXPIRE_DAYSr   )r   Zsent_thresholdr   r   r   r,   I   s    z"EmailConfirmationManager.expired_qc                 C   s   |     d S r+   )r.   deleter-   r   r   r   delete_expired_confirmationsO   s    z5EmailConfirmationManager.delete_expired_confirmationsN)r'   r(   r)   r.   r0   r,   r4   r   r   r   r   r*   B   s   r*   N)datetimer   Z	django.dbr   Zdjango.db.modelsr   Zdjango.utilsr    r   Managerr   r*   r   r   r   r   <module>   s   8