U
    dRf                     @   s6   d dl Z d dlmZ d dlmZmZ G dd dZdS )    N)args_to_kwargs)TApplicationExceptionTMessageTypec                   @   sF   e Z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S )TAsyncClientNc                 C   s*   || _ | | _| _|d k	r || _d| _d S )Nr   )_service_iprot_oprot_seqid)selfserviceZiprotZoprot r   @/tmp/pip-unpacked-wheel-jqs7l_7o/thriftpy2/contrib/aio/client.py__init__	   s
    zTAsyncClient.__init__c                 C   s2   || j jkrt| j|S td| jj|d S )Nz!{} instance has no attribute '{}')	r   thrift_services	functoolspartial_reqAttributeErrorformat	__class____name__)r
   _apir   r   r   __getattr__   s     zTAsyncClient.__getattr__c                 C   s   | j jS N)r   r   r
   r   r   r   __dir__   s    zTAsyncClient.__dir__c              
      s   z&t | j|d }t|jf||}W nD tk
rj } z&ttjdj|jd | jj	|dW 5 d }~X Y nX t | j|d }| j
|f|I d H  t |ds| |I d H S d S )N_argsz3missing required argument {arg} for {service}.{api}r   )argr   api_resultoneway)getattrr   r   thrift_spec
ValueErrorr   ZUNKNOWN_METHODr   argsr   _send_recv)r
   r   r$   kwargsZservice_argseZ
result_clsr   r   r   r      s       
zTAsyncClient._reqc                    s   t t | j|d d}|r tjntj}| j||| j t | j|d  }| D ]\}}t	||| qR| j
| | j  | jj I d H  d S )Nr   r    r   )r!   r   r   ZONEWAYCALLr   Zwrite_message_beginr	   itemssetattrZwrite_structZwrite_message_endtransflush)r
   r   r'   r    msg_typer$   kvr   r   r   r%   *   s    
zTAsyncClient._sendc           	         s   | j  I d H \}}}|tjkrLt }| j |I d H  | j  I d H  |t| j|d  }| j |I d H  | j  I d H  t	|dr|j
d k	r|j
S t|jdkrd S |j D ]\}}|dkr|r|qt	|drttjd S )Nr   successr   )r   Zread_message_beginr   Z	EXCEPTIONr   Zread_structZread_message_endr!   r   hasattrr1   lenr"   __dict__r*   ZMISSING_RESULT)	r
   r   fnamemtypeZrseqidxresultr/   r0   r   r   r   r&   5   s$    

zTAsyncClient._recvc                 C   s(   | j j  | j | jkr$| jj  d S r   )r   r,   closer   r   r   r   r   r9   P   s    zTAsyncClient.close)N)
r   
__module____qualname__r   r   r   r   r%   r&   r9   r   r   r   r   r      s   
r   )r   Zthriftpy2.thriftr   r   r   r   r   r   r   r   <module>   s   