U
    >if                     @   s   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	m
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 d dlmZ d dlmZ d dlmZ ejsedG dd de	jZG dd de	j Z!dS )    )import_module)List)settings)ImproperlyConfigured)modelstransaction)HttpRequest)timezone)gettext_lazy)app_settings)get_adapter)context)HTTP_USER_AGENT_MAX_LENGTH)get_session_userz@allauth.usersessions not installed, yet its models are imported.c                   @   s,   e Zd Zed dddZedddZdS )	UserSessionManagerUserSession)returnc                 C   s6   g }t jj|d}| D ]}| s|| q|S )N)user)r   objectsfilteriteratorpurgeappend)selfr   retsessionssession r   ?/tmp/pip-unpacked-wheel-upujnpc2/allauth/usersessions/models.pypurge_and_list   s    z!UserSessionManager.purge_and_list)requestc              
   C   s$  |j jst |jjs |j  |jdddtj	
dj }t|j t ||d}d }t  ddlm} tjj|jj|d\}}|st|j|j |j|j|j|j|jd}|d	 |_ |d
 |_|d |_t |_|  W 5 Q R X |r |j|jks|j|jkr |jt|||d d S )NZHTTP_USER_AGENT r   
user_agent)r   ipr"   )session_client_changed)session_keydefaults)r%   r   r#   r"   data
created_atlast_seen_atr   r#   )Zsenderr    from_sessionZ
to_session)r   is_authenticated
ValueErrorr   r%   saveZMETAgetr   Z_meta	get_field
max_lengthdictr   Zget_client_ipr   ZatomicZallauth.usersessions.signalsr$   r   Zget_or_creater#   r"   r'   r(   r)   r	   nowsend)r   r    Zuar&   r*   r$   r   createdr   r   r   create_from_request!   s\    
 

 







z&UserSessionManager.create_from_requestN)__name__
__module____qualname__r   r   r   r5   r   r   r   r   r      s   r   c                   @   s   e Zd Ze Zejejej	dZ
ejejdZe ZejejdZejedddddZejedZejedZd	d
 Zdd Zdd Zdd Zdd Zdd ZdS )r   )Z	on_delete)defaultzsession key(   TF)r0   uniqueeditable)r0   c                 C   s   | j  d| j dS )Nz ())r#   r"   r   r   r   r   __str__c   s    zUserSession.__str__c                 G   s   t tj}|j| S N)r   r   SESSION_ENGINESessionStore)r   argsenginer   r   r   _session_storef   s    
zUserSession._session_storec                 C   s   |   | jS r@   )rE   existsr%   r>   r   r   r   rF   j   s    zUserSession.existsc                 C   s8   |    }|s$t| | j}| }|r4|   dS dS )NTF)rF   r   rE   r%   delete)r   r   r   r   r   r   r   m   s    
zUserSession.purgec                 C   s   | j tjjj kS r@   )r%   r   r    r   r>   r   r   r   
is_currentz   s    zUserSession.is_currentc                 C   s*   t tj}| }|| j |   d S r@   )r   r   rA   rB   rG   r%   )r   rD   storer   r   r   end}   s    
zUserSession.endN) r6   r7   r8   r   r   r   Z
ForeignKeyr   ZAUTH_USER_MODELZCASCADEr   ZDateTimeFieldr	   r2   r(   ZGenericIPAddressFieldr#   r)   Z	CharField_r%   r   r"   Z	JSONFieldr1   r'   r?   rE   rF   r   rH   rJ   r   r   r   r   r   V   s&      r   N)"	importlibr   typingr   Zdjango.confr   Zdjango.core.exceptionsr   Z	django.dbr   r   Zdjango.httpr   Zdjango.utilsr	   Zdjango.utils.translationr
   rK   Zallauthr   Zallauth_settingsZallauth.account.adapterr   Zallauth.corer   Zallauth.core.internal.httpkitr   Z allauth.core.internal.sessionkitr   ZUSERSESSIONS_ENABLEDManagerr   ZModelr   r   r   r   r   <module>   s$   >