a
    ze                  
   @   sb  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 zd dlZW n ey   dZY n0 dd Zdejdd	  Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!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*dd  Z+e+d!rFd"d# Z,ne+d$rZd%d# Z,nd&d# Z,[*[+d'd( Z-G d)d* d*Z.d+d, Z/d-d. Z0G d/d0 d0Z1d1d2 Z2e.e1fZ3G d3d4 d4Z4G d5d6 d6Z5G d7d8 d8Z6G d9d: d:Z7G d;d< d<Z8G d=d> d>Z9d Z: Z;Z<dYd@dAZ=dZdBdCZ>d[dDdEZ?dFdG Z@d\dIdJZAG dKdL dLerPejBneCZDG dMdN dNZEG dOdP dPZFG dQdR dReFZGG dSdT dTZHeHZIeJdUkr^eHdVZKzeLeKjMN  W n0 e#y ZO zeLdWeO W Y dZO[On
dZO[O0 0 e9eKZPePQ  ePRd	dX ePSdd	 zeP D ]ZTeLeT qW n0 e#y\ ZO zeLdWeO W Y dZO[On
dZO[O0 0 dS )]    N)datetime)Decimal)expat)BytesIOc                 C   s$   |  dd} |  dd} |  ddS )N&z&amp;<z&lt;>z&gt;)replace)s r   #/usr/lib/python3.9/xmlrpc/client.pyescape   s    r   z%d.%d   ii   iDiiipiԁiCiBiiic                   @   s   e Zd ZejZdS )ErrorN)__name__
__module____qualname__object__str__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 |  || _|| _|| _|| _d S N)r   __init__urlerrcodeerrmsgheaders)selfr   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 |  || _|| _d S r   )r   r   	faultCodefaultString)r   r#   r$   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__Nr    r   r   r   r   r"      s   r"      c                 C   s*   zt | dkW S  ty$   Y dS 0 d S )NZ0001F)_day0strftime
ValueError)fmtr   r   r   _try  s    r+   z%Yc                 C   s
   |  dS N%Y%m%dT%H:%M:%Sr(   valuer   r   r   _iso8601_format  s    r1   z%4Yc                 C   s
   |  dS )Nz%4Y%m%dT%H:%M:%Sr.   r/   r   r   r   r1     s    c                 C   s   |  ddS )Nr-      )r(   zfillr/   r   r   r   r1     s    c                 C   sL   t | trt| S t | ttjfs<| dkr2t } t| } d| d d  S )Nr   z%04d%02d%02dT%02d:%02d:%02d   )
isinstancer   r1   tupletimestruct_time	localtimer/   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 r   )r5   strr0   r:   )r   r0   r   r   r   r   .  s    
zDateTime.__init__c                 C   st   t |tr| j}|j}nTt |tr2| j}t|}n:t |trH| j}|}n$t|drd|  }| }n| }t}||fS )N	timetuple)	r5   r;   r0   r   r1   r<   hasattrr=   NotImplementedr   otherr
   or   r   r   make_comparable4  s    





zDateTime.make_comparablec                 C   s"   |  |\}}|tu rtS ||k S r   rC   r?   r@   r   r   r   __lt__F  s    zDateTime.__lt__c                 C   s"   |  |\}}|tu rtS ||kS r   rD   r@   r   r   r   __le__L  s    zDateTime.__le__c                 C   s"   |  |\}}|tu rtS ||kS r   rD   r@   r   r   r   __gt__R  s    zDateTime.__gt__c                 C   s"   |  |\}}|tu rtS ||kS r   rD   r@   r   r   r   __ge__X  s    zDateTime.__ge__c                 C   s"   |  |\}}|tu rtS ||kS r   rD   r@   r   r   r   __eq__^  s    zDateTime.__eq__c                 C   s   t | jdS r,   )r7   strptimer0   r   r   r   r   r=   d  s    zDateTime.timetuplec                 C   s   | j S r   r/   r   r   r   r   r   l  s    zDateTime.__str__c                 C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   r   r0   idr   r   r   r   r   o  s    zDateTime.__repr__c                 C   s   t | | _d S r   )r<   stripr0   r   datar   r   r   decoder  s    zDateTime.decodec                 C   s$   | d | | j | d d S Nz<value><dateTime.iso8601>z</dateTime.iso8601></value>
)writer0   )r   outr   r   r   encodeu  s    
zDateTime.encodeN)r   )r   r   r   r   rC   rE   rF   rG   rH   rI   r=   r   r   rO   rS   r   r   r   r   r;   (  s   
r;   c                 C   s   t  }||  |S r   )r;   rO   rN   r0   r   r   r   	_datetimez  s    
rU   c                 C   s   t | dS r,   )r   rJ   )rN   r   r   r   _datetime_type  s    rV   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 u rd}n&t |ttfs,td|jj t|}|| _d S )N    z#expected bytes or bytearray, not %s)r5   bytes	bytearray	TypeErrorr   r   rN   rM   r   r   r   r     s    zBinary.__init__c                 C   s   t | jdS )Nzlatin-1)r<   rN   r   r   r   r   r     s    zBinary.__str__c                 C   s   t |tr|j}| j|kS r   )r5   rW   rN   )r   rA   r   r   r   rI     s    
zBinary.__eq__c                 C   s   t || _d S r   )base64decodebytesrN   rM   r   r   r   rO     s    zBinary.decodec                 C   s4   | d t| j}| |d | d d S Nz<value><base64>
asciiz</base64></value>
)rQ   r\   encodebytesrN   rO   )r   rR   encodedr   r   r   rS     s    
zBinary.encode)N)r   r   r   r   r   rI   rO   rS   r   r   r   r   rW     s
   
rW   c                 C   s   t  }||  |S r   )rW   rO   rT   r   r   r   _binary  s    
rb   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ExpatParserc                 C   sD   t d d  | _}|| _|j|_|j|_|j|_	d }|
|d  d S r   )r   ZParserCreate_parser_targetstartZStartElementHandlerendZEndElementHandlerrN   ZCharacterDataHandlerxml)r   targetparserencodingr   r   r   r     s    zExpatParser.__init__c                 C   s   | j |d d S )NF)rd   ParserM   r   r   r   feed  s    zExpatParser.feedc                 C   s6   z
| j }W n ty   Y n0 | `| ` |dd d S )NrX   T)rd   AttributeErrorre   rl   )r   rj   r   r   r   close  s    
zExpatParser.closeN)r   r   r   r   rm   ro   r   r   r   r   rc     s   	rc   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 r   )memorN   rk   
allow_none)r   rk   rr   r   r   r   r     s    zMarshaller.__init__c                 C   s   g }|j }| j}t|tr@|d ||j|jd| |d n4|d |D ]}|d ||| |d qL|d d|}|S )	Nz<fault>
)r#   r$   z	</fault>
z	<params>
z<param>
z	</param>
z
</params>
 )append_Marshaller__dumpr5   r"   r#   r$   join)r   valuesrR   rQ   dumpvresultr   r   r   dumps  s&    




zMarshaller.dumpsc                 C   s   z| j t| }W nd tyv   t|ds:tdt| t|jD ]"}|| j  v rDtdt| qD| j d }Y n0 || || d S )N__dict__zcannot marshal %s objects_arbitrary_instance)dispatchtypeKeyErrorr>   r[   __mro__keys)r   r0   rQ   f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>)rr   r[   r   r0   rQ   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   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<   intr   r   r   r   	dump_long&  s
    zMarshaller.dump_longc                 C   s    |d |t | |d d S )Nz<value><double>z</double></value>
)reprr   r   r   r   dump_double1  s    zMarshaller.dump_doublec                 C   s    |d ||| |d d S )Nz<value><string>z</string></value>
r   )r   r0   rQ   r   r   r   r   dump_unicode7  s    zMarshaller.dump_unicodec                 C   s,   |d t |}||d |d d S r^   )r\   r`   rO   )r   r0   rQ   ra   r   r   r   
dump_bytes=  s    
zMarshaller.dump_bytesc                 C   sZ   t |}|| jv rtdd | j|< | j}|d |D ]}||| q6|d | j|= d S )Nz"cannot marshal recursive sequencesz<value><array><data>
z</data></array></value>
)rK   rq   r[   ru   )r   r0   rQ   irx   ry   r   r   r   
dump_arrayE  s    

zMarshaller.dump_arrayc                 C   s   t |}|| jv rtdd | j|< | j}|d | D ]D\}}|d t|ts\td|d||  ||| |d q:|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>
)rK   rq   r[   ru   itemsr5   r<   )r   r0   rQ   r   r   rx   kry   r   r   r   dump_structS  s    




zMarshaller.dump_structc                 C   s    |d |t | |d d S rP   )r:   r   r   r   r   dump_datetimee  s    zMarshaller.dump_datetimec                 C   s2   |j tv r || _||  | `n| |j| d S r   )r   WRAPPERSrQ   rS   r   r|   r   r   r   r   dump_instancek  s
    

zMarshaller.dump_instancer}   )NF) r   r   r   r   r~   r{   ru   r   r   r   boolr   r   Zdump_intr   floatr   r   r<   r   rY   rZ   r   r6   listr   dictr   r   r   r;   rW   r   r   r   r   rp     s:   
	rp   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 )NFutf-8)
_type_stack_marks_data_value_methodname	_encodingrt   _use_datetime
_use_bytes)r   use_datetimeuse_builtin_typesr   r   r   r     s    

zUnmarshaller.__init__c                 C   s>   | j d u s| jrt | j dkr4tf i | jd t| jS )Nfaultr   )r   r   r!   r"   r   r6   r   r   r   r   ro     s
    
zUnmarshaller.closec                 C   s   | j S r   )r   r   r   r   r   getmethodname  s    zUnmarshaller.getmethodnamec                 C   s
   || _ d S r   )r   )r   rk   Z
standaloner   r   r   rh     s    zUnmarshaller.xmlc                 C   sh   d|v r| dd }|dks&|dkr8| jt| j g | _| jrZ|| jvrZtd| |dk| _d S )N:arraystructzunknown tag %rr0   )	splitr   rt   lenr   r   r   r~   r!   )r   tagattrsr   r   r   rf     s    zUnmarshaller.startc                 C   s   | j | d S r   )r   rt   )r   textr   r   r   rN     s    zUnmarshaller.datac                 C   sr   z| j | }W nP ty^   d|vr*Y d S z| j |dd  }W n tyX   Y Y d S 0 Y n0 || d| jS )Nr   r   rs   )r~   r   r   rv   r   )r   r   r   r   r   r   rg     s    zUnmarshaller.endc                 C   sj   z| j | }W nP ty^   d|vr*Y d S z| j |dd  }W n tyX   Y Y d S 0 Y n0 || |S )Nr   r   )r~   r   r   )r   r   rN   r   r   r   r   end_dispatch  s    zUnmarshaller.end_dispatchc                 C   s   |  d  d| _d S Nr   )rt   r   rM   r   r   r   end_nil  s    
zUnmarshaller.end_nilnilc                 C   s:   |dkr|  d n|dkr(|  d ntdd| _d S )Nr   Fr   Tzbad boolean valuer   )rt   r[   r   rM   r   r   r   end_boolean  s    zUnmarshaller.end_booleanbooleanc                 C   s   |  t| d| _d S r   )rt   r   r   rM   r   r   r   end_int  s    zUnmarshaller.end_intZi1Zi2Zi4Zi8r   Z
bigintegerc                 C   s   |  t| d| _d S r   )rt   r   r   rM   r   r   r   
end_double  s    zUnmarshaller.end_doubleZdoubler   c                 C   s   |  t| d| _d S r   )rt   r   r   rM   r   r   r   end_bigdecimal  s    zUnmarshaller.end_bigdecimalZ
bigdecimalc                 C   s&   | j r|| j }| | d| _d S r   )r   rO   rt   r   rM   r   r   r   
end_string  s    
zUnmarshaller.end_stringstringnamec                 C   s.   | j  }| j|d  g| j|d < d| _d S r   )r   popr   r   )r   rN   markr   r   r   	end_array  s    
zUnmarshaller.end_arrayr   c                 C   s`   | j  }i }| j|d  }tdt|dD ]}||d  ||| < q,|g| j|d < d| _d S )Nr   r   r&   )r   r   r   ranger   r   )r   rN   r   r   r   r   r   r   r   
end_struct  s    
zUnmarshaller.end_structr   c                 C   s6   t  }||d | jr"|j}| | d| _d S )Nr_   r   )rW   rO   rS   r   rN   rt   r   r   rN   r0   r   r   r   
end_base64  s    
zUnmarshaller.end_base64r\   c                 C   s,   t  }|| | jrt|}| | d S r   )r;   rO   r   rV   rt   r   r   r   r   end_dateTime   s
    
zUnmarshaller.end_dateTimezdateTime.iso8601c                 C   s   | j r| | d S r   )r   r   rM   r   r   r   	end_value(  s    zUnmarshaller.end_valuer0   c                 C   s
   d| _ d S )Nparamsr   rM   r   r   r   
end_params/  s    zUnmarshaller.end_paramsr   c                 C   s
   d| _ d S )Nr   r   rM   r   r   r   	end_fault3  s    zUnmarshaller.end_faultr   c                 C   s"   | j r|| j }|| _d| _d S )N
methodName)r   rO   r   r   rM   r   r   r   end_methodName7  s    zUnmarshaller.end_methodNamer   N)FF)r   r   r   r   ro   r   rh   rf   rN   rg   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     sX   
	r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_MultiCallMethodc                 C   s   || _ || _d S r   )_MultiCallMethod__call_list_MultiCallMethod__name)r   Z	call_listr   r   r   r   r   D  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__G  s    z_MultiCallMethod.__getattr__c                 G   s   | j | j|f d S r   )r   rt   r   r   argsr   r   r   __call__I  s    z_MultiCallMethod.__call__Nr   r   r   r   r   r   r   r   r   r   r   A  s   r   c                   @   s   e Zd Zdd Zdd ZdS )MultiCallIteratorc                 C   s
   || _ d S r   )results)r   r   r   r   r   r   P  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   r   r"   r)   )r   r   itemr   r   r   __getitem__S  s    
zMultiCallIterator.__getitem__N)r   r   r   r   r   r   r   r   r   r   L  s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	MultiCallc                 C   s   || _ g | _d S r   )_MultiCall__server_MultiCall__call_list)r   serverr   r   r   r   m  s    zMultiCall.__init__c                 C   s   d| j jt| f S )Nz<%s at %#x>)r   r   rK   r   r   r   r   r   q  s    zMultiCall.__repr__c                 C   s   t | j|S r   )r   r   r   r   r   r   r   t  s    zMultiCall.__getattr__c                 C   s6   g }| j D ]\}}|||d q
t| jj|S )N)r   r   )r   rt   r   r   systemZ	multicall)r   Zmarshalled_listr   r   r   r   r   r   w  s    zMultiCall.__call__N)r   r   r   r   r   r   r   r   r   r   r   r   \  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FastUnmarshallerrV   r\   r]   rb   rU   r"   r   rc   )r   r   Z
mkdatetimeZmkbytesri   rj   r   r   r   	getparser  s     

r   c                 C   s   t | trd}n|rt | tr|s&d}tr4t|}n
t||}|| }|dkr^dt| }nd}|rx|d|d|df}n|r|d|d	f}n|S d
|S )Nr&   r   z$<?xml version='1.0' encoding='%s'?>
z<?xml version='1.0'?>
z<methodCall>
<methodName>z</methodName>
z</methodCall>
z<methodResponse>
z</methodResponse>
rs   )r5   r"   r6   FastMarshallerrp   r{   r<   rv   )r   
methodnameZmethodresponserk   rr   mrN   Z	xmlheaderr   r   r   r{     s6    



r{   c                 C   s2   t ||d\}}||  |  | | fS Nr   )r   rm   ro   r   )rN   r   r   pur   r   r   loads  s    	
r   c                 C   sP   t stt }t jd|dd}||  W d    n1 s>0    Y  | S )Nwbr&   )modefileobjcompresslevel)gzipNotImplementedErrorr   GzipFilerQ   getvalue)rN   r   gzfr   r   r   gzip_encode  s    (r     @c              	   C   s   t stt jdt| dP}z$|dk r0| }n||d }W n tyZ   tdY n0 W d    n1 sp0    Y  |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   )rN   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| | _t jj| d| jd d S )Nr   r   )r   r   r   r   ior   r   )r   responser   r   r   r   G  s    zGzipDecodedResponse.__init__c                 C   s,   zt j|  W | j  n| j  0 d S r   )r   r   ro   r  r   r   r   r   ro   O  s    zGzipDecodedResponse.closeN)r   r   r   r   ro   r   r   r   r   r   C  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_Methodc                 C   s   || _ || _d S r   _Method__send_Method__name)r   sendr   r   r   r   r   \  s    z_Method.__init__c                 C   s   t | jd| j|f S r   )r  r  r  r   r   r   r   r   _  s    z_Method.__getattr__c                 G   s   |  | j|S r   r  r   r   r   r   r   a  s    z_Method.__call__Nr   r   r   r   r   r  Y  s   r  c                   @   s   e Zd Zde ZdZdZdd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/%sTNFr   )r   c                C   s&   || _ || _d| _t|| _g | _d S N)NN)r   _use_builtin_types_connectionr   _headers_extra_headers)r   r   r   r   r   r   r   r   x  s
    
zTransport.__init__c                 C   s   dD ]v}z|  ||||W   S  tjjy:   |r6 Y q tyx } z(|sb|jtjtjtjfvrd W Y d }~qd }~0 0 qd S )N)r   r&   )	single_requesthttpclientZRemoteDisconnectedr   errnoZ
ECONNRESETZECONNABORTEDEPIPE)r   hosthandlerrequest_bodyverboser   er   r   r   request  s    zTransport.requestc                 C   s   z8|  ||||}| }|jdkr6|| _| |W S W n. tyL    Y n tyf   |    Y n0 |ddr||	  t
|| |j|jt| d S )N   zcontent-lengthrs   )send_requestZgetresponsestatusr  parse_responser"   	Exceptionro   	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 r   )r   r   r
  r   r   r   r   r     s    zTransport.getparserc                 C   sr   i }t |tr|\}}tj|\}}|rdtj|}t|d}d	|
 }dd| fg}ng }|||fS )Nr   rs   ZAuthorizationzBasic )r5   r6   urllibparse
_splituserunquote_to_bytesr\   r`   rO   rv   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 | |\}| _}|tj|f| _ | j d S )Nr   r&   )r  r%  r  r  r  ZHTTPConnectionr   r  Zchostr$  r   r   r   make_connection  s
    
zTransport.make_connectionc                 C   s    | j \}}|rd| _ |  d S r	  )r  ro   )r   r  
connectionr   r   r   ro     s    
zTransport.closec                 C   s   |  |}| j| j }|r$|d | jrJtrJ|jd|dd |d n|d| |d |d| jf | 	|| | 
|| |S )Nr&   ZPOSTT)Zskip_accept_encoding)zAccept-Encodingr   )zContent-Typeztext/xmlz
User-Agent)r'  r  r  Zset_debuglevelaccept_gzip_encodingr   Z
putrequestrt   
user_agentsend_headerssend_content)r   r  r  r  debugr(  r   r   r   r   r    s    



zTransport.send_requestc                 C   s   |D ]\}}| || qd S r   )	putheader)r   r(  r   keyvalr   r   r   r+    s    zTransport.send_headersc                 C   sR   | j d ur0| j t|k r0tr0|dd t|}|dtt| || d S )N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*|dddkr$t|}q.|}n|}|  \}}|d}|sJqj| jr^tdt| || q:||urz|	  |	  |	 S )Nr  r1  rs   r   i   zbody:)
r>   r  r   r   r   r  printr   rm   ro   )r   r  streamr   r   rN   r   r   r   r  1  s     


zTransport.parse_response)FF)F)F)r   r   r   __version__r*  r)  r2  r   r  r  r   r%  r'  ro   r  r+  r,  r  r   r   r   r   r  j  s    

!r  c                       s.   e Zd Zd	ddd fddZdd Z  ZS )
SafeTransportFr   Nr   contextc                   s   t  j|||d || _d S )Nr   r   r   )superr   r8  )r   r   r   r   r8  r   r   r   r   R  s
    zSafeTransport.__init__c                 C   st   | j r|| j d kr| j d S ttjds2td| |\}| _}|tjj|d fd| ji|p`i f| _ | j d S )Nr   r&   HTTPSConnectionz1your version of http.client doesn't support HTTPSr8  )	r  r>   r  r  r   r%  r  r<  r8  r&  r   r   r   r'  [  s    


zSafeTransport.make_connection)FF)r   r   r   r   r'  __classcell__r   r   r;  r   r6  O  s   	r6  c                   @   sV   e Zd Zddd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 )ServerProxyNFr   r7  c                C   s   t j|}
|
jdvrtd|
j| _t jddg|
dd  | _| jsPd| _|d u r|
jdkrpt	}d|	i}nt
}i }|f |||d|}|| _|pd	| _|| _|| _d S )
N)r  httpszunsupported XML-RPC protocolrs   r   z/RPC2r?  r8  r9  r   )r   r!  urlsplitschemer   netloc_ServerProxy__host
urlunsplit_ServerProxy__handlerr6  r  _ServerProxy__transport_ServerProxy__encoding_ServerProxy__verbose_ServerProxy__allow_none)r   Zuri	transportrk   r  rr   r   r   r   r8  r   r  Zextra_kwargsr   r   r   r     s.    



zServerProxy.__init__c                 C   s   | j   d S r   )rF  ro   r   r   r   r   Z__close  s    zServerProxy.__closec                 C   sP   t ||| j| jd| jd}| jj| j| j|| jd}t	|dkrL|d }|S )N)rk   rr   xmlcharrefreplace)r  r&   r   )
r{   rG  rI  rS   rF  r  rC  rE  rH  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   rC  rE  r   r   r   r   r     s    zServerProxy.__repr__c                 C   s   t | j|S r   )r  _ServerProxy__requestr   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 )Nro   rJ  zAttribute %r not found)_ServerProxy__closerF  rn   )r   attrr   r   r   r     s
    zServerProxy.__call__c                 C   s   | S r   r   r   r   r   r   	__enter__  s    zServerProxy.__enter__c                 G   s   |    d S r   )rM  r   r   r   r   __exit__  s    zServerProxy.__exit__)NNFFFF)r   r   r   r   rM  rL  r   r   r   rO  rP  r   r   r   r   r>  z  s     
r>  __main__zhttp://localhost:8000ERROR	   )FF)NNNF)FF)r   )Ur\   sysr7   r   decimalr   Zhttp.clientr  urllib.parser   Zxml.parsersr   r  r  r   r   ImportErrorr   version_infor5  r   r   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Booleanr'   r+   r1   r:   r;   rU   rV   rW   rb   r   rc   rp   r   r   r   r   r   r   r   r   r{   r   r   r   r   r   r   r  r  r6  r>  ZServerr   r   r3  ZcurrentTimeZgetCurrentTimery   ZmultiZgetDatapowaddr  r   r   r   r   <module>   s   




R	#! ( C%
'  
K

 f+i
 
