
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„jK‘  ã               @   sþ  d dl mZmZmZmZmZ d dlmZ d dlZd dlZ	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZyd dlZW n ek
r”   dZY nX d)dd„Zdd„ ZG d	d
„ d
ƒZG dd„ deƒZG dd„ de
jeƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ dƒZG dd„ deƒZG dd„ deeƒZG dd„ deeƒZ e!dk�rúd dl"Z"G dd„ dƒZ#ed*ƒ�~Z$e$j%e&ƒ e$j%d"d#„ d$ƒ e$j'e#ƒ dd%� e$j(ƒ  e)d&ƒ e)d'ƒ ye$j*ƒ  W n( e+k
�rî   e)d(ƒ ej,d ƒ Y nX W dQ R X dS )+é    )ÚFaultÚdumpsÚloadsÚgzip_encodeÚgzip_decode)ÚBaseHTTPRequestHandlerNTc             C   sJ   |r|j dƒ}n|g}x.|D ]&}|jdƒr8td| ƒ‚qt| |ƒ} qW | S )NÚ.Ú_z(attempt to access private attribute "%s")ÚsplitÚ
startswithÚAttributeErrorÚgetattr)ÚobjÚattrÚallow_dotted_namesZattrsÚi© r   ú%/usr/lib64/python3.6/xmlrpc/server.pyÚresolve_dotted_attribute{   s    


r   c                s   ‡ fdd„t ˆ ƒD ƒS )Nc                s*   g | ]"}|j d ƒ rttˆ |ƒƒr|‘qS )r	   )r   Úcallabler   )Ú.0Úmember)r   r   r   ú
<listcomp>—   s    z'list_public_methods.<locals>.<listcomp>)Údir)r   r   )r   r   Úlist_public_methods“   s    r   c               @   sl   e Zd Zddd„Zddd„Zddd„Zd	d
„ Zdd„ Zddd„Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚSimpleXMLRPCDispatcherFNc             C   s&   i | _ d | _|| _|pd| _|| _d S )Nzutf-8)ÚfuncsÚinstanceÚ
allow_noneÚencodingÚuse_builtin_types)Úselfr   r   r    r   r   r   Ú__init__¤   s
    
zSimpleXMLRPCDispatcher.__init__c             C   s   || _ || _d S )N)r   r   )r!   r   r   r   r   r   Úregister_instance¬   s    !z(SimpleXMLRPCDispatcher.register_instancec             C   s   |d kr|j }|| j|< d S )N)Ú__name__r   )r!   ZfunctionÚnamer   r   r   Úregister_functionÐ   s    z(SimpleXMLRPCDispatcher.register_functionc             C   s   | j j| j| j| jdœƒ d S )N)zsystem.listMethodszsystem.methodSignaturezsystem.methodHelp)r   ÚupdateÚsystem_listMethodsÚsystem_methodSignatureÚsystem_methodHelp)r!   r   r   r   Ú register_introspection_functionsÛ   s    
z7SimpleXMLRPCDispatcher.register_introspection_functionsc             C   s   | j jd| jiƒ d S )Nzsystem.multicall)r   r'   Úsystem_multicall)r!   r   r   r   Úregister_multicall_functionsæ   s    z3SimpleXMLRPCDispatcher.register_multicall_functionsc             C   sà   yPt || jd�\}}|d k	r(|||ƒ}n| j||ƒ}|f}t|d| j| jd�}W n€ tk
r„ } zt|| j| jd�}W Y d d }~X nN   tjƒ \}}	}
z$ttdd||	f ƒ| j| jd�}W d d  } }	}
X Y nX |j	| jdƒS )N)r    é   )Zmethodresponser   r   )r   r   z%s:%s)r   r   Úxmlcharrefreplace)
r   r    Ú	_dispatchr   r   r   r   ÚsysÚexc_infoÚencode)r!   ÚdataÚdispatch_methodÚpathÚparamsÚmethodÚresponseÚfaultÚexc_typeÚ	exc_valueÚexc_tbr   r   r   Ú_marshaled_dispatchî   s&    z*SimpleXMLRPCDispatcher._marshaled_dispatchc             C   s^   t | jjƒ ƒ}| jd k	rVt| jdƒr8|t | jjƒ ƒO }nt| jdƒsV|t t| jƒƒO }t|ƒS )NÚ_listMethodsr0   )Úsetr   Úkeysr   Úhasattrr?   r   Úsorted)r!   Úmethodsr   r   r   r(     s    
z)SimpleXMLRPCDispatcher.system_listMethodsc             C   s   dS )Nzsignatures not supportedr   )r!   Úmethod_namer   r   r   r)   )  s    z-SimpleXMLRPCDispatcher.system_methodSignaturec             C   sŒ   d }|| j kr| j | }nX| jd k	rrt| jdƒr<| jj|ƒS t| jdƒsryt| j|| jƒ}W n tk
rp   Y nX |d kr~dS tj|ƒS d S )NÚ_methodHelpr0   Ú )	r   r   rB   rF   r   r   r   ÚpydocÚgetdoc)r!   rE   r8   r   r   r   r*   6  s"    

z(SimpleXMLRPCDispatcher.system_methodHelpc       
      C   sº   g }x°|D ]¨}|d }|d }y|j | j||ƒgƒ W q
 tk
rl } z|j |j|jdœƒ W Y d d }~X q
   tjƒ \}}}	z|j dd||f dœƒ W d d  } }}	X Y q
X q
W |S )NZ
methodNamer7   )Ú	faultCodeÚfaultStringr.   z%s:%s)Úappendr0   r   rJ   rK   r1   r2   )
r!   Z	call_listÚresultsZcallrE   r7   r:   r;   r<   r=   r   r   r   r,   U  s$    

z'SimpleXMLRPCDispatcher.system_multicallc             C   s®   y| j | }W n tk
r"   Y nX |d k	r4||Ž S td| ƒ‚| jd k	ržt| jdƒrd| jj||ƒS yt| j|| jƒ}W n tk
rŒ   Y nX |d k	rž||Ž S td| ƒ‚d S )Nzmethod "%s" is not supportedr0   )	r   ÚKeyErrorÚ	Exceptionr   rB   r0   r   r   r   )r!   r8   r7   Úfuncr   r   r   r0   y  s(    
z SimpleXMLRPCDispatcher._dispatch)FNF)F)N)NN)r$   Ú
__module__Ú__qualname__r"   r#   r&   r+   r-   r>   r(   r)   r*   r,   r0   r   r   r   r   r   ›   s   	 

$

)$r   c               @   sb   e Zd ZdZdZdZdZejdej	ej
B ƒZdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zddd„ZdS )ÚSimpleXMLRPCRequestHandlerú/ú/RPC2ix  r.   Tz¢
                            \s* ([^\s;]+) \s*            #content-coding
                            (;\s* q \s*=\s* ([0-9\.]+))? #q
                            c             C   sb   i }| j jddƒ}xJ|jdƒD ]<}| jj|ƒ}|r|jdƒ}|rHt|ƒnd}|||jdƒ< qW |S )NzAccept-EncodingrG   ú,é   g      ð?r.   )ÚheadersÚgetr
   Ú	aepatternÚmatchÚgroupÚfloat)r!   ÚrZaeÚer[   Úvr   r   r   Úaccept_encodingsÅ  s    
z+SimpleXMLRPCRequestHandler.accept_encodingsc             C   s   | j r| j| j kS dS d S )NT)Ú	rpc_pathsr6   )r!   r   r   r   Úis_rpc_path_validÐ  s    z,SimpleXMLRPCRequestHandler.is_rpc_path_validc             C   sÜ  | j ƒ s| jƒ  d S y”d}t| jd ƒ}g }x>|rjt||ƒ}| jj|ƒ}|sNP |j|ƒ |t|d ƒ8 }q.W dj	|ƒ}| j
|ƒ}|d krŒd S | jj|t| dd ƒ| jƒ}W nŽ tk
�r6 } zp| jdƒ t| jdƒoØ| jj�r| jd	t|ƒƒ tjƒ }	t|	jd
dƒd
ƒ}	| jd|	ƒ | jddƒ | jƒ  W Y d d }~X n¢X | jdƒ | jddƒ | jd k	�r°t|ƒ| jk�r°| jƒ jddƒ}
|
�r°yt|ƒ}| jddƒ W n tk
�r®   Y nX | jdtt|ƒƒƒ | jƒ  | jj|ƒ d S )Né
   i   zcontent-lengthr.   ó    r0   iô  Ú_send_traceback_headerzX-exceptionÚASCIIÚbackslashreplacezX-tracebackzContent-lengthÚ0éÈ   zContent-typeztext/xmlÚgzipr   zContent-Encodingi (  i    éÿÿÿÿ) rc   Ú
report_404ÚintrX   ÚminZrfileÚreadrL   ÚlenÚjoinÚdecode_request_contentÚserverr>   r   r6   rO   Úsend_responserB   rf   Úsend_headerÚstrÚ	tracebackÚ
format_excr3   Úend_headersÚencode_thresholdra   rY   r   ÚNotImplementedErrorÚwfileÚwrite)r!   Zmax_chunk_sizeZsize_remainingÚLZ
chunk_sizeÚchunkr4   r9   r_   ZtraceÚqr   r   r   Údo_POST×  sX    






z"SimpleXMLRPCRequestHandler.do_POSTc             C   sœ   | j jddƒjƒ }|dkr|S |dkrtyt|ƒS  tk
rR   | jdd| ƒ Y q„ tk
rp   | jddƒ Y q„X n| jdd| ƒ | jdd	ƒ | jƒ  d S )
Nzcontent-encodingZidentityrk   iõ  zencoding %r not supportedi�  zerror decoding gzip contentzContent-lengthri   )	rX   rY   Úlowerr   r|   ru   Ú
ValueErrorrv   rz   )r!   r4   r   r   r   r   rs     s    z1SimpleXMLRPCRequestHandler.decode_request_contentc             C   sF   | j dƒ d}| jddƒ | jdtt|ƒƒƒ | jƒ  | jj|ƒ d S )Ni”  s   No such pagezContent-typez
text/plainzContent-length)ru   rv   rw   rq   rz   r}   r~   )r!   r9   r   r   r   rm   /  s    
z%SimpleXMLRPCRequestHandler.report_404ú-c             C   s   | j jrtj| ||ƒ d S )N)rt   ÚlogRequestsr   Úlog_request)r!   ÚcodeÚsizer   r   r   r‡   8  s    z&SimpleXMLRPCRequestHandler.log_requestN)rT   rU   rl   )r…   r…   )r$   rQ   rR   rb   r{   ZwbufsizeZdisable_nagle_algorithmÚreÚcompileÚVERBOSEÚ
IGNORECASErZ   ra   rc   r‚   rs   rm   r‡   r   r   r   r   rS   ¬  s   	G	rS   c               @   s*   e Zd ZdZdZedddddfdd„ZdS )ÚSimpleXMLRPCServerTFNc             C   s,   || _ tj| |||ƒ tjj| |||ƒ d S )N)r†   r   r"   ÚsocketserverÚ	TCPServer)r!   ÚaddrÚrequestHandlerr†   r   r   Úbind_and_activater    r   r   r   r"   Q  s    zSimpleXMLRPCServer.__init__)r$   rQ   rR   Zallow_reuse_addressrf   rS   r"   r   r   r   r   rŽ   >  s
   rŽ   c               @   s<   e Zd Zedddddfdd„Zdd„ Zdd	„ Zdd
d„ZdS )ÚMultiPathXMLRPCServerTFNc          	   C   s2   t j| |||||||ƒ i | _|| _|p*d| _d S )Nzutf-8)rŽ   r"   Údispatchersr   r   )r!   r‘   r’   r†   r   r   r“   r    r   r   r   r"   b  s
    
zMultiPathXMLRPCServer.__init__c             C   s   || j |< |S )N)r•   )r!   r6   Z
dispatcherr   r   r   Úadd_dispatcherl  s    
z$MultiPathXMLRPCServer.add_dispatcherc             C   s
   | j | S )N)r•   )r!   r6   r   r   r   Úget_dispatcherp  s    z$MultiPathXMLRPCServer.get_dispatcherc             C   s|   y| j | j|||ƒ}W n^   tjƒ d d… \}}z2ttdd||f ƒ| j| jd�}|j| jdƒ}W d d  }}X Y nX |S )Né   r.   z%s:%s)r   r   r/   )	r•   r>   r1   r2   r   r   r   r   r3   )r!   r4   r5   r6   r9   r;   r<   r   r   r   r>   s  s    
z)MultiPathXMLRPCServer._marshaled_dispatch)NN)r$   rQ   rR   rS   r"   r–   r—   r>   r   r   r   r   r”   Z  s   r”   c               @   s0   e Zd Zddd„Zdd„ Zdd„ Zdd	d
„ZdS )ÚCGIXMLRPCRequestHandlerFNc             C   s   t j| |||ƒ d S )N)r   r"   )r!   r   r   r    r   r   r   r"   ‰  s    z CGIXMLRPCRequestHandler.__init__c             C   sP   | j |ƒ}tdƒ tdt|ƒ ƒ tƒ  tjjƒ  tjjj|ƒ tjjjƒ  d S )NzContent-Type: text/xmlzContent-Length: %d)r>   Úprintrq   r1   ÚstdoutÚflushÚbufferr~   )r!   Úrequest_textr9   r   r   r   Úhandle_xmlrpcŒ  s    

z%CGIXMLRPCRequestHandler.handle_xmlrpcc             C   sŽ   d}t j| \}}tjj|||dœ }|jdƒ}td||f ƒ tdtjj ƒ tdt|ƒ ƒ tƒ  t	j
jƒ  t	j
jj|ƒ t	j
jjƒ  d S )Ni�  )rˆ   ÚmessageÚexplainzutf-8zStatus: %d %szContent-Type: %szContent-Length: %d)r   Z	responsesÚhttprt   ZDEFAULT_ERROR_MESSAGEr3   rš   ZDEFAULT_ERROR_CONTENT_TYPErq   r1   r›   rœ   r�   r~   )r!   rˆ   r    r¡   r9   r   r   r   Ú
handle_get˜  s    


z"CGIXMLRPCRequestHandler.handle_getc             C   sz   |d kr$t jjdd ƒdkr$| jƒ  nRytt jjdd ƒƒ}W n ttfk
rV   d}Y nX |d krltjj	|ƒ}| j
|ƒ d S )NZREQUEST_METHODZGETZCONTENT_LENGTHr.   rl   )ÚosÚenvironrY   r£   rn   r„   Ú	TypeErrorr1   Ústdinrp   rŸ   )r!   rž   Zlengthr   r   r   Úhandle_request±  s    

z&CGIXMLRPCRequestHandler.handle_request)FNF)N)r$   rQ   rR   r"   rŸ   r£   r¨   r   r   r   r   r™   †  s   
r™   c               @   s:   e Zd Zdi i i fdd„Zdi i i dfdd„Zdd„ ZdS )ÚServerHTMLDocNc             C   s^  |p| j }g }d}tjdƒ}�x|j||ƒ}	|	s2P |	jƒ \}
}|j||||
… ƒƒ |	jƒ \}}}}}}|r�||ƒjddƒ}|jd||f ƒ n¦|r¸dt|ƒ }|jd|||ƒf ƒ n~|ràdt|ƒ }|jd|||ƒf ƒ nV|||d … d	k�r|j| j	||||ƒƒ n(|�r$|jd
| ƒ n|j| j	||ƒƒ |}q W |j|||d … ƒƒ dj
|ƒS )Nr   zM\b((http|ftp)://\S+[\w/]|RFC[- ]?(\d+)|PEP[- ]?(\d+)|(self\.)?((?:\w|\.)+))\bú"z&quot;z<a href="%s">%s</a>z'http://www.rfc-editor.org/rfc/rfc%d.txtz(http://www.python.org/dev/peps/pep-%04d/r.   ú(zself.<strong>%s</strong>rG   )ÚescaperŠ   r‹   ÚsearchÚspanrL   ÚgroupsÚreplacern   Znamelinkrr   )r!   Útextr¬   r   ÚclassesrD   rM   ÚhereÚpatternr[   ÚstartÚendÚallÚschemeZrfcZpepZselfdotr%   Zurlr   r   r   ÚmarkupÎ  s8    

 zServerHTMLDoc.markupc             C   s$  |r
|j pdd | }d}	d| j|ƒ| j|ƒf }
tj|ƒrrtj|ƒ}tj|jdd … |j|j|j	|j
| jd�}n<tj|ƒrªtj|ƒ}tj|j|j|j|j	|j
| jd�}nd}t|tƒrÒ|d pÂ|}|d pÎd}n
tj|ƒ}|
| |	oò| jd|	 ƒ }| j|| j|||ƒ}|�od	| }d
||f S )NrG   r…   z$<a name="%s"><strong>%s</strong></a>r.   )ÚannotationsÚformatvaluez(...)r   z'<font face="helvetica, arial">%s</font>z<dd><tt>%s</tt></dd>z<dl><dt>%s</dt>%s</dl>
)r$   r¬   ÚinspectZismethodZgetfullargspecZformatargspecÚargsZvarargsZvarkwZdefaultsrº   r»   Z
isfunctionÚ
isinstanceÚtuplerH   rI   Zgreyr¹   Ú	preformat)r!   Úobjectr%   Úmodr   r²   rD   ZclZanchorZnoteÚtitler½   ZargspecZ	docstringZdeclÚdocr   r   r   Ú
docroutine÷  s<    





zServerHTMLDoc.docroutinec             C   sÐ   i }x,|j ƒ D ] \}}d| ||< || ||< qW | j|ƒ}d| }| j|ddƒ}| j|| j|ƒ}	|	old|	 }	|d|	  }g }
t|j ƒ ƒ}x&|D ]\}}|
j| j|||d�ƒ q�W || jddd	d
j	|
ƒƒ }|S )Nz#-z)<big><big><strong>%s</strong></big></big>z#ffffffz#7799eez<tt>%s</tt>z
<p>%s</p>
)r   ZMethodsz#eeaa77rG   )
Úitemsr¬   Zheadingr¹   rÀ   rC   rL   rÅ   Z
bigsectionrr   )r!   Úserver_nameZpackage_documentationrD   ZfdictÚkeyÚvalueÚheadÚresultrÄ   ÚcontentsZmethod_itemsr   r   r   Ú	docserver$  s"    
zServerHTMLDoc.docserver)r$   rQ   rR   r¹   rÅ   rÍ   r   r   r   r   r©   Ë  s   ),r©   c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚXMLRPCDocGeneratorc             C   s   d| _ d| _d| _d S )NzXML-RPC Server DocumentationzGThis server exports the following methods through the XML-RPC protocol.)rÇ   Úserver_documentationÚserver_title)r!   r   r   r   r"   D  s    zXMLRPCDocGenerator.__init__c             C   s
   || _ d S )N)rÐ   )r!   rÐ   r   r   r   Úset_server_titleL  s    z#XMLRPCDocGenerator.set_server_titlec             C   s
   || _ d S )N)rÇ   )r!   rÇ   r   r   r   Úset_server_nameQ  s    z"XMLRPCDocGenerator.set_server_namec             C   s
   || _ d S )N)rÏ   )r!   rÏ   r   r   r   Úset_server_documentationV  s    z+XMLRPCDocGenerator.set_server_documentationc             C   sþ   i }xÌ| j ƒ D ]À}|| jkr(| j| }nž| jd k	rÆd d g}t| jdƒrV| jj|ƒ|d< t| jdƒrr| jj|ƒ|d< t|ƒ}|dkrˆ|}qÆt| jdƒsÀyt| j|ƒ}W qÄ tk
r¼   |}Y qÄX qÆ|}n |||< qW t	ƒ }|j
| j| j|ƒ}|jtj| jƒ|ƒS )NÚ_get_method_argstringr   rF   r.   r0   )NN)r(   r   r   rB   rÔ   rF   r¿   r   r   r©   rÍ   rÇ   rÏ   ZpageÚhtmlr¬   rÐ   )r!   rD   rE   r8   Zmethod_infoZ
documenterZdocumentationr   r   r   Úgenerate_html_documentation[  s8    


z.XMLRPCDocGenerator.generate_html_documentationN)r$   rQ   rR   r"   rÑ   rÒ   rÓ   rÖ   r   r   r   r   rÎ   =  s
   rÎ   c               @   s   e Zd Zdd„ ZdS )ÚDocXMLRPCRequestHandlerc             C   sf   | j ƒ s| jƒ  d S | jjƒ jdƒ}| jdƒ | jddƒ | jdtt|ƒƒƒ | j	ƒ  | j
j|ƒ d S )Nzutf-8rj   zContent-typez	text/htmlzContent-length)rc   rm   rt   rÖ   r3   ru   rv   rw   rq   rz   r}   r~   )r!   r9   r   r   r   Údo_GET˜  s    
zDocXMLRPCRequestHandler.do_GETN)r$   rQ   rR   rØ   r   r   r   r   r×   Ž  s   
r×   c               @   s"   e Zd Zedddddfdd„ZdS )ÚDocXMLRPCServerTFNc          	   C   s&   t j| |||||||ƒ tj| ƒ d S )N)rŽ   r"   rÎ   )r!   r‘   r’   r†   r   r   r“   r    r   r   r   r"   ²  s    zDocXMLRPCServer.__init__)r$   rQ   rR   r×   r"   r   r   r   r   rÙ   ª  s   rÙ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚDocCGIXMLRPCRequestHandlerc             C   sT   | j ƒ jdƒ}tdƒ tdt|ƒ ƒ tƒ  tjjƒ  tjjj|ƒ tjjjƒ  d S )Nzutf-8zContent-Type: text/htmlzContent-Length: %d)	rÖ   r3   rš   rq   r1   r›   rœ   r�   r~   )r!   r9   r   r   r   r£   ¿  s    
z%DocCGIXMLRPCRequestHandler.handle_getc             C   s   t j| ƒ tj| ƒ d S )N)r™   r"   rÎ   )r!   r   r   r   r"   Ï  s    
z#DocCGIXMLRPCRequestHandler.__init__N)r$   rQ   rR   r£   r"   r   r   r   r   rÚ   º  s   rÚ   Ú__main__c               @   s"   e Zd Zdd„ ZG dd„ dƒZdS )ÚExampleServicec             C   s   dS )NZ42r   )r!   r   r   r   ÚgetDataØ  s    zExampleService.getDatac               @   s   e Zd Zedd„ ƒZdS )zExampleService.currentTimec               C   s
   t j jƒ S )N)ÚdatetimeZnowr   r   r   r   ÚgetCurrentTimeÜ  s    z)ExampleService.currentTime.getCurrentTimeN)r$   rQ   rR   Ústaticmethodrß   r   r   r   r   ÚcurrentTimeÛ  s   rá   N)r$   rQ   rR   rÝ   rá   r   r   r   r   rÜ   ×  s   rÜ   Ú	localhosté@  c             C   s   | | S )Nr   )ÚxÚyr   r   r   Ú<lambda>â  s    ræ   Úadd)r   z&Serving XML-RPC on localhost port 8000zKIt is advisable to run this example server within a secure, closed network.z&
Keyboard interrupt received, exiting.)T)râ   rã   )-Zxmlrpc.clientr   r   r   r   r   Zhttp.serverr   rÕ   r¢   r�   r1   r¤   rŠ   rH   r¼   rx   ZfcntlÚImportErrorr   r   r   rS   r�   rŽ   r”   r™   ZHTMLDocr©   rÎ   r×   rÙ   rÚ   r$   rÞ   rÜ   rt   r&   Úpowr#   r-   rš   Zserve_foreverÚKeyboardInterruptÚexitr   r   r   r   Ú<module>k   s^   

   ,ErQ
	

