???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \\              &   @   sf  d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlZ	d dl
mZ d dlZd dlmZ yd dlZW n ek
r   dZY nX dd Zdejdd	  ZdXZdZZd[Zd\Zd]Zd^Zd_Zd`ZdaZdbZdcZddZdeZ dfZ!G dd de"Z#G dd de#Z$G dd de#Z%G dd de#Z&e' Z(Z)edddZ*e*j+ddkrFd d! Z,n"e*j+d"dkr`d#d! Z,nd$d! Z,[*d%d& Z-G d'd( d(Z.d)d* Z/d+d, Z0G d-d. d.Z1d/d0 Z2e.e1fZ3G d1d2 d2Z4G d3d4 d4Z5G d5d6 d6Z6G d7d8 d8Z7G d9d: d:Z8G d;d< d<Z9d Z: Z;Z<dgd>d?Z=dhd@dAZ>didBdCZ?dDdE Z@djdGdHZAG dIdJ dJerTejBneCZDG dKdL dLZEG dMdN dNZFG dOdP dPeFZGG dQdR dRZHeHZIeJdSkrbeHdTZKyeLeKjMjN  W n. e#k
r ZO zeLdUeO W Y ddZO[OX nX e9eKZPePjQ  ePjRd	dV ePjSdd	 yxeP D ]ZTeLeT qW W n. e#k
r` ZO zeLdUeO W Y ddZO[OX nX dS )k    N)datetime)Decimal)expat)BytesIOc             C   s$   | j dd} | j dd} | j ddS )N&z&amp;<z&lt;>z&gt;)replace)s r   %/usr/lib64/python3.6/xmlrpc/client.pyescape   s    r   z%d.%d         i  iX  i~  i~  i,~  i  i  iY  iZ  i[  c               @   s   e Zd Zdd ZdS )Errorc             C   s   t | S )N)repr)selfr   r   r   __str__   s    zError.__str__N)__name__
__module____qualname__r   r   r   r   r   r      s   r   c               @   s   e Zd Zdd Zdd ZdS )ProtocolErrorc             C   s&   t j|  || _|| _|| _|| _d S )N)r   __init__urlerrcodeerrmsgheaders)r   r   r   r   r   r   r   r   r      s
    
zProtocolError.__init__c             C   s   d| j j| j| j| jf S )Nz<%s for %s: %s %s>)	__class__r   r   r   r   )r   r   r   r   __repr__   s    zProtocolError.__repr__N)r   r   r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd ZdS )ResponseErrorN)r   r   r   r   r   r   r   r       s   r    c               @   s   e Zd Zdd Zdd ZdS )Faultc             K   s   t j|  || _|| _d S )N)r   r   	faultCodefaultString)r   r"   r#   Zextrar   r   r   r      s    
zFault.__init__c             C   s   d| j j| j| jf S )Nz<%s %s: %r>)r   r   r"   r#   )r   r   r   r   r      s    zFault.__repr__N)r   r   r   r   r   r   r   r   r   r!      s   r!   z%YZ0001c             C   s
   | j dS )Nz%Y%m%dT%H:%M:%S)strftime)valuer   r   r   _iso8601_format  s    r&   z%4Yc             C   s
   | j dS )Nz%4Y%m%dT%H:%M:%S)r$   )r%   r   r   r   r&     s    c             C   s   | j djdS )Nz%Y%m%dT%H:%M:%S   )r$   zfill)r%   r   r   r   r&     s    c             C   sL   t | trt| S t | ttjfs<| dkr2tj } tj| } d| d d  S )Nr   z%04d%02d%02dT%02d:%02d:%02d   )
isinstancer   r&   tupletimeZstruct_timeZ	localtime)r%   r   r   r   	_strftime  s    

r-   c               @   sn   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d Z
dd Zdd Zdd Zdd ZdS )DateTimer   c             C   s    t |tr|| _n
t|| _d S )N)r*   strr%   r-   )r   r%   r   r   r   r   )  s    
zDateTime.__init__c             C   s   t |tr| j}|j}nzt |tr2| j}t|}n`t |trH| j}|}nJt|drd| j }|j }n.t|drv|jj	p|t
|}td| jj	|f ||fS )N	timetupler   zCan't compare %s and %s)r*   r.   r%   r   r&   r/   hasattrr0   r   r   type	TypeError)r   otherr
   oZotyper   r   r   make_comparable/  s$    






zDateTime.make_comparablec             C   s   | j |\}}||k S )N)r6   )r   r4   r
   r5   r   r   r   __lt__D  s    zDateTime.__lt__c             C   s   | j |\}}||kS )N)r6   )r   r4   r
   r5   r   r   r   __le__H  s    zDateTime.__le__c             C   s   | j |\}}||kS )N)r6   )r   r4   r
   r5   r   r   r   __gt__L  s    zDateTime.__gt__c             C   s   | j |\}}||kS )N)r6   )r   r4   r
   r5   r   r   r   __ge__P  s    zDateTime.__ge__c             C   s   | j |\}}||kS )N)r6   )r   r4   r
   r5   r   r   r   __eq__T  s    zDateTime.__eq__c             C   s   t j| jdS )Nz%Y%m%dT%H:%M:%S)r,   strptimer%   )r   r   r   r   r0   X  s    zDateTime.timetuplec             C   s   | j S )N)r%   )r   r   r   r   r   `  s    zDateTime.__str__c             C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   r   r%   id)r   r   r   r   r   c  s    zDateTime.__repr__c             C   s   t |j | _d S )N)r/   stripr%   )r   datar   r   r   decodef  s    zDateTime.decodec             C   s$   |j d |j | j |j d d S )Nz<value><dateTime.iso8601>z</dateTime.iso8601></value>
)writer%   )r   outr   r   r   encodei  s    
zDateTime.encodeN)r   )r   r   r   r   r6   r7   r8   r9   r:   r;   r0   r   r   r@   rC   r   r   r   r   r.   #  s   
r.   c             C   s   t  }|j|  |S )N)r.   r@   )r?   r%   r   r   r   	_datetimen  s    
rD   c             C   s   t j| dS )Nz%Y%m%dT%H:%M:%S)r   r<   )r?   r   r   r   _datetime_typet  s    rE   c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )BinaryNc             C   s>   |d krd}n&t |ttfs,td|jj t|}|| _d S )N    z#expected bytes or bytearray, not %s)r*   bytes	bytearrayr3   r   r   r?   )r   r?   r   r   r   r     s    zBinary.__init__c             C   s   t | jdS )Nzlatin-1)r/   r?   )r   r   r   r   r     s    zBinary.__str__c             C   s   t |tr|j}| j|kS )N)r*   rF   r?   )r   r4   r   r   r   r;     s    
zBinary.__eq__c             C   s   t j|| _d S )N)base64decodebytesr?   )r   r?   r   r   r   r@     s    zBinary.decodec             C   s4   |j d tj| j}|j |jd |j d d S )Nz<value><base64>
asciiz</base64></value>
)rA   rJ   encodebytesr?   r@   )r   rB   encodedr   r   r   rC     s    
zBinary.encode)N)r   r   r   r   r   r;   r@   rC   r   r   r   r   rF   }  s
   
rF   c             C   s   t  }|j|  |S )N)rF   r@   )r?   r%   r   r   r   _binary  s    
rO   c               @   s$   e Zd Zdd Zdd Zdd ZdS )ExpatParserc             C   sD   t jd d  | _}|| _|j|_|j|_|j|_	d }|j
|d  d S )N)r   ZParserCreate_parser_targetstartZStartElementHandlerendZEndElementHandlerr?   ZCharacterDataHandlerxml)r   targetparserencodingr   r   r   r     s    zExpatParser.__init__c             C   s   | j j|d d S )Nr   )rQ   Parse)r   r?   r   r   r   feed  s    zExpatParser.feedc             C   s8   y
| j }W n tk
r   Y nX | `| ` |jdd d S )NrG   T)rQ   AttributeErrorrR   rY   )r   rW   r   r   r   close  s    
zExpatParser.closeN)r   r   r   r   rZ   r\   r   r   r   r   rP     s   	rP   c               @   s   e Zd ZdddZi Zdd Zdd Zd	d
 Zeeed< dd Z	e	ee
< dd Zeee< eZdd Zeee< efddZeee< dd Zeee< eee< dd Zeee< eee< efddZeee< dd Zeee< dd Zeee< eee< eed< dS )
MarshallerNFc             C   s   i | _ d | _|| _|| _d S )N)memor?   rX   
allow_none)r   rX   r_   r   r   r   r     s    zMarshaller.__init__c             C   s   g }|j }| j}t|tr@|d ||j|jd| |d n8|d x&|D ]}|d ||| |d qNW |d dj|}|S )	Nz<fault>
)r"   r#   z	</fault>
z	<params>
z<param>
z	</param>
z
</params>
 )append_Marshaller__dumpr*   r!   r"   r#   join)r   valuesrB   rA   dumpvresultr   r   r   dumps  s"    




zMarshaller.dumpsc             C   s   y| j t| }W nj tk
r|   t|ds<tdt| x0t|jD ]"}|| j j krHtdt| qHW | j d }Y nX || || d S )N__dict__zcannot marshal %s objects_arbitrary_instance)dispatchr2   KeyErrorr1   r3   __mro__keys)r   r%   rA   fZtype_r   r   r   Z__dump  s    
zMarshaller.__dumpc             C   s   | j std|d d S )Nz0cannot marshal None unless allow_none is enabledz<value><nil/></value>)r_   r3   )r   r%   rA   r   r   r   dump_nil  s    zMarshaller.dump_nilc             C   s$   |d ||rdpd |d d S )Nz<value><boolean>10z</boolean></value>
r   )r   r%   rA   r   r   r   	dump_bool  s    zMarshaller.dump_boolc             C   s<   |t ks|tk rtd|d |tt| |d d S )Nzint exceeds XML-RPC limitsz<value><int>z</int></value>
)MAXINTMININTOverflowErrorr/   int)r   r%   rA   r   r   r   	dump_long  s
    zMarshaller.dump_longc             C   s    |d |t | |d d S )Nz<value><double>z</double></value>
)r   )r   r%   rA   r   r   r   dump_double%  s    zMarshaller.dump_doublec             C   s    |d ||| |d d S )Nz<value><string>z</string></value>
r   )r   r%   rA   r   r   r   r   dump_unicode+  s    zMarshaller.dump_unicodec             C   s,   |d t j|}||jd |d d S )Nz<value><base64>
rL   z</base64></value>
)rJ   rM   r@   )r   r%   rA   rN   r   r   r   
dump_bytes1  s    
zMarshaller.dump_bytesc             C   s^   t |}|| jkrtdd | j|< | j}|d x|D ]}||| q8W |d | j|= d S )Nz"cannot marshal recursive sequencesz<value><array><data>
z</data></array></value>
)r=   r^   r3   rb   )r   r%   rA   ire   rf   r   r   r   
dump_array9  s    


zMarshaller.dump_arrayc             C   s   t |}|| jkrtdd | j|< | j}|d xP|j D ]D\}}|d t|ts^td|d||  ||| |d q<W |d | j|= d S )Nz%cannot marshal recursive dictionariesz<value><struct>
z	<member>
zdictionary key must be stringz<name>%s</name>
z
</member>
z</struct></value>
)r=   r^   r3   rb   itemsr*   r/   )r   r%   rA   r   r|   re   krf   r   r   r   dump_structG  s    



zMarshaller.dump_structc             C   s    |d |t | |d d S )Nz<value><dateTime.iso8601>z</dateTime.iso8601></value>
)r-   )r   r%   rA   r   r   r   dump_datetimeY  s    zMarshaller.dump_datetimec             C   s2   |j tkr || _|j|  | `n| j|j| d S )N)r   WRAPPERSrA   rC   r   ri   )r   r%   rA   r   r   r   dump_instance_  s
    

zMarshaller.dump_instancerj   )NF) r   r   r   r   rk   rh   rb   rp   r2   rs   boolrx   rw   Zdump_intry   floatr   rz   r/   r{   rH   rI   r}   r+   listr   dictr   r   r   r.   rF   r   r   r   r   r]     s:   
	r]   c               @   sj  e Zd ZdDddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
i Zdd Zeed< dd Zeed< dd Zeed< eed< eed< eed< eed< eed< d d! Zeed"< eed#< d$d% Zeed&< d'd( Zeed)< eed*< d+d, Zeed-< d.d/ Zeed0< d1d2 Zeed3< d4d5 Zeed6< d7d8 Zeed9< d:d; Zeed<< d=d> Zeed?< d@dA ZeedB< dCS )EUnmarshallerFc             C   sH   d | _ g | _g | _g | _d| _d | _d| _| jj| _|p:|| _|| _	d S )NFzutf-8)
_type_stack_marks_data_value_methodname	_encodingra   _use_datetime
_use_bytes)r   use_datetimeuse_builtin_typesr   r   r   r     s    

zUnmarshaller.__init__c             C   s:   | j d ks| jrt | j dkr0tf | jd t| jS )Nfaultr   )r   r   r    r!   r   r+   )r   r   r   r   r\     s
    
zUnmarshaller.closec             C   s   | j S )N)r   )r   r   r   r   getmethodname  s    zUnmarshaller.getmethodnamec             C   s
   || _ d S )N)r   )r   rX   Z
standaloner   r   r   rU     s    zUnmarshaller.xmlc             C   sh   d|kr|j dd }|dks&|dkr8| jjt| j g | _| jrZ|| jkrZtd| |dk| _d S )N:r   arraystructzunknown tag %rr%   )	splitr   ra   lenr   r   r   rk   r    )r   tagZattrsr   r   r   rS     s    zUnmarshaller.startc             C   s   | j j| d S )N)r   ra   )r   textr   r   r   r?     s    zUnmarshaller.datac             C   sp   y| j | }W nN tk
r\   d|kr*d S y| j |jdd  }W n tk
rV   d S X Y nX || dj| jS )Nr   r   r`   r   )rk   rl   r   rc   r   )r   r   ro   r   r   r   rT     s    zUnmarshaller.endc             C   sh   y| j | }W nN tk
r\   d|kr*d S y| j |jdd  }W n tk
rV   d S X Y nX || |S )Nr   r   r   )rk   rl   r   )r   r   r?   ro   r   r   r   end_dispatch  s    zUnmarshaller.end_dispatchc             C   s   | j d  d| _d S )Nr   )ra   r   )r   r?   r   r   r   end_nil  s    
zUnmarshaller.end_nilZnilc             C   s:   |dkr| j d n|dkr(| j d ntdd| _d S )Nrr   Frq   Tzbad boolean valuer   )ra   r3   r   )r   r?   r   r   r   end_boolean  s    zUnmarshaller.end_booleanbooleanc             C   s   | j t| d| _d S )Nr   )ra   rw   r   )r   r?   r   r   r   end_int  s    zUnmarshaller.end_intZi1Zi2Zi4Zi8rw   Z
bigintegerc             C   s   | j t| d| _d S )Nr   )ra   r   r   )r   r?   r   r   r   
end_double  s    zUnmarshaller.end_doubleZdoubler   c             C   s   | j t| d| _d S )Nr   )ra   r   r   )r   r?   r   r   r   end_bigdecimal  s    zUnmarshaller.end_bigdecimalZ
bigdecimalc             C   s&   | j r|j| j }| j| d| _d S )Nr   )r   r@   ra   r   )r   r?   r   r   r   
end_string  s    
zUnmarshaller.end_stringstringnamec             C   s.   | j j }| j|d  g| j|d < d| _d S )Nr   )r   popr   r   )r   r?   markr   r   r   	end_array  s    
zUnmarshaller.end_arrayr   c             C   sd   | j j }i }| j|d  }x,tdt|dD ]}||d  ||| < q.W |g| j|d < d| _d S )Nr   r   r   )r   r   r   ranger   r   )r   r?   r   r   r~   r|   r   r   r   
end_struct   s    
zUnmarshaller.end_structr   c             C   s6   t  }|j|jd | jr"|j}| j| d| _d S )NrL   r   )rF   r@   rC   r   r?   ra   r   )r   r?   r%   r   r   r   
end_base64  s    
zUnmarshaller.end_base64rJ   c             C   s,   t  }|j| | jrt|}| j| d S )N)r.   r@   r   rE   ra   )r   r?   r%   r   r   r   end_dateTime  s
    
zUnmarshaller.end_dateTimezdateTime.iso8601c             C   s   | j r| j| d S )N)r   r   )r   r?   r   r   r   	end_value  s    zUnmarshaller.end_valuer%   c             C   s
   d| _ d S )Nparams)r   )r   r?   r   r   r   
end_params#  s    zUnmarshaller.end_paramsr   c             C   s
   d| _ d S )Nr   )r   )r   r?   r   r   r   	end_fault'  s    zUnmarshaller.end_faultr   c             C   s"   | j r|j| j }|| _d| _d S )N
methodName)r   r@   r   r   )r   r?   r   r   r   end_methodName+  s    zUnmarshaller.end_methodNamer   N)FF)r   r   r   r   r\   r   rU   rS   r?   rT   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s  sX   
	r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )_MultiCallMethodc             C   s   || _ || _d S )N)_MultiCallMethod__call_list_MultiCallMethod__name)r   Z	call_listr   r   r   r   r   8  s    z_MultiCallMethod.__init__c             C   s   t | jd| j|f S )Nz%s.%s)r   r   r   )r   r   r   r   r   __getattr__;  s    z_MultiCallMethod.__getattr__c             G   s   | j j| j|f d S )N)r   ra   r   )r   argsr   r   r   __call__=  s    z_MultiCallMethod.__call__N)r   r   r   r   r   r   r   r   r   r   r   5  s   r   c               @   s   e Zd Zdd Zdd ZdS )MultiCallIteratorc             C   s
   || _ d S )N)results)r   r   r   r   r   r   D  s    zMultiCallIterator.__init__c             C   sR   | j | }t|ti kr.t|d |d n t|tg krF|d S tdd S )Nr"   r#   r   z#unexpected type in multicall result)r   r2   r!   
ValueError)r   r|   itemr   r   r   __getitem__G  s    
zMultiCallIterator.__getitem__N)r   r   r   r   r   r   r   r   r   r   @  s   r   c               @   s0   e Zd Zdd Zdd ZeZdd Zdd Zd	S )
	MultiCallc             C   s   || _ g | _d S )N)_MultiCall__server_MultiCall__call_list)r   serverr   r   r   r   a  s    zMultiCall.__init__c             C   s   d| j jt| f S )Nz<%s at %#x>)r   r   r=   )r   r   r   r   r   e  s    zMultiCall.__repr__c             C   s   t | j|S )N)r   r   )r   r   r   r   r   r   j  s    zMultiCall.__getattr__c             C   s:   g }x"| j D ]\}}|j||d qW t| jjj|S )N)r   r   )r   ra   r   r   systemZ	multicall)r   Zmarshalled_listr   r   r   r   r   r   m  s    zMultiCall.__call__N)r   r   r   r   r   r   r   r   r   r   r   r   r   P  s
   r   Fc             C   sr   t rHtrH|rt}tj}n| r&t}t}nt}t}tdd||t}t |}n"t| |d}t rbt |}nt	|}||fS )NTF)r   r   )

FastParserFastUnmarshallerrE   rJ   rK   rO   rD   r!   r   rP   )r   r   Z
mkdatetimeZmkbytesrV   rW   r   r   r   	getparser  s     

r   c             C   s   t | trd}n|rt | tr|s&d}tr4t|}n
t||}|j| }|dkr^dt| }nd}|rx|d|d|df}n|r|d|d	f}n|S d
j|S )Nr   zutf-8z$<?xml version='1.0' encoding='%s'?>
z<?xml version='1.0'?>
z<methodCall>
<methodName>z</methodName>
z</methodCall>
z<methodResponse>
z</methodResponse>
r`   )r*   r!   r+   FastMarshallerr]   rh   r/   rc   )r   
methodnameZmethodresponserX   r_   mr?   Z	xmlheaderr   r   r   rh     s2    



rh   c             C   s2   t ||d\}}|j|  |j  |j |j fS )N)r   r   )r   rZ   r\   r   )r?   r   r   pur   r   r   loads  s    	
r   c          	   C   s<   t stt }t jd|dd}|j|  W d Q R X |j S )Nwbr   )modefileobjZcompresslevel)gzipNotImplementedErrorr   GzipFilerA   getvalue)r?   ro   gzfr   r   r   gzip_encode  s    r     @c             C   s   t stt jdt| dH}y$|dk r0|j }n|j|d }W n tk
r\   tdY nX W d Q R X |dkrt||krtd|S )Nrb)r   r   r   r   zinvalid dataz#max gzipped payload length exceeded)r   r   r   r   readOSErrorr   r   )r?   Z
max_decoder   Zdecodedr   r   r   gzip_decode  s    
r   c               @   s   e Zd Zdd Zdd ZdS )GzipDecodedResponsec             C   s.   t stt|j | _t jj| d| jd d S )Nr   )r   r   )r   r   r   r   ior   r   )r   responser   r   r   r   =  s    zGzipDecodedResponse.__init__c          
   C   s"   zt jj|  W d | jj  X d S )N)r   r   r\   r   )r   r   r   r   r\   E  s    zGzipDecodedResponse.closeN)r   r   r   r   r\   r   r   r   r   r   9  s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )_Methodc             C   s   || _ || _d S )N)_Method__send_Method__name)r   sendr   r   r   r   r   R  s    z_Method.__init__c             C   s   t | jd| j|f S )Nz%s.%s)r   r   r   )r   r   r   r   r   r   U  s    z_Method.__getattr__c             G   s   | j | j|S )N)r   r   )r   r   r   r   r   r   W  s    z_Method.__call__N)r   r   r   r   r   r   r   r   r   r   r   O  s   r   c               @   sz   e Zd Zde ZdZdZdddZdd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d ZdS )	TransportzPython-xmlrpc/%sTNFc             C   s   || _ || _d| _g | _d S )N)NN)r   _use_builtin_types_connection_extra_headers)r   r   r   r   r   r   r   n  s    zTransport.__init__c             C   s~   xxdD ]p}y| j ||||S  tjjk
r8   |r4 Y q tk
rt } z"|sb|jtjtjtjfkrd W Y d d }~X qX qW d S )Nr   r   )r   r   )	single_requesthttpclientZRemoteDisconnectedr   errnoZ
ECONNRESETZECONNABORTEDZEPIPE)r   hosthandlerrequest_bodyverboser|   er   r   r   request~  s    

zTransport.requestc             C   s   y6| j ||||}|j }|jdkr4|| _| j|S W n2 tk
rL    Y n tk
rh   | j   Y nX |jddr~|j	  t
|| |j|jt|j d S )N   zcontent-lengthr`   )send_requestZgetresponseZstatusr   parse_responser!   	Exceptionr\   	getheaderr   r   reasonr   Z
getheaders)r   r   r   r   r   Z	http_connZrespr   r   r   r     s"    
zTransport.single_requestc             C   s   t | j| jdS )N)r   r   )r   r   r   )r   r   r   r   r     s    zTransport.getparserc             C   sr   i }t |tr|\}}tjj|\}}|rdtjj|}tj|jd}dj	|j
 }dd| fg}ng }|||fS )Nzutf-8r`   ZAuthorizationzBasic )r*   r+   urllibparseZ	splituserZunquote_to_bytesrJ   rM   r@   rc   r   )r   r   x509ZauthZextra_headersr   r   r   get_host_info  s    
zTransport.get_host_infoc             C   sL   | j r|| j d kr| j d S | j|\}| _}|tjj|f| _ | j d S )Nr   r   )r   r   r   r   r   ZHTTPConnection)r   r   chostr   r   r   r   make_connection  s
    
zTransport.make_connectionc             C   s    | j \}}|rd| _ |j  d S )N)NN)r   r\   )r   r   
connectionr   r   r   r\     s    
zTransport.closec             C   s   | j |}| jd d  }|r&|jd | jrLtrL|jd|dd |jd
 n|jd| |jd |jd	| jf | j|| | j	|| |S )Nr   ZPOSTT)Zskip_accept_encodingAccept-Encodingr   Content-Typetext/xmlz
User-Agent)r   r   )r   r   )
r   r   Zset_debuglevelaccept_gzip_encodingr   Z
putrequestra   
user_agentsend_headerssend_content)r   r   r   r   debugr   r   r   r   r   r     s    



zTransport.send_requestc             C   s"   x|D ]\}}|j || qW d S )N)	putheader)r   r   r   keyvalr   r   r   r  	  s    zTransport.send_headersc             C   sR   | j d k	r0| j t|k r0tr0|jdd t|}|jdtt| |j| d S )NzContent-Encodingr   zContent-Length)encode_thresholdr   r   r  r   r/   Z
endheaders)r   r   r   r   r   r   r    s    
zTransport.send_contentc             C   s   t |dr*|jdddkr$t|}q.|}n|}| j \}}x2|jd}|sLP | jr`tdt| |j| q<W ||k	r~|j	  |j	  |j	 S )Nr   zContent-Encodingr`   r   i   zbody:)
r1   r   r   r   r   r   printr   rZ   r\   )r   r   streamr   r   r?   r   r   r   r   %  s"    


zTransport.parse_response)FF)F)F)r   r   r   __version__r  r  r	  r   r   r   r   r   r   r\   r   r  r  r   r   r   r   r   r   `  s   


!r   c                   s,   e Zd Zddd fddZdd Z  ZS )	SafeTransportFN)contextc               s   t  j||d || _d S )N)r   r   )superr   r  )r   r   r   r  )r   r   r   r   F  s    zSafeTransport.__init__c             C   st   | j r|| j d kr| j d S ttjds2td| j|\}| _}|tjj|d fd| ji|p`i f| _ | j d S )Nr   r   HTTPSConnectionz1your version of http.client doesn't support HTTPSr  )	r   r1   r   r   r   r   r   r  r  )r   r   r   r   r   r   r   r   M  s    

zSafeTransport.make_connection)FF)r   r   r   r   r   __classcell__r   r   )r   r   r  C  s   r  c               @   sX   e Zd ZdddddZdd Zdd	 Zd
d ZeZdd Zdd Z	dd Z
dd ZdS )ServerProxyNF)r  c            C   s   t jj|\}	}|	dkr tdt jj|\| _| _| js@d| _|d krz|	dkr^t}
d|i}nt}
i }|
f ||d|}|| _	|pd| _
|| _|| _d S )	Nr   httpszunsupported XML-RPC protocolz/RPC2r  )r   r   zutf-8)r   r  )r   r   Z	splittyper   Z	splithost_ServerProxy__host_ServerProxy__handlerr  r   _ServerProxy__transport_ServerProxy__encoding_ServerProxy__verbose_ServerProxy__allow_none)r   Zuri	transportrX   r   r_   r   r   r  r2   r   Zextra_kwargsr   r   r   r     s&    

zServerProxy.__init__c             C   s   | j j  d S )N)r  r\   )r   r   r   r   Z__close  s    zServerProxy.__closec             C   sP   t ||| j| jdj| jd}| jj| j| j|| jd}t	|dkrL|d }|S )N)rX   r_   xmlcharrefreplace)r   r   r   )
rh   r  r  rC   r  r   r  r  r  r   )r   r   r   r   r   r   r   r   Z	__request  s    

zServerProxy.__requestc             C   s   d| j j| j| jf S )Nz<%s for %s%s>)r   r   r  r  )r   r   r   r   r     s    zServerProxy.__repr__c             C   s   t | j|S )N)r   _ServerProxy__request)r   r   r   r   r   r     s    zServerProxy.__getattr__c             C   s.   |dkr| j S |dkr| jS td|f d S )Nr\   r  zAttribute %r not found)_ServerProxy__closer  r[   )r   attrr   r   r   r     s
    zServerProxy.__call__c             C   s   | S )Nr   )r   r   r   r   	__enter__  s    zServerProxy.__enter__c             G   s   | j   d S )N)r  )r   r   r   r   r   __exit__  s    zServerProxy.__exit__)NNFFFF)r   r   r   r   r  r  r   r   r   r   r  r   r   r   r   r   r  l  s    
r  __main__zhttp://localhost:8000ZERROR	   l        il        i   iDiiipiԁiDiCiBiiii)FF)NNNF)FF)r   )UrJ   sysr,   r   decimalr   Zhttp.clientr   Zurllib.parser   Zxml.parsersr   r   r   r   r   ImportErrorr   version_infor  rt   ru   ZPARSE_ERRORZSERVER_ERRORZAPPLICATION_ERRORZSYSTEM_ERRORZTRANSPORT_ERRORZNOT_WELLFORMED_ERRORZUNSUPPORTED_ENCODINGZINVALID_ENCODING_CHARZINVALID_XMLRPCZMETHOD_NOT_FOUNDZINVALID_METHOD_PARAMSZINTERNAL_ERRORr   r   r   r    r!   r   r   ZBooleanZ_day0r$   r&   r-   r.   rD   rE   rF   rO   r   rP   r]   r   r   r   r   r   r   r   r   rh   r   r   r   r   objectr   r   r   r  r  ZServerr   r   r
  ZcurrentTimeZgetCurrentTimerf   ZmultiZgetDatapowaddr   r   r   r   r   <module>   s   


K	#! ( C'
' 
J

 d)i
