a
    XDvgA  ã                   @   sz   d dl mZ d dlmZ d dlmZ eeddƒZeƒ Zdd„ Z	dd	d
„Z
G dd„ dƒZG dd„ deƒZdd„ Zdd„ ZdS )é    )Úsettings)ÚAnonymousUser)ÚlocalZLOCAL_USER_ATTR_NAMEZ_current_userc                 C   s   t tt|  | t¡ƒ d S ©N)ÚsetattrÚ_thread_localsÚUSER_ATTR_NAMEÚ__get__r   )Zuser_fun© r
   úV/var/www/sistema_ama/venv/lib/python3.9/site-packages/django_currentuser/middleware.pyÚ_do_set_current_user
   s    r   Nc                    s   t ‡ fdd„ƒ dS )z‡
    Sets current user in local thread.

    Can be used as a hook e.g. for shell jobs (when request object is not
    available).
    c                    s   ˆ S r   r
   ©Úself©Úuserr
   r   Ú<lambda>   ó    z#_set_current_user.<locals>.<lambda>N©r   r   r
   r   r   Ú_set_current_user   s    r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSetCurrentUserc                 C   s
   || _ d S r   )Úrequest)Úthisr   r
   r
   r   Ú__init__   s    zSetCurrentUser.__init__c                    s   t ‡ fdd„ƒ d S )Nc                    s   t ˆ jdd ƒS )Nr   )Úgetattrr   r   ©r   r
   r   r      r   z*SetCurrentUser.__enter__.<locals>.<lambda>r   r   r
   r   r   Ú	__enter__   s    zSetCurrentUser.__enter__c                 C   s   t dd„ ƒ d S )Nc                 S   s   d S r   r
   r   r
   r
   r   r       r   z)SetCurrentUser.__exit__.<locals>.<lambda>r   )r   ÚtypeÚvalueÚ	tracebackr
   r
   r   Ú__exit__   s    zSetCurrentUser.__exit__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r
   r
   r
   r   r      s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚThreadLocalUserMiddlewarec                 C   s
   || _ d S r   )Úget_response)r   r$   r
   r
   r   r   %   s    z"ThreadLocalUserMiddleware.__init__c                 C   s6   t |ƒ� |  |¡}W d   ƒ n1 s(0    Y  |S r   )r   r$   )r   r   Úresponser
   r
   r   Ú__call__(   s    
(z"ThreadLocalUserMiddleware.__call__N)r    r!   r"   r   r&   r
   r
   r
   r   r#   #   s   r#   c                  C   s   t ttd ƒ} t| ƒr| ƒ S | S r   )r   r   r   Úcallable©Zcurrent_userr
   r
   r   Úget_current_user1   s    r)   c                  C   s   t ƒ } t| tƒrd S | S r   )r)   Ú
isinstancer   r(   r
   r
   r   Úget_current_authenticated_user8   s    
r+   )N)Údjango.confr   Údjango.contrib.auth.modelsr   Ú	threadingr   r   r   r   r   r   r   Úobjectr#   r)   r+   r
   r
   r
   r   Ú<module>   s   

