o
    tf                     @   sv   d Z ddlZddlmZmZ ddlmZmZmZ ddl	Z	ddl
Z	ddlmZ G dd deZG d	d
 d
eZd
gZdS )z>ZAP Authenticator in a Python Thread.

.. versionadded:: 14.1
    N)EventThread)AnyListOptional   )Authenticatorc                       s   e Zd ZU dZejed< ejed< e	ed< dZ
eejj ed< de	dejddf fdd	Zdd
dZdd Zdee defddZ  ZS )AuthenticationThreadzgA Thread for running a zmq Authenticator

    This is run in the background by ThreadAuthenticator
    pipeloopauthenticatorNpollerreturnc                    s.   t  jdd || _|j| _|| _t | _d S )NT)daemon)super__init__r   logr
   r   started)selfr   r
   	__class__ X/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/zmq/auth/thread.pyr      s
   zAuthenticationThread.__init__c                 C   s\   t  }z||   W | jr| j  d| _|  dS | jr)| j  d| _|  w )z*Start the Authentication Agent thread taskN)asyncionew_event_looprun_until_complete_runr
   close)r   r   r   r   r   run*   s   


zAuthenticationThread.runc                    s   t j | _| j| jt j | j| jjt j | j	
  	 t| j I d H }| j|v r;| j }| |r;d S | jj|v rP| jj }| j|I d H  q N)zmqr   Pollerr   registerr
   POLLINr   Z
zap_socketr   setdictpollZrecv_multipart_handle_pipe_messageZhandle_zap_message)r   eventsmsgr   r   r   r   7   s   



zAuthenticationThread._runr)   c                 C   s@   |d }| j d| |dkrdS | j d| | jd dS )Nr   zauth received API command %r	   TERMINATETz!Invalid auth command from API: %rs   ERRORF)r   debugerrorr
   send)r   r)   commandr   r   r   r'   G   s   z)AuthenticationThread._handle_pipe_messager   N)__name__
__module____qualname____doc__r    Socket__annotations__r   AbstractEventLoopr   r   r   r!   r   r   r   r   bytesboolr'   __classcell__r   r   r   r   r	      s    
 


r	   c                       s   e Zd ZU dZded< dZeed< eed< 			dd	ed
 dede	f fddZ
d fddZd fddZdefddZdddZ  ZS )ThreadAuthenticatorz-Run ZAP authentication in a background threadz
zmq.Socketr
    pipe_endpointthreadNutf-8contextzzmq.Contextencodingr   c                    s4   t  j|||d d | _dt|  d| _d | _d S )N)r?   r@   r   z	inproc://z.inproc)r   r   r
   idr<   r=   )r   r?   r@   r   r   r   r   r   \   s   
zThreadAuthenticator.__init__r   c                    s   t    | jjtjtjd| _d| j_| j	| j
 | jjtjtjd}d|_|| j
 t| |d| _| j  | jjjddsFtddS )zStart the authentication thread)Zsocket_classr   )r   r
   
   )timeoutz$Authenticator thread failed to startN)r   startr?   socketr    ZPAIRr4   r
   Zlingerbindr<   connectr	   r=   r   waitRuntimeError)r   Zthread_piper   r   r   rD   g   s   

zThreadAuthenticator.startc                    sH   | j r| j d |  r| j  d| _| j   d| _ t   dS )zStop the authentication threadr*   N)r
   r-   is_aliver=   joinr   r   stopr   r   r   r   rL   x   s   

zThreadAuthenticator.stopc                 C   s   t | jo| j S )z$Is the ZAP thread currently running?)r8   r=   rJ   rM   r   r   r   rJ      s   zThreadAuthenticator.is_alivec                 C   s   |    d S r   )rL   rM   r   r   r   __del__   s   zThreadAuthenticator.__del__)Nr>   Nr/   )r0   r1   r2   r3   r5   r<   strr	   r   r   r   rD   rL   r8   rJ   rN   r9   r   r   r   r   r:   U   s&   
 r:   )r3   r   	threadingr   r   typingr   r   r   r    Zzmq.asynciobaser   r	   r:   __all__r   r   r   r   <module>   s    B
6