o
    JAf                  
   @   sh  	 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yB   dZY nw 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!rd"d# Z,ne+d$rd%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>dYdDdEZ?dFdG Z@d[dIdJZAG dKdL dLer)ejBneCZDG dMdN dNZEG dOdP dPZFG dQdR dReFZGG dSdT dTZHeHZIeJdUkreHdVZKz	eLeKjMN  W n e#yu ZO zeLdWeO W Y dZO[OndZO[Oww e9eKZPePQ  ePRd	dX ePSdd	 zeP D ]ZTeLeT qW dS  e#y ZO zeLdWeO W Y dZO[OdS dZO[Oww 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.10/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                   @      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                   @   r   )Faultc                 K   s   t |  || _|| _d S r   )r   r   	faultCodefaultString)r   r$   r%   extrar   r   r   r         

zFault.__init__c                 C      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 w )NZ0001F)_day0strftime
ValueError)fmtr   r   r   _try  s
   r.   z%Yc                 C   
   |  dS N%Y%m%dT%H:%M:%Sr+   valuer   r   r   _iso8601_format     
r5   z%4Yc                 C   r/   )Nz%4Y%m%dT%H:%M:%Sr2   r3   r   r   r   r5     r6   c                 C   s   |  ddS )Nr1      )r+   zfillr3   r   r   r   r5        c                 C   sL   t | tr	t| S t | ttjfs| dkrt } t| } d| d d  S )Nr   z%04d%02d%02dT%02d:%02d:%02d   )
isinstancer   r5   tupletimestruct_time	localtimer3   r   r   r   	_strftime  s   

r@   c                   @   sp   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
|| _d S t|| _d S r   )r;   strr4   r@   )r   r4   r   r   r   r   .  s   

zDateTime.__init__c                 C   s   t |tr| j}|j}||fS t |tr| j}t|}||fS t |tr-| j}|}||fS t|dr>|  }| }||fS | }t}||fS )N	timetuple)	r;   rA   r4   r   r5   rB   hasattrrC   NotImplementedr   otherr
   or   r   r   make_comparable4  s&   




zDateTime.make_comparablec                 C   s"   |  |\}}|tu rtS ||k S r   rI   rE   rF   r   r   r   __lt__F     zDateTime.__lt__c                 C   s"   |  |\}}|tu rtS ||kS r   rJ   rF   r   r   r   __le__L  rL   zDateTime.__le__c                 C   s"   |  |\}}|tu rtS ||kS r   rJ   rF   r   r   r   __gt__R  rL   zDateTime.__gt__c                 C   s"   |  |\}}|tu rtS ||kS r   rJ   rF   r   r   r   __ge__X  rL   zDateTime.__ge__c                 C   s"   |  |\}}|tu rtS ||kS r   rJ   rF   r   r   r   __eq__^  rL   zDateTime.__eq__c                 C   s   t | jdS r0   )r=   strptimer4   r   r   r   r   rC   d     zDateTime.timetuplec                 C      | j S r   r3   r   r   r   r   r   l     zDateTime.__str__c                 C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   r   r4   idr   r   r   r   r    o  s   zDateTime.__repr__c                 C   s   t | | _d S r   )rB   stripr4   r   datar   r   r   decoder     zDateTime.decodec                 C   s$   | d | | j | d d S Nz<value><dateTime.iso8601>z</dateTime.iso8601></value>
)writer4   )r   outr   r   r   encodeu  s   
zDateTime.encodeN)r   )r   r   r   r   rI   rK   rM   rN   rO   rP   rC   r   r    rY   r^   r   r   r   r   rA   (  s    
rA   c                 C      t  }||  |S r   )rA   rY   rX   r4   r   r   r   	_datetimez     
ra   c                 C   s   t | dS r0   )r   rQ   )rX   r   r   r   _datetime_type     rc   c                   @   s8   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)r;   bytes	bytearray	TypeErrorr   r   rX   rW   r   r   r   r     s   
zBinary.__init__c                 C   s   t | jdS )Nzlatin-1)rB   rX   r   r   r   r   r     rd   zBinary.__str__c                 C   s   t |tr|j}| j|kS r   )r;   re   rX   )r   rG   r   r   r   rP     r'   zBinary.__eq__c                 C   s   t || _d S r   )base64decodebytesrX   rW   r   r   r   rY     r9   zBinary.decodec                 C   s4   | d t| j}| |d | d d S Nz<value><base64>
asciiz</base64></value>
)r\   rj   encodebytesrX   rY   )r   r]   encodedr   r   r   r^     s   
zBinary.encoder   )r   r   r   r   r   rP   rY   r^   r   r   r   r   re     s    
re   c                 C   r_   r   )re   rY   r`   r   r   r   _binary  rb   rp   c                   @   $   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EndElementHandlerrX   ZCharacterDataHandlerxml)r   targetparserencodingr   r   r   r     s   zExpatParser.__init__c                 C   s   | j |d d S NF)rs   ParserW   r   r   r   feed  rZ   zExpatParser.feedc                 C   s8   z| j }W n
 ty   Y d S w | `| ` |dd d S )Nrf   T)rs   AttributeErrorrt   r|   )r   ry   r   r   r   close  s   
zExpatParser.closeN)r   r   r   r   r}   r   r   r   r   r   rr     s    	rr   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   )memorX   rz   
allow_none)r   rz   r   r   r   r   r     s   
zMarshaller.__init__c                 C   s   g }|j }| j}t|tr |d ||j|jd| |d n|d |D ]}|d ||| |d q&|d d|}|S )	Nz<fault>
)r$   r%   z	</fault>
z	<params>
z<param>
z	</param>
z
</params>
 )append_Marshaller__dumpr;   r#   r$   r%   join)r   valuesr]   r\   dumpvresultr   r   r   dumps  s&   




zMarshaller.dumpsc                 C   s   z	| j t| }W n2 ty;   t|dstdt| t|jD ]}|| j  v r3tdt| q"| j d }Y nw || || d S )N__dict__zcannot marshal %s objects_arbitrary_instance)dispatchtypeKeyErrorrD   ri   __mro__keys)r   r4   r\   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   ri   r   r4   r\   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OverflowErrorrB   intr   r   r   r   	dump_long&  s
   zMarshaller.dump_longc                 C       |d |t | |d d S )Nz<value><double>z</double></value>
)reprr   r   r   r   dump_double1     zMarshaller.dump_doublec                 C   s    |d ||| |d d S )Nz<value><string>z</string></value>
r   )r   r4   r\   r   r   r   r   dump_unicode7  r   zMarshaller.dump_unicodec                 C   s,   |d t |}||d |d d S rl   )rj   rn   rY   )r   r4   r\   ro   r   r   r   
dump_bytes=  s   
zMarshaller.dump_bytesc                 C   sZ   t |}|| jv rtdd | j|< | j}|d |D ]}||| q|d | j|= d S )Nz"cannot marshal recursive sequencesz<value><array><data>
z</data></array></value>
)rU   r   ri   r   )r   r4   r\   ir   r   r   r   r   
dump_arrayE  s   

zMarshaller.dump_arrayc                 C   s   t |}|| jv rtdd | j|< | j}|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>
)rU   r   ri   r   itemsr;   rB   )r   r4   r\   r   r   r   kr   r   r   r   dump_structS  s   




zMarshaller.dump_structc                 C   r   r[   )r@   r   r   r   r   dump_datetimee  r   zMarshaller.dump_datetimec                 C   s4   |j tv r|| _||  | `d S | |j| d S r   )r   WRAPPERSr\   r^   r   r   r   r   r   r   dump_instancek  s
   

zMarshaller.dump_instancer   r{   ) r   r   r   r   r   r   r   r   r   r   boolr   r   Zdump_intr   floatr   r   rB   r   rg   rh   r   r<   listr   dictr   r   r   rA   re   r   r   r   r   r     s>    
	r   c                   @   sl  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	_encodingr   _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rtdi | jd t| jS )Nfaultr   r   )r   r   r"   r#   r   r<   r   r   r   r   r     s
   

zUnmarshaller.closec                 C   rS   r   )r   r   r   r   r   getmethodname  rT   zUnmarshaller.getmethodnamec                 C   
   || _ d S r   )r   )r   rz   Z
standaloner   r   r   rw     r6   zUnmarshaller.xmlc                 C   sh   d|v r| dd }|dks|dkr| jt| j g | _| jr-|| jvr-td| |dk| _d S )N:arraystructzunknown tag %rr4   )	splitr   r   lenr   r   r   r   r"   )r   tagZattrsr   r   r   ru     s   zUnmarshaller.startc                 C   s   | j | d S r   )r   r   )r   textr   r   r   rX     r9   zUnmarshaller.datac                 C   sr   z| j | }W n( ty/   d|vrY d S z| j |dd  }W n ty,   Y Y d S w Y nw || d| jS )Nr   r   r   )r   r   r   r   r   )r   r   r   r   r   r   rv     s   zUnmarshaller.endc                 C   sj   z| j | }W n( ty/   d|vrY d S z| j |dd  }W n ty,   Y Y d S w Y nw || |S )Nr   r   )r   r   r   )r   r   rX   r   r   r   r   end_dispatch  s   
zUnmarshaller.end_dispatchc                 C   s   |  d  d| _d S Nr   )r   r   rW   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   )r   ri   r   rW   r   r   r   end_boolean  s   
zUnmarshaller.end_booleanbooleanc                 C      |  t| d| _d S r   )r   r   r   rW   r   r   r   end_int     
zUnmarshaller.end_intZi1Zi2Zi4Zi8r   Z
bigintegerc                 C   r   r   )r   r   r   rW   r   r   r   
end_double  r   zUnmarshaller.end_doubleZdoubler   c                 C   r   r   )r   r   r   rW   r   r   r   end_bigdecimal  r   zUnmarshaller.end_bigdecimalZ
bigdecimalc                 C   s&   | j r	|| j }| | d| _d S r   )r   rY   r   r   rW   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   rX   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   rX   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 )Nrm   r   )re   rY   r^   r   rX   r   r   r   rX   r4   r   r   r   
end_base64  s   

zUnmarshaller.end_base64rj   c                 C   s,   t  }|| | jrt|}| | d S r   )rA   rY   r   rc   r   r   r   r   r   end_dateTime   s
   
zUnmarshaller.end_dateTimezdateTime.iso8601c                 C   s   | j r
| | d S d S r   )r   r   rW   r   r   r   	end_value(  s   zUnmarshaller.end_valuer4   c                 C   
   d| _ d S )Nparamsr   rW   r   r   r   
end_params/  r6   zUnmarshaller.end_paramsr   c                 C   r   )Nr   r   rW   r   r   r   	end_fault3  r6   zUnmarshaller.end_faultr   c                 C   s"   | j r	|| j }|| _d| _d S )N
methodName)r   rY   r   r   rW   r   r   r   end_methodName7  s   
zUnmarshaller.end_methodNamer   NFF)r   r   r   r   r   r   rw   ru   rX   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s\    
	r   c                   @   rq   )_MultiCallMethodc                 C      || _ || _d S r   )_MultiCallMethod__call_list_MultiCallMethod__name)r   Z	call_listr   r   r   r   r   D     
z_MultiCallMethod.__init__c                 C      t | jd| j|f S Nz%s.%s)r   r   r   r   r   r   r   r   __getattr__G     z_MultiCallMethod.__getattr__c                 G   s   | j | j|f d S r   )r   r   r   r   argsr   r   r   __call__I  r   z_MultiCallMethod.__call__Nr   r   r   r   r   r   r   r   r   r   r   A      r   c                   @   r   )MultiCallIteratorc                 C   r   r   )results)r   r   r   r   r   r   P  r6   zMultiCallIterator.__init__c                 C   sL   | j | }t|ti krt|d |d t|tg kr"|d S td)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  r   zMultiCall.__init__c                 C   s   d| j jt| f S )Nz<%s at %#x>)r   r   rU   r   r   r   r   r    q  s   zMultiCall.__repr__c                 C      t | j|S r   )r   r   r   r   r   r   r   t  rd   zMultiCall.__getattr__c                 C   s6   g }| j D ]\}}|||d qt| jj|S )N)r   r   )r   r   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   s   	 t r(tr(|rt}tj}n| rt}t}nt}t}tdd||t}t |}||fS t| |d}t r8t |}||fS t	|}||fS )NTFr   r   )

FastParserFastUnmarshallerrc   rj   rk   rp   ra   r#   r   rr   )r   r   Z
mkdatetimeZmkbytesrx   ry   r   r   r   	getparser  s&   r  c                 C   s   	 t | tr	d}n|rt | tr|sd}trt|}nt||}|| }|dkr0dt| }nd}|r=|d|d|df}n|rF|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>
r   )r;   r#   r<   FastMarshallerr   r   rB   r   )r   
methodnameZmethodresponserz   r   mrX   Z	xmlheaderr   r   r   r     s8   




r   c                 C   s4   	 t ||d\}}||  |  | | fS Nr   )r  r}   r   r   )rX   r   r   pur   r   r   loads  s
   
r
  c                 C   sX   	 t stt }t jd|dd}||  W d    | S 1 s#w   Y  | S )Nwbr)   )modefileobjcompresslevel)gzipNotImplementedErrorr   GzipFiler\   getvalue)rX   r   gzfr   r   r   gzip_encode  s   
r    @c              	   C   s   	 t stt jdt| d&}z|dk r| }n||d }W n ty,   tdw W d    n1 s7w   Y  |dkrJt||krJtd|S )Nrbr  r  r   r)   zinvalid dataz#max gzipped payload length exceeded)r  r  r  r   readOSErrorr,   r   )rX   Z
max_decoder  Zdecodedr   r   r   gzip_decode)  s"   
r  c                   @   r   )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  d S | j  w r   )r  r  r   r  r   r   r   r   r   O  s   zGzipDecodedResponse.closeN)r   r   r   r   r   r   r   r   r   r  C  s    r  c                   @   rq   )_Methodc                 C   r   r   _Method__send_Method__name)r   sendr   r   r   r   r   \  r   z_Method.__init__c                 C   r   r   )r  r   r!  r   r   r   r   r   _  r   z_Method.__getattr__c                 G   s   |  | j|S r   r  r   r   r   r   r   a  rR   z_Method.__call__Nr   r   r   r   r   r  Y  r   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 ]:}z|  ||||W   S  tjjy   |r Y q ty< } z|s1|jtjtjtjfvr2 W Y d }~qd }~ww 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   z|  ||||}| }|jdkr|| _| |W S W n ty$     ty/   |    w |ddr:|	  t
|| |j|jt| )N   zcontent-lengthr   )send_requestZgetresponsestatusr1  parse_responser#   	Exceptionr   	getheaderr  r   reasonr   Z
getheaders)r   r.  r/  r0  r1  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|\}}|r2tj|}t|d}d	|
 }dd| fg}ng }|||fS )Nr   r   ZAuthorizationzBasic )r;   r<   urllibparse
_splituserunquote_to_bytesrj   rn   rY   r   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 d S r$  )r&  r   )r   r.  
connectionr   r   r   r     s
   
zTransport.closec                 C   s   |  |}| j| j }|r|d | jr%tr%|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)rB  r'  r(  Zset_debuglevelaccept_gzip_encodingr  Z
putrequestr   
user_agentsend_headerssend_content)r   r.  r/  r0  debugrC  r   r   r   r   r5    s   



zTransport.send_requestc                 C   s   |D ]
\}}| || qd S r   )	putheader)r   rC  r   keyvalr   r   r   rF    s   zTransport.send_headersc                 C   sR   | j d ur| j t|k rtr|dd t|}|dtt| || d S )NContent-Encodingr  zContent-Length)encode_thresholdr   r  rI  r  rB   Z
endheaders)r   rC  r0  r   r   r   rG     s   
zTransport.send_contentc                 C   s   t |dr|dddkrt|}n|}n|}|  \}}	 |d}|s&n| jr0tdt| || q||ur>|	  |	  |	 S )Nr9  rL  r   r  r)   i   zbody:)
rD   r9  r  r  r  r1  printr   r}   r   )r   r  streamr  r	  rX   r   r   r   r7  1  s$   



zTransport.parse_responser   )F)r   r   r   __version__rE  rD  rM  r   r3  r)  r  r@  rB  r   r5  rF  rG  r7  r   r   r   r   r#  j  s$    

!r#  c                       s0   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   rS  )r   r   r   r   rS  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std| |\}| _}|tjj|d fd| ji|p0i f| _ | j d S )Nr   r)   HTTPSConnectionz1your version of http.client doesn't support HTTPSrS  )	r&  rD   r*  r+  r  r@  r(  rW  rS  rA  r   r   r   rB  [  s   



zSafeTransport.make_connectionr   )r   r   r   r   rB  __classcell__r   r   rV  r   rQ  O  s    	rQ  c                   @   s\   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   rR  c                C   s   t j|}
|
jdvrtd|
j| _t jddg|
dd  | _| js(d| _|d u rG|
jdkr8t	}d|	i}nt
}i }|d
|||d|}|| _|pMd	| _|| _|| _d S )N)r*  httpszunsupported XML-RPC protocolr   r   z/RPC2rZ  rS  rT  r   r   )r;  r<  urlsplitschemer  netloc_ServerProxy__host
urlunsplit_ServerProxy__handlerrQ  r#  _ServerProxy__transport_ServerProxy__encoding_ServerProxy__verbose_ServerProxy__allow_none)r   Zuri	transportrz   r1  r   r   r   r   rS  r  r/  Zextra_kwargsr   r   r   r     s.   




zServerProxy.__init__c                 C   s   | j   d S r   )ra  r   r   r   r   r   Z__close  rR   zServerProxy.__closec                 C   sP   t ||| j| jd| jd}| jj| j| j|| jd}t	|dkr&|d }|S )N)rz   r   xmlcharrefreplace)r1  r)   r   )
r   rb  rd  r^   ra  r3  r^  r`  rc  r   )r   r  r   r3  r  r   r   r   Z	__request  s   

zServerProxy.__requestc                 C   r(   )Nz<%s for %s%s>)r   r   r^  r`  r   r   r   r   r      s   zServerProxy.__repr__c                 C   r   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 )Nr   re  zAttribute %r not found)_ServerProxy__closera  r~   )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   )rh  r   r   r   r   __exit__  rd   zServerProxy.__exit__)NNFFFF)r   r   r   r   rh  rg  r    r   r   rj  rk  r   r   r   r   rY  z  s    
rY  __main__zhttp://localhost:8000ERROR	   r   )NNNF)r  )Urj   sysr=   r   decimalr   Zhttp.clientr*  urllib.parser;  Zxml.parsersr   r,  r  r   r  ImportErrorr   version_inforP  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_ERRORr8  r   r   r"   r#   r   r   ZBooleanr*   r.   r5   r@   rA   ra   rc   re   rp   r   rr   r   r   r   r   r   r  r  r  r  r   r
  r  r  r  r   r  r  r#  rQ  rY  ZServerr   r   rN  ZcurrentTimeZgetCurrentTimer   ZmultiZgetDatapowaddr  r   r   r   r   <module>   s   X*

R	#! ( C%
'

K
 f+i

