U
    ¨l©gJ  ã                   @   s>   d dl Z ddlmZ G dd„ deƒZG dd„ deƒZeƒ ZdS )é    Né   )ÚSearpcErrorc                   @   s   e Zd Zdd„ ZdS )ÚSearpcServicec                 C   s   || _ i | _d S ©N)ÚnameÚ
func_table)Úselfr   © r	   úc/opt/seafile-pro-server-build/seafile-server/seafile/lib/python3.8/site-packages/pysearpc/server.pyÚ__init__   s    zSearpcService.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r	   r	   r	   r
   r      s   r   c                   @   s6   e Zd Zdd„ Zdd„ Zddd„Zdd	„ Zd
d„ ZdS )ÚSearpcServerc                 C   s
   i | _ d S r   )Úservices)r   r	   r	   r
   r      s    zSearpcServer.__init__c                 C   s   t |ƒ}|| j|< d S r   )r   r   )r   ÚsvcnameÚservicer	   r	   r
   Úcreate_service   s    zSearpcServer.create_serviceNc                 C   s&   | j | }|d kr|j}||j|< d S r   )r   r   r   )r   r   ÚfnÚfnamer   r	   r	   r
   Úregister_function   s    
zSearpcServer.register_functionc           	   
   C   sŠ   zt  |¡}W n2 tk
r@ } ztdt|ƒ ƒ‚W 5 d}~X Y nX | j| }|d }|j |d¡}|dkrvtd| ƒ‚||dd… Ž }|S )zinput str -> output strzbad call str: Nr   zNo such funtion %sr   )ÚjsonÚloadsÚ	Exceptionr   Ústrr   r   Úget)	r   r   ÚfcallstrÚargvÚer   r   r   Úretr	   r	   r
   Ú_call_function   s    "
zSearpcServer._call_functionc              
   C   sT   z|   ||¡}W n0 tk
r@ } zdt|ƒdœ}W 5 d }~X Y n
X d|i}t |¡S )Ni+  )Zerr_codeÚerr_msgr   )r    r   r   r   Údumps)r   r   r   ZretValr   r   r	   r	   r
   Úcall_function)   s     zSearpcServer.call_function)N)r   r   r   r   r   r   r    r#   r	   r	   r	   r
   r   
   s
   
r   )r   Úcommonr   Úobjectr   r   Zsearpc_serverr	   r	   r	   r
   Ú<module>   s   )