U
    dRf.                     @   s>  d dl mZ d dlZddlmZ ddlmZ ddlmZ dZ	d	Z
d
ZejejfZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  ZdAd"d#Zd$d% Zd&d' Zd(d) Zd*d+ ZdBd,d-ZdCd.d/Z d0d1 Z!d2d3 Z"d4d5 Z#dDd7d8Z$dEd9d:Z%d;d< Z&G d=d> d>eZ'G d?d@ d@e(Z)dS )F    )absolute_importN   )TType   )TProtocolException)TProtocolBasei  i     c                 C   s   t d| S )N!bstructpack)byte r   =/tmp/pip-unpacked-wheel-jqs7l_7o/thriftpy2/protocol/binary.pypack_i8   s    r   c                 C   s   t d| S )N!hr
   )Zi16r   r   r   pack_i16   s    r   c                 C   s   t d| S )N!ir
   )Zi32r   r   r   pack_i32   s    r   c                 C   s   t d| S )N!qr
   )Zi64r   r   r   pack_i64    s    r   c                 C   s   t d| S )N!dr
   )Zdubr   r   r   pack_double$   s    r   c                 C   s   t dt|  t| | S )Nz!i%ds)r   r   len)stringr   r   r   pack_string(   s    r   c                 C   s   t d| d S )Nr	   r   r   unpackbufr   r   r   	unpack_i8,   s    r    c                 C   s   t d| d S )Nr   r   r   r   r   r   r   
unpack_i160   s    r!   c                 C   s   t d| d S )Nr   r   r   r   r   r   r   
unpack_i324   s    r"   c                 C   s   t d| d S )Nr   r   r   r   r   r   r   
unpack_i648   s    r#   c                 C   s   t d| d S )Nr   r   r   r   r   r   r   unpack_double<   s    r$   Tc                 C   s`   |r,|  tt|B  |  t|d n"|  t|d |  t| |  t| d S )Nutf-8)writer   	VERSION_1r   encoder   )outbufnamettypeseqidstrictr   r   r   write_message_begin@   s    r.   c                 C   s*   |t jkrt j}| t|t|  d S N)r   BINARYSTRINGr&   r   r   )r)   r+   fidr   r   r   write_field_beginK   s    
r3   c                 C   s   |  ttj d S r/   )r&   r   r   STOP)r)   r   r   r   write_field_stopQ   s    r5   c                 C   s*   |t jkrt j}| t|t|  d S r/   r   r0   r1   r&   r   r   )r)   etypesizer   r   r   write_list_beginU   s    
r9   c                 C   sB   |t jkrt j}|t jkr t j}| t|t| t|  d S r/   r6   )r)   Zktypevtyper8   r   r   r   write_map_begin[   s
    

r;   c                 C   s  |t jkr0|r| td n| td n`|t jkrL| t| nD|t jkrh| t| n(|t jkr| t| n|t j	kr| t
| n|t jkr| t| n|tkrt|ts|d}| t| n|t jks|t jkr^t|tr"|d |d  }}n
|d  }}t|}t| || |D ]}t| ||| qDn2|t jkrt|d tr|d }d }	n|d \}}	t|d tr|d }
d }n|d \}
}t| ||
t| t|D ]&}t| |||	 t| |
|| | qn|t jkrt|jD ]n}|j| }t|dkrD|\}}}d }n|\}}}}t||d }|d krjqt| || t| ||| qt |  d S )Nr   r   r%      )!r   BOOLr&   r   BYTEI16r   I32r   I64r   DOUBLEr   	BIN_TYPES
isinstancebytesr(   r   SETLISTtupler   r9   	write_valMAPintr;   iterSTRUCTthrift_specgetattrr3   r5   )r)   r+   valspece_typeZt_specZval_lenZe_valk_typek_specv_typev_speckr2   Zf_specf_typef_namef_reqf_container_specvr   r   r   rI   c   sh    











rI   c                 C   s   t | d}|dk r`|t@ }|tkr8ttjd| dt | d}| |d}|t@ }n0|rrttjdd| |d}t| d}t | d}|||fS )N   r   z%Bad version in read_message_begin: %d)typemessager%   zNo protocol version headerr   )	r"   readVERSION_MASKr'   r   ZBAD_VERSIONdecode	TYPE_MASKr    )inbufr-   szversionZname_szr*   type_r,   r   r   r   read_message_begin   s&    
rh   c                 C   s2   t | d}|tjkr |dfS |t| dfS )Nr   r   r   )r    r`   r   r4   r!   )rd   rX   r   r   r   read_field_begin   s    
ri   c                 C   s$   t | d}t| d}||fS Nr   r]   r    r`   r"   )rd   rR   re   r   r   r   read_list_begin   s    rl   c                 C   s6   t | dt | d }}t| d}|||fS rj   rk   )rd   rS   rU   re   r   r   r   read_map_begin   s    rm   Fc              	   C   s  |t jkrtt| dS |t jkr4t| dS |t jkrLt| dS |t jkrdt	| dS |t j
kr|t| dS |t jkrt| dS |t jkrt	| d}| |S |t jkrt	| d}| |}|rz|dW S  tk
r
   |r Y nX |S |t jks(|t jkrt|trH|d |d  }}n
|d  }}g }	t| \}
}|
|kr|
tkr|tkst|D ]}t| |
 qg S t|D ]}|	t| |||| q|	S |t jkrt|d tr|d }d }n|d \}}t|d tr|d }d }n|d \}}i }	t| \}}}|tkrH|}|tkrV|}||ksj||krt|D ]}t| | t| | qri S t|D ].}t| ||||}t| ||||}||	|< q|	S |t jkr| }t | ||| |S d S )Nr   r   r]      r%   r   )!r   r=   boolr    r`   r>   r?   r!   r@   r"   rA   r#   rB   r$   r0   r1   rb   UnicodeDecodeErrorrF   rG   rD   rH   rl   rC   rangeskipappendread_valrJ   rK   rm   rM   read_struct)rd   r+   rQ   decode_responsestrict_decodere   Zbyte_payloadrU   rV   resultZr_type_irS   rT   Zsk_typeZsv_typeZk_valZv_valobjr   r   r   rt      s    
















rt   c           
   	   C   s   t | \}}|tjkrq||jkr.t| | q t|j| dkrV|j| \}}}d }	n|j| \}}}	}||kr|tkr~|}nt| | q t||t| ||	|| q d S )Nr<   )	ri   r   r4   rN   rr   r   rC   setattrrt   )
rd   r{   rv   rw   rX   r2   Zsf_typerY   rZ   r[   r   r   r   ru   <  s(    




ru   c                 C   sL  |t jks|t jkr"| d n&|t jkr:| d n|t jkrP| d n|t jkrf| d n|t jkr|| d n|tkr| t	| d n|t j
ks|t jkrt| \}}t|D ]}t| | qnt|t jkrt| \}}}t|D ]}t| | t| | qn6|t jkrHt| \}}|t jkr:qHt| | qd S )Nr   r   r]   rn   )r   r=   r>   r`   r?   r@   rA   rB   rC   r"   rF   rG   rl   rq   rr   rJ   rm   rM   ri   r4   )rd   ZftyperU   re   rz   rS   rX   r2   r   r   r   rr   Z  s4    




rr   c                   @   sR   e Zd 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d ZdS )TBinaryProtocolz4Binary implementation of the Thrift protocol driver.TFc                 C   s(   t | | || _|| _|| _|| _d S r/   )r   __init__strict_readstrict_writerv   rw   )selftransr   r   rv   rw   r   r   r   r~     s
    zTBinaryProtocol.__init__c                 C   s   t | j| d S r/   )rr   r   )r   r+   r   r   r   rr     s    zTBinaryProtocol.skipc                 C   s    t | j| jd\}}}|||fS N)r-   )rh   r   r   )r   apir+   r,   r   r   r   rh     s
     z"TBinaryProtocol.read_message_beginc                 C   s   d S r/   r   r   r   r   r   read_message_end  s    z TBinaryProtocol.read_message_endc                 C   s   t | j|||| jd d S r   )r.   r   r   )r   r*   r+   r,   r   r   r   r.     s    z#TBinaryProtocol.write_message_beginc                 C   s   d S r/   r   r   r   r   r   write_message_end  s    z!TBinaryProtocol.write_message_endc                 C   s   t | j|| j| jS r/   )ru   r   rv   rw   r   r{   r   r   r   ru     s    zTBinaryProtocol.read_structc                 C   s   t | jtj| d S r/   )rI   r   r   rM   r   r   r   r   write_struct  s    zTBinaryProtocol.write_structN)TTTF)__name__
__module____qualname____doc__r~   rr   rh   r   r.   r   ru   r   r   r   r   r   r}     s         
	r}   c                   @   s   e Zd ZdddZdd ZdS )	TBinaryProtocolFactoryTFc                 C   s   || _ || _|| _|| _d S r/   )r   r   rv   rw   )r   r   r   rv   rw   r   r   r   r~     s    zTBinaryProtocolFactory.__init__c                 C   s   t || j| j| j| jS r/   )r}   r   r   rv   rw   )r   r   r   r   r   get_protocol  s      z#TBinaryProtocolFactory.get_protocolN)TTTF)r   r   r   r~   r   r   r   r   r   r     s
       
r   )T)N)T)NTF)TF)*
__future__r   r   Zthriftr   excr   baser   ra   r'   rc   r1   r0   rC   r   r   r   r   r   r   r    r!   r"   r#   r$   r.   r3   r5   r9   r;   rI   rh   ri   rl   rm   rt   ru   rr   r}   objectr   r   r   r   r   <module>   sH   

J
  
b
&&