
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
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r„t|ƒ|kr„t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œ|—Ž}|| _	|p†d| _
|| _|| _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   €iD€ÿÿi¨€ÿÿi�ÿÿip�ÿÿiÔ�ÿÿiD€ÿÿiC€ÿÿiB€ÿÿi¨€ÿÿi§€ÿÿi¦€ÿÿi¥€ÿÿ)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
