
    z%i                        	 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 	 d dlZd Zdej$                  dd z  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e"      Z# G d de#      Z$ G d de#      Z% G d de#      Z&e'xZ(Z) eddd      Z*d Z+ e+d      rd  Z,n e+d!      rd" Z,nd# Z,[*[+d$ Z- G d% d&      Z.d' Z/d( Z0 G d) d*      Z1d+ Z2e.e1fZ3 G d, d-      Z4 G d. d/      Z5 G d0 d1      Z6 G d2 d3      Z7 G d4 d5      Z8 G d6 d7      Z9dxZ:xZ;Z<dKd8Z=	 	 dLd9Z>dKd:Z?d; Z@dMd<ZA G d= d>erej                  neC      ZD G d? d@      ZE G dA dB      ZF G dC dDeF      ZG G dE dF      ZHeHZIeJdGk(  r{ eHdH      ZK	  eLeKj                  j                                 e9eK      ZPePj                          ePj                  ddJ       ePj                  dd       	  eP       D ]
  ZT eLeT        yy# e$ r dZY w xY w# e#$ rZO eLdIeO       Y dZO[OtdZO[Oww xY w# e#$ rZO eLdIeO       Y dZO[OydZO[Oww xY w)N    N)datetime)Decimal)expat)BytesIOc                 n    | j                  dd      } | j                  dd      } | j                  dd      S )N&z&amp;<z&lt;>z&gt;)replace)ss    A/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/xmlrpc/client.pyescaper      s3    			#wA			#vA99S&""    z%d.%d   ii   iDiiipiԁiCiBiiic                   &    e Zd Z	 ej                  Zy)ErrorN)__name__
__module____qualname__object__str__ r   r   r   r      s    'nnGr   r   c                       e Zd Z	 d Zd Zy)ProtocolErrorc                 f    t         j                  |        || _        || _        || _        || _        y N)r   __init__urlerrcodeerrmsgheaders)selfr   r   r    r!   s        r   r   zProtocolError.__init__   s*    tr   c           	          d| j                   j                  d| j                  d| j                  d| j                  d	S )Nr	    for :  r
   )	__class__r   r   r   r    r"   s    r   __repr__zProtocolError.__repr__   s.     ^^$$dhhdkkK	r   Nr   r   r   r   r)   r   r   r   r   r      s    +r   r   c                       e Zd Z	 y)ResponseErrorN)r   r   r   r   r   r   r,   r,      s    .r   r,   c                       e Zd Z	 d Zd Zy)Faultc                 J    t         j                  |        || _        || _        y r   )r   r   	faultCodefaultString)r"   r0   r1   extras       r   r   zFault.__init__   s    t"&r   c                 j    d| j                   j                  d| j                  d| j                  dS )Nr	   r&   r%   r
   )r'   r   r0   r1   r(   s    r   r)   zFault.__repr__   s*     $ 7 7 $0@0@B 	Br   Nr*   r   r   r   r.   r.      s    -'Br   r.      c                 R    	 t         j                  |       dk(  S # t        $ r Y yw xY w)N0001F)_day0strftime
ValueError)fmts    r   _tryr;     s-    ~~c"f,, s    	&&z%Yc                 $    | j                  d      S N%Y%m%dT%H:%M:%Sr8   values    r   _iso8601_formatrB     s    ~~/00r   z%4Yc                 $    | j                  d      S )Nz%4Y%m%dT%H:%M:%Sr?   r@   s    r   rB   rB     s    ~~011r   c                 B    | j                  d      j                  d      S )Nr>      )r8   zfillr@   s    r   rB   rB     s    ~~/066r::r   c                     t        | t              rt        |       S t        | t        t        j
                  f      s.| dk(  rt	        j                         } t	        j                  |       } d| d d z  S )Nr   z%04d%02d%02dT%02d:%02d:%02d   )
isinstancer   rB   tupletimestruct_time	localtimer@   s    r   	_strftimerN     s]    %"u%%eeT%5%567A:IIKEu%(5!944r   c                   X    e Zd Z	 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y)DateTimec                 T    t        |t              r|| _        y t        |      | _        y r   )rI   strrA   rN   )r"   rA   s     r   r   zDateTime.__init__.  s    eS!DJ"5)DJr   c                 l   t        |t              r| j                  }|j                  }||fS t        |t              r| j                  }t	        |      }||fS t        |t
              r| j                  }|}||fS t        |d      r$| j                         }|j                         }||fS | }t        }||fS )N	timetuple)	rI   rP   rA   r   rB   rR   hasattrrT   NotImplementedr"   otherr   os       r   make_comparablezDateTime.make_comparable4  s    eX&

AA !t x(

A&A !t s#

AA !t UK( A!A !t AA!tr   c                 P    | j                  |      \  }}|t        u rt        S ||k  S r   rZ   rV   rW   s       r   __lt__zDateTime.__lt__F  -    ##E*1!!1ur   c                 P    | j                  |      \  }}|t        u rt        S ||k  S r   r\   rW   s       r   __le__zDateTime.__le__L  -    ##E*1!!Avr   c                 P    | j                  |      \  }}|t        u rt        S ||kD  S r   r\   rW   s       r   __gt__zDateTime.__gt__R  r^   r   c                 P    | j                  |      \  }}|t        u rt        S ||k\  S r   r\   rW   s       r   __ge__zDateTime.__ge__X  ra   r   c                 P    | j                  |      \  }}|t        u rt        S ||k(  S r   r\   rW   s       r   __eq__zDateTime.__eq__^  ra   r   c                 B    t        j                  | j                  d      S r=   )rK   strptimerA   r(   s    r   rT   zDateTime.timetupled  s    }}TZZ):;;r   c                     | j                   S r   r@   r(   s    r   r   zDateTime.__str__l  s    zzr   c                 `    d| j                   j                  | j                  t        |       fz  S )Nz<%s %r at %#x>)r'   r   rA   idr(   s    r   r)   zDateTime.__repr__o  s&    4>>#:#:DJJ4"QQQr   c                 @    t        |      j                         | _        y r   )rR   striprA   r"   datas     r   decodezDateTime.decoder  s    Y__&
r   c                 ~    |j                  d       |j                  | j                         |j                  d       y Nz<value><dateTime.iso8601>z</dateTime.iso8601></value>
)writerA   )r"   outs     r   encodezDateTime.encodeu  s,    		-.		$**		12r   N)r   )r   r   r   r   rZ   r]   r`   rc   re   rg   rT   r   r)   rq   rv   r   r   r   rP   rP   (  sD    
*$<R'3r   rP   c                 <    t               }|j                  |        |S r   )rP   rq   rp   rA   s     r   	_datetimery   z  s    JE	LLLr   c                 .    t        j                  | d      S r=   )r   ri   )rp   s    r   _datetime_typer{     s    T#455r   c                   .    e Zd Z	 ddZd Zd Zd Zd Zy)BinaryNc                     |
d}|| _        y t        |t        t        f      s"t        d|j                  j
                  z        t        |      }|| _        y )Nr   z#expected bytes or bytearray, not %s)rI   bytes	bytearray	TypeErrorr'   r   rp   ro   s     r   r   zBinary.__init__  sX    <D 		 dUI$67 E $ 7 7!8 9 9;D	r   c                 .    t        | j                  d      S )Nzlatin-1)rR   rp   r(   s    r   r   zBinary.__str__  s    499i((r   c                 X    t        |t              r|j                  }| j                  |k(  S r   )rI   r}   rp   )r"   rX   s     r   rg   zBinary.__eq__  s$    eV$JJEyyE!!r   c                 8    t        j                  |      | _        y r   )base64decodebytesrp   ro   s     r   rq   zBinary.decode  s    &&t,	r   c                     |j                  d       t        j                  | j                        }|j                  |j	                  d             |j                  d       y Nz<value><base64>
asciiz</base64></value>
)rt   r   encodebytesrp   rq   )r"   ru   encodeds      r   rv   zBinary.encode  sE    		%&$$TYY/		'..)*		'(r   r   )r   r   r   r   r   rg   rq   rv   r   r   r   r}   r}     s    ")"
-)r   r}   c                 <    t               }|j                  |        |S r   )r}   rq   rx   s     r   _binaryr     s    HE	LLLr   c                       e Zd Zd Zd Zd Zy)ExpatParserc                     t        j                  d d       x| _        }|| _        |j                  |_        |j                  |_        |j                  |_	        d }|j                  |d        y r   )r   ParserCreate_parser_targetstartStartElementHandlerendEndElementHandlerrp   CharacterDataHandlerxml)r"   targetparserencodings       r   r   zExpatParser.__init__  sY     % 2 24 >>v%+\\"#):: &,kk#

8T"r   c                 <    | j                   j                  |d       y NF)r   Parsero   s     r   feedzExpatParser.feed  s    4'r   c                 h    	 | j                   }| `| ` |j                  dd       y # t        $ r Y y w xY w)Nr   T)r   r   r   AttributeError)r"   r   s     r   closezExpatParser.close  s=    	$\\F dlLLd#	  		s   % 	11N)r   r   r   r   r   r   r   r   r   r   r     s    #($r   r   c                      e Zd Z	 ddZi Zd Zd Zd Zee ed      <   d Z	e	ee
<   d Zeee<   eZd Zeee<   efd	Zeee<   d
 Zeee<   eee<   d Zeee<   eee<   efdZeee<   d Zeee<   d Zeee<   eee<   eed<   y)
MarshallerNc                 <    i | _         d | _        || _        || _        y r   )memorp   r   
allow_none)r"   r   r   s      r   r   zMarshaller.__init__  s    		 $r   c                 >   g }|j                   }| j                  }t        |t              r1 |d        ||j                  |j
                  d|        |d       n0 |d       |D ]  } |d        |||        |d         |d       dj                  |      }|S )	Nz<fault>
)r0   r1   z	</fault>
z	<params>
z<param>
z	</param>
z
</params>
 )append_Marshaller__dumprI   r.   r0   r1   join)r"   valuesru   rt   dumpvresults          r   dumpszMarshaller.dumps  s    

{{fe$+v//!'!3!35 , , $k"Ql#$ - r   c                 f   	 | j                   t        |         } || ||       y # t        $ r t        |d      st	        dt        |      z        t        |      j
                  D ]5  }|| j                   j                         v s t	        dt        |      z         | j                   d   }Y w xY w)N__dict__zcannot marshal %s objects_arbitrary_instance)dispatchtypeKeyErrorrU   r   __mro__keys)r"   rA   rt   ftype_s        r   __dumpzMarshaller.__dump  s    	5d5k*A 	
$u  	55*- ;d5k IJJ e,, ODMM..00#$?$u+$MNNO
 34A	5s   % A B0'B0/B0c                 B    | j                   st        d       |d       y )Nz0cannot marshal None unless allow_none is enabledz<value><nil/></value>)r   r   r"   rA   rt   s      r   dump_nilzMarshaller.dump_nil  s    NOO%&r   c                 D     |d        ||xr dxs d        |d       y )Nz<value><boolean>10z</boolean></value>
r   r   s      r   	dump_boolzMarshaller.dump_bool   s%     !em"s#$%r   c                     |t         kD  s	|t        k  rt        d       |d        |t        t	        |                    |d       y )Nzint exceeds XML-RPC limitsz<value><int>z</int></value>
)MAXINTMININTOverflowErrorrR   intr   s      r   	dump_longzMarshaller.dump_long&  s<    6>UV^ <==nc#e*o !r   c                 F     |d        |t        |              |d       y )Nz<value><double>z</double></value>
)reprr   s      r   dump_doublezMarshaller.dump_double1  s      d5k#$r   c                 @     |d        | ||              |d       y )Nz<value><string>z</string></value>
r   )r"   rA   rt   r   s       r   dump_unicodezMarshaller.dump_unicode7  s      fUm#$r   c                 |     |d       t        j                  |      } ||j                  d              |d       y r   )r   r   rq   )r"   rA   rt   r   s       r   
dump_byteszMarshaller.dump_bytes=  s5    !"$$U+gnnW%&#$r   c                     t        |      }|| j                  v rt        d      d | j                  |<   | j                  } |d       |D ]  } |||         |d       | j                  |= y )Nz"cannot marshal recursive sequencesz<value><array><data>
z</data></array></value>
)rl   r   r   r   )r"   rA   rt   ir   r   s         r   
dump_arrayzMarshaller.dump_arrayE  sm    uI		>@AA		!{{&' 	AEN	)*IIaLr   c                 v   t        |      }|| j                  v rt        d      d | j                  |<   | j                  } |d       |j	                         D ]J  \  }} |d       t        |t              st        d       |d ||      z          |||        |d       L  |d       | j                  |= y )Nz%cannot marshal recursive dictionariesz<value><struct>
z	<member>
zdictionary key must be stringz<name>%s</name>
z
</member>
z</struct></value>
)rl   r   r   r   itemsrI   rR   )r"   rA   rt   r   r   r   kr   s           r   dump_structzMarshaller.dump_structS  s    uI		>CDD		!{{!"KKM 	!DAq,a% ?@@%q	12EN- 	! 	#$IIaLr   c                 F     |d        |t        |              |d       y rs   )rN   r   s      r   dump_datetimezMarshaller.dump_datetimee  s!    )*i-.r   c                     |j                   t        v r|| _        |j                  |        | `y | j	                  |j
                  |       y r   )r'   WRAPPERSrt   rv   r   r   r   s      r   dump_instancezMarshaller.dump_instancek  s<    ??h&DJLL
 U^^U3r   r   r   ) r   r   r   r   r   r   r   r   r   r   boolr   r   dump_intr   floatr   r   rR   r   r   r   r   rJ   listr   dictr   r   r   rP   r}   r   r   r   r   r     s    % H6$' $HT$Z& HTN" HSM H% "HUO06 % !HSM%
 !HUO$HY
 !HUOHTN/5   !HTN/ 'HX4 'HX$HV '4H"#r   r   c                   j   e Zd Z	 d-dZd Zd Zd Zd Zd Zd Z	d Z
i Zd	 Zeed
<   d Zeed<   d Zeed<   eed<   eed<   eed<   eed<   eed<   d Zeed<   eed<   d Zeed<   d Zeed<   eed<   d Zeed<   d Zeed<   d  Zeed!<   d" Zeed#<   d$ Zeed%<   d& Zeed'<   d( Zeed)<   d* Zeed+<   y,).Unmarshallerc                     d | _         g | _        g | _        g | _        d| _        d | _        d| _        | j                  j                  | _        |xs || _        || _	        y )NFutf-8)
_type_stack_marks_data_value_methodname	_encodingr   _use_datetime
_use_bytes)r"   use_datetimeuse_builtin_typess      r   r   zUnmarshaller.__init__  sY    

 kk((.>,+r   c                     | j                   | j                  r
t               | j                   dk(  rt        di | j                  d   t        | j                        S )Nfaultr   r   )r   r   r,   r.   r   rJ   r(   s    r   r   zUnmarshaller.close  sK    ::/!:: )$++a.))T[[!!r   c                     | j                   S r   )r   r(   s    r   getmethodnamezUnmarshaller.getmethodname  s    r   c                     || _         y r   )r   )r"   r   
standalones      r   r   zUnmarshaller.xml  s	    !r   c                    d|v r|j                  d      d   }|dk(  s|dk(  r.| j                  j                  t        | j                               g | _        | j                  r|| j                  vrt        d|z        |dk(  | _        y )N:arraystructzunknown tag %rrA   )	splitr   r   lenr   r   r   r   r,   )r"   tagattrss      r   r   zUnmarshaller.start  sx    #:))C.$C'>SH_KKs4;;/0
;;3dmm3 03 677g~r   c                 :    | j                   j                  |       y r   )r   r   )r"   texts     r   rp   zUnmarshaller.data  s    

$r   c                     	 | j                   |   } || dj                  | j                              S # t        $ r< d|vrY y 	 | j                   |j                  d      d      }n# t        $ r Y Y y w xY wY fw xY w)Nr   r   r   )r   r   r   r   r   )r"   r   r   s      r   r   zUnmarshaller.end  s    	c"A rwwtzz*++  	#~MM#))C."45  		s3   3 A8!A%$A8%	A2.A81A22A87A8c                     	 | j                   |   } || |      S # t        $ r< d|vrY y 	 | j                   |j                  d      d      }n# t        $ r Y Y y w xY wY Mw xY w)Nr   r   )r   r   r   )r"   r   rp   r   s       r   end_dispatchzUnmarshaller.end_dispatch  su    	c"A t}  	#~MM#))C."45  		s2    A!AA	AAAAAc                 4    | j                  d        d| _        y Nr   )r   r   ro   s     r   end_nilzUnmarshaller.end_nil  s    Dr   nilc                     |dk(  r| j                  d       d| _        y |dk(  r| j                  d       d| _        y t        d      )Nr   Fr   Tzbad boolean valuer   )r   r   r   ro   s     r   end_booleanzUnmarshaller.end_boolean  sJ    3;KK
 	 S[KK  /00r   booleanc                 F    | j                  t        |             d| _        y r  )r   r   r   ro   s     r   end_intzUnmarshaller.end_int  s    CIr   i1i2i4i8r   
bigintegerc                 F    | j                  t        |             d| _        y r  )r   r   r   ro   s     r   
end_doublezUnmarshaller.end_double  s    E$K r   doubler   c                 F    | j                  t        |             d| _        y r  )r   r   r   ro   s     r   end_bigdecimalzUnmarshaller.end_bigdecimal  s    GDM"r   
bigdecimalc                     | j                   r|j                  | j                         }| j                  |       d| _        y r  )r   rq   r   r   ro   s     r   
end_stringzUnmarshaller.end_string  s.    >>;;t~~.DDr   stringnamec                     | j                   j                         }| j                  |d  g| j                  |d  d| _        y r  )r   popr   r   )r"   rp   marks      r   	end_arrayzUnmarshaller.end_array  s7    {{ "kk$%01DEr   r   c                     | j                   j                         }i }| j                  |d  }t        dt	        |      d      D ]  }||dz      |||   <    |g| j                  |d  d| _        y )Nr   r   r4   )r   r  r   ranger   r   )r"   rp   r   r   r   r   s         r   
end_structzUnmarshaller.end_struct  sq    {{ DE"q#e*a( 	(A"1Q3ZDqN	("VDEr   r   c                     t               }|j                  |j                  d             | j                  r|j                  }| j                  |       d| _        y )Nr   r   )r}   rq   rv   r   rp   r   r   r"   rp   rA   s      r   
end_base64zUnmarshaller.end_base64  sA    T[[)*??JJEEr   r   c                     t               }|j                  |       | j                  rt        |      }| j	                  |       y r   )rP   rq   r   r{   r   r&  s      r   end_dateTimezUnmarshaller.end_dateTime   s4    
T"4(EEr   zdateTime.iso8601c                 @    | j                   r| j                  |       y y r   )r   r  ro   s     r   	end_valuezUnmarshaller.end_value(  s     ;;OOD! r   rA   c                     d| _         y )Nparamsr   ro   s     r   
end_paramszUnmarshaller.end_params/  s	    
r   r-  c                     d| _         y )Nr   r.  ro   s     r   	end_faultzUnmarshaller.end_fault3  s	    
r   r   c                 n    | j                   r|j                  | j                         }|| _        d| _        y )N
methodName)r   rq   r   r   ro   s     r   end_methodNamezUnmarshaller.end_methodName7  s*    >>;;t~~.D!
r   r3  NFF)r   r   r   r   r   r   r   r   rp   r   r  r   r  r  r  r  r  r  r!  r$  r'  r)  r+  r/  r1  r4  r   r   r   r   r     sa   
," "	' ,   H HUO &HY HTNHTNHTNHTNHUO$H\ $HX"HW ,H\
 $HX!HV
 "HW $HX $HX $0H "
 "HW#HX!HW"
 ,H\r   r   c                       e Zd Zd Zd Zd Zy)_MultiCallMethodc                      || _         || _        y r   )_MultiCallMethod__call_list_MultiCallMethod__name)r"   	call_listr  s      r   r   z_MultiCallMethod.__init__D  s    $r   c                 L    t        | j                  | j                  d|      S N.)r7  r9  r:  r"   r  s     r   __getattr__z_MultiCallMethod.__getattr__G  s     0 0T[[$2OPPr   c                 R    | j                   j                  | j                  |f       y r   )r9  r   r:  r"   argss     r   __call__z_MultiCallMethod.__call__I  s    d 34r   Nr   r   r   r   r@  rD  r   r   r   r7  r7  A  s    Q5r   r7  c                       e Zd Z	 d Zd Zy)MultiCallIteratorc                     || _         y r   )results)r"   rI  s     r   r   zMultiCallIterator.__init__P  s	    r   c                     | j                   |   }t        |t              rt        |d   |d         t        |t              r|d   S t        d      )Nr0   r1   r   z#unexpected type in multicall result)rI  rI   r   r.   r   r9   )r"   r   items      r   __getitem__zMultiCallIterator.__getitem__S  sO    ||AdD![)4+>??d#7NBCCr   N)r   r   r   r   rL  r   r   r   rG  rG  L  s    ,Dr   rG  c                   &    e Zd Z	 d Zd Zd Zd Zy)	MultiCallc                      || _         g | _        y r   )_MultiCall__server_MultiCall__call_list)r"   servers     r   r   zMultiCall.__init__m  s    r   c                 J    d| j                   j                  t        |       fz  S )Nz<%s at %#x>)r'   r   rl   r(   s    r   r)   zMultiCall.__repr__q  s      7 7DBBBr   c                 .    t        | j                  |      S r   )r7  rQ  r?  s     r   r@  zMultiCall.__getattr__t  s     0 0$77r   c                     g }| j                   D ]  \  }}|j                  ||d        t        | j                  j                  j                  |            S )N)r3  r-  )rQ  r   rG  rP  system	multicall)r"   marshalled_listr  rC  s       r   rD  zMultiCall.__call__w  sW    ** 	KJD$""4D#IJ	K !!5!5!?!?!PQQr   N)r   r   r   r   r)   r@  rD  r   r   r   rN  rN  \  s     C8Rr   rN  c                 *   	 t         r\t        rV|rt        }t        j                  }n| rt        }t
        }nt        }t
        }t        dd||t              }t        |      }||fS t        | |      }t         rt        |      }||fS t        |      }||fS )NTFr   r   )

FastParserFastUnmarshallerr{   r   r   r   ry   r.   r   r   )r   r   
mkdatetimemkbytesr   r   s         r   	getparserr_    s    
 &'J((G'JG"JG!$w
EJF# 6> <K\]'F 6> !(F6>r   c                 .   	 t        | t              rd}n|rt        | t              r |sd}t        rt        |      }nt	        ||      }|j                  |       }|dk7  rdt        |      z  }nd}|r	|d|d|df}n|r|d|d	f}n|S d
j                  |      S )Nr4   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   )rI   r.   rJ   FastMarshallerr   r   rR   r   )r-  
methodnamemethodresponser   r   mrp   	xmlheaders           r   r   r     s    , &% 	Jvu5 8$x,776?D7;c(mK	-	  &(9 
  !	 774=r   c                     	 t        ||      \  }}|j                  |        |j                          |j                         |j                         fS NrZ  )r_  r   r   r   )rp   r   r   pus        r   loadsrj    sF     ,BSTDAqFF4LGGI779aoo'''r   c                     	 t         st        t               }t        j                  d|d      5 }|j	                  |        d d d        |j                         S # 1 sw Y   |j                         S xY w)Nwbr4   )modefileobjcompresslevel)gzipNotImplementedErrorr   GzipFilert   getvalue)rp   r   gzfs      r   gzip_encoderu    s^     !!	A	D!1	= 		$::<::<s   AA2c                 L   	 t         st        t        j                  dt        |             5 }	 |dk  r|j	                         }n|j	                  |dz         }d d d        |dk\  rt              |kD  rt        d      S # t
        $ r t        d      w xY w# 1 sw Y   AxY w)Nrbrm  rn  r   r4   zinvalid dataz#max gzipped payload length exceeded)rp  rq  rr  r   readOSErrorr9   r   )rp   
max_decodert  decodeds       r   gzip_decoder}  )  s     !!	D'$-	8 -C	-A~((*((:>2- Q3w<*4>??N	  	-^,,	-- -s   B*BBBB#c                       e Zd Z	 d Zd Zy)GzipDecodedResponsec                     t         st        t        |j                               | _        t         j
                  j                  | d| j                         y )Nrw  rx  )rp  rq  r   ry  iorr  r   )r"   responses     r   r   zGzipDecodedResponse.__init__G  s<     %%(--/*t$@r   c                     	 t         j                  j                  |        | j                  j                          y # | j                  j                          w xY wr   )rp  rr  r   r  r(   s    r   r   zGzipDecodedResponse.closeO  s4    	MM%GGMMODGGMMOs	   < AN)r   r   r   r   r   r   r   r   r  r  C  s    Ar   r  c                       e Zd Zd Zd Zd Zy)_Methodc                      || _         || _        y r   _Method__send_Method__name)r"   sendr  s      r   r   z_Method.__init__\  s    r   c                 L    t        | j                  | j                  d|      S r=  )r  r  r  r?  s     r   r@  z_Method.__getattr___  s    t{{t{{D$ABBr   c                 :    | j                  | j                  |      S r   r  rB  s     r   rD  z_Method.__call__a  s    {{4;;--r   NrE  r   r   r   r  r  Y  s    C.r   r  c                   n    e Zd Z	 dez  ZdZdZddddZddZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zy)	TransportzPython-xmlrpc/%sTNr   )r!   c                \    || _         || _        d| _        t        |      | _        g | _        y N)NN)r   _use_builtin_types_connectionr   _headers_extra_headers)r"   r   r   r!   s       r   r   zTransport.__init__x  s-    )"3'W r   c                 (   dD ]  }	 | j                  ||||      c S  y # t        j                  j                  $ r |r Y >t        $ rH}|s;|j
                  t
        j                  t
        j                  t
        j                  fvr Y d }~d }~ww xY w)N)r   r4   )	single_requesthttpclientRemoteDisconnectedrz  errno
ECONNRESETECONNABORTEDEPIPE)r"   hosthandlerrequest_bodyverboser   es          r   requestzTransport.request  s     		A**4,PP		 ;;11   (8(8%:L:L(-(5 55s    BB	>BBc           	         	 | j                  ||||      }|j                         }|j                  dk(  r|| _        | j	                  |      S 	 |j                  dd      r|j                          t        ||z   |j                  |j                  t        |j                                     # t
        $ r  t        $ r | j                           w xY w)N   zcontent-lengthr   )send_requestgetresponsestatusr  parse_responser.   	Exceptionr   	getheaderry  r   reasonr   
getheaders)r"   r  r  r  r  	http_connresps          r   r  zTransport.single_request  s    	))$wOI((*D{{c!&**400 " >>*B/IIK7NKK"# 	  	 	 JJL		s   A
B, ,$Cc                 D    t        | j                  | j                        S rg  )r_  r   r  r(   s    r   r_  zTransport.getparser  s"    d&8&8+/+B+BD 	Dr   c                 \   i }t        |t              r|\  }}t        j                  j	                  |      \  }}|rkt        j                  j                  |      }t        j                  |      j                  d      }dj                  |j                               }dd|z   fg}ng }|||fS )Nr   r   AuthorizationzBasic )rI   rJ   urllibparse
_splituserunquote_to_bytesr   r   rq   r   r   )r"   r  x509authextra_headerss        r   get_host_infozTransport.get_host_info  s    dE"JD$\\,,T2
d<<006D%%d+227;D774::<(D (T/2M M]D((r   c                     | j                   r!|| j                   d   k(  r| j                   d   S | j                  |      \  }| _        }|t        j                  j                  |      f| _         | j                   d   S )Nr   r4   )r  r  r  r  r  HTTPConnectionr"   r  chostr  s       r   make_connectionzTransport.make_connection  sw     (8(8(; ;##A&&+/+=+=d+C(t"D!;!;E!BB""r   c                 V    | j                   \  }}|rd| _         |j                          y y r  )r  r   )r"   r  
connections      r   r   zTransport.close  s.    ++j+D r   c                    | j                  |      }| j                  | j                  z   }|r|j                  d       | j                  r,t
        r&|j                  d|d       |j                  d       n|j                  d|       |j                  d       |j                  d| j                  f       | j                  ||       | j                  ||       |S )Nr4   POSTT)skip_accept_encoding)zAccept-Encodingrp  )zContent-Typeztext/xmlz
User-Agent)r  r  r  set_debuglevelaccept_gzip_encodingrp  
putrequestr   
user_agentsend_headerssend_content)r"   r  r  r  debugr  r!   s          r   r  zTransport.send_request  s    ))$/
--$"5"55%%a($$!!&'!MNN67!!&'234doo67*g.*l3r   c                 <    |D ]  \  }}|j                  ||        y r   )	putheader)r"   r  r!   keyvals        r   r  zTransport.send_headers  s%     	+HC  c*	+r   c                     | j                   ;| j                   t        |      k  r#t        r|j                  dd       t	        |      }|j                  dt        t        |                   |j                  |       y )NContent-Encodingrp  zContent-Length)encode_thresholdr   rp  r  ru  rR   
endheaders)r"   r  r  s      r   r  zTransport.send_content   sh    !!-!!C$55  !3V<&|4L-s3|3D/EFl+r   c                    t        |d      r$|j                  dd      dk(  rt        |      }n|}n|}| j                         \  }}|j	                  d      x}rF| j
                  rt        dt        |             |j                  |       |j	                  d      x}rF||ur|j                          |j                          |j                         S )Nr  r  r   rp  i   zbody:)
rU   r  r  r_  ry  r  printr   r   r   )r"   r  streamrh  ri  rp   s         r   r  zTransport.parse_response1  s     8[)!!"4b9VC,X6!F~~1kk$''d'||gtDz*FF4L kk$''d'
 !LLN		wwyr   r5  )F)r   r   r   __version__r  r  r  r   r  r  r_  r  r  r   r  r  r  r  r   r   r   r  r  j  sb    ; $k1J  
 !!$BD)4#.+	,"r   r  c                   0     e Zd Z	 dddd fdZd Z xZS )SafeTransportr   Nr!   contextc                8    t         |   |||       || _        y )Nr   r   r!   )superr   r  )r"   r   r   r!   r  r'   s        r   r   zSafeTransport.__init__O  s&    l+<!( 	 	* r   c                 h   | j                   r!|| j                   d   k(  r| j                   d   S t        t        j                  d      st	        d      | j                  |      \  }| _        }|t        j                  j                  |d fd| j                  i|xs i f| _         | j                   d   S )Nr   r4   HTTPSConnectionz1your version of http.client doesn't support HTTPSr  )	r  rU   r  r  rq  r  r  r  r  r  s       r   r  zSafeTransport.make_connectionX  s    (8(8(; ;##A&&t{{$56%?A A ,0+=+=d+C(t"D!<!<U"8,,"8+/:2"8 8""r   r5  )r   r   r   r   r  __classcell__)r'   s   @r   r  r  L  s    <#r   r  c                   L    e Zd Z	 	 	 dddddZd Zd Zd Zd Zd	 Zd
 Z	d Z
y)ServerProxyNr   r  c                   t         j                  j                  |      }
|
j                  dvrt	        d      |
j
                  | _        t         j                  j                  ddg|
dd        | _        | j                  sd| _        |.|
j                  dk(  rt        }d|	i}nt        }i } |d
|||d|}|| _        |xs d	| _        || _        || _        y )N)r  httpszunsupported XML-RPC protocolr   r   z/RPC2r  r  r  r   r   )r  r  urlsplitschemerz  netloc_ServerProxy__host
urlunsplit_ServerProxy__handlerr  r  _ServerProxy__transport_ServerProxy__encoding_ServerProxy__verbose_ServerProxy__allow_none)r"   uri	transportr   r  r   r   r   r!   r  rh  r  extra_kwargss                r   r   zServerProxy.__init__  s     LL!!#&88,,899hh00"b1A1QR51AB~~$DNxx7"' )73#! 0\2C(/0 #/0I %"-g &r   c                 8    | j                   j                          y r   )r  r   r(   s    r   __closezServerProxy.__close  s     r   c                     t        ||| j                  | j                        j                  | j                  d      }| j                  j                  | j                  | j                  || j                        }t        |      dk(  r|d   }|S )N)r   r   xmlcharrefreplace)r  r4   r   )
r   r  r  rv   r  r  r  r  r  r   )r"   rb  r-  r  r  s        r   	__requestzServerProxy.__request  s     
T__#'#4#466<fT__Na6b 	 ##++KKNNNN	 ,  x=A{Hr   c                 h    d| j                   j                  d| j                  | j                  dS )Nr	   r$   r
   )r'   r   r  r  r(   s    r   r)   zServerProxy.__repr__  s(     ^^$$dkk4>>C	r   c                 .    t        | j                  |      S r   )r  _ServerProxy__requestr?  s     r   r@  zServerProxy.__getattr__  s    t~~t,,r   c                 f    	 |dk(  r| j                   S |dk(  r| j                  S t        d|d      )Nr   r  z
Attribute z
 not found)_ServerProxy__closer  r   )r"   attrs     r   rD  zServerProxy.__call__  s<    	 7?<<[ ###?@@r   c                     | S r   r   r(   s    r   	__enter__zServerProxy.__enter__  s    r   c                 $    | j                          y r   )r  rB  s     r   __exit__zServerProxy.__exit__  s    r   )NNFFFF)r   r   r   r   r  r  r)   r@  rD  r  r  r   r   r   r  r  w  sD    * DIIN''>!$-Ar   r  __main__zhttp://localhost:8000ERROR	   r5  )NNNF)i  @)Ur   sysrK   r   decimalr   http.clientr  urllib.parser  xml.parsersr   r  r  r   rp  ImportErrorr   version_infor  r   r   PARSE_ERRORSERVER_ERRORAPPLICATION_ERRORSYSTEM_ERRORTRANSPORT_ERRORNOT_WELLFORMED_ERRORUNSUPPORTED_ENCODINGINVALID_ENCODING_CHARINVALID_XMLRPCMETHOD_NOT_FOUNDINVALID_METHOD_PARAMSINTERNAL_ERRORr  r   r   r,   r.   r   r  Booleanr7   r;   rB   rN   rP   ry   r{   r}   r   r   r   r   r   r7  rG  rN  ra  r[  r\  r_  r   rj  ru  r}  rr  r   r  r  r  r  r  Serverr   rR  r  currentTimegetCurrentTimer   multigetDatapowaddr  r   r   r   <module>r      s  r(T  
        # ((!,, 	        I E &	E 	BE B   '" 	Aq
 :1	%[2;		5P3 P3d6!) !)F f
$ $B`4 `4N}, },D	5 	5D D  R  RJ 26 5 5.N BF@V(,
044$--V ,	. 	."] ]D#I #Ve eR 

 z
 01Ff  //12 fE	MMO	IIaN	IIaN 	H(O	# m*  D~*  gq  gqsA   H  H ,H+ HHH(	H##H(+I0	H>>I