U
    ¨l©g  ã                   @   sz   d dl Z ddlmZ dd„ Zdd„ ZG dd	„ d	eƒZG d
d„ de jƒZdd„ Z	dd„ Z
dd„ Zdd„ ZG dd„ deƒZdS )é    Né   )ÚSearpcErrorc                 C   sT   zt  | ¡}W n   tdƒ‚Y nX d|kr8t|d ƒ‚d|krH|d S tdƒ‚d S ©NzInvalid response formatZerr_codeÚerr_msgZret©ÚjsonÚloadsr   ©Úret_strÚdicts© r   úc/opt/seafile-pro-server-build/seafile-server/seafile/lib/python3.8/site-packages/pysearpc/client.pyÚ	_fret_int   s    r   c                 C   sT   zt  | ¡}W n   tdƒ‚Y nX d|kr8t|d ƒ‚d|krH|d S tdƒ‚d S r   r   r	   r   r   r   Ú_fret_string   s    r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
_SearpcObjz/A compact class to emulate gobject.GObject
    c                 C   s:   i }|D ] }|| }|  dd¡}|||< q| | _|| _d S )Nú-Ú_)ÚreplaceZpropsÚ_dict)Úselfr   Znew_dictÚkeyÚvalueZnew_keyr   r   r   Ú__init__#   s    
z_SearpcObj.__init__c                 C   s    z| j | W S    Y d S X d S ©N)r   )r   r   r   r   r   Ú__getattr__.   s    z_SearpcObj.__getattr__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r       s   r   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSearpcObjEncoderc                    s    t |tƒstt| ƒ |¡S |jS r   )Ú
isinstancer   Úsuperr   Údefaultr   )r   Úobj©Ú	__class__r   r   r"   5   s    
zSearpcObjEncoder.default)r   r   r   r"   Ú__classcell__r   r   r$   r   r   4   s   r   c                 C   sT   zt  | ¡}W n   tdƒ‚Y nX d|kr8t|d ƒ‚|d rLt|d ƒS d S d S r   )r   r   r   r   r	   r   r   r   Ú	_fret_obj:   s    r'   c                 C   sd   zt  | ¡}W n   tdƒ‚Y nX d|kr8t|d ƒ‚g }|d r`|d D ]}| t|ƒ¡ qL|S r   )r   r   r   Úappendr   )r
   r   ÚlZeltr   r   r   Ú_fret_objlistH   s    r*   c                 C   sP   zt  | ¡}W n   tdƒ‚Y nX d|kr8t|d ƒ‚|d rH|d S d S d S r   r   r	   r   r   r   Ú
_fret_jsonX   s    r+   c                    s   ‡ fdd„}|S )Nc                    s|   ˆdkrd ‰ n\ˆdkrt ‰ nNˆdkr*t‰ n@ˆdkr8t‰ n2ˆdkrFt‰ n$ˆdkrTt‰ nˆdkrbt‰ ntdƒ‚‡ ‡fd	d
„}|S )NZvoidÚobjectZobjlistÚintZint64Ústringr   zInvial return typec                    s4   ˆj gt|ƒ }t |¡}|  |¡}ˆ r0ˆ |ƒS d S r   )r   Úlistr   ÚdumpsÚcall_remote_func_sync)r   ÚargsZarrayÚ	fcall_strr
   ©ZfretÚfuncr   r   Únewfuncz   s
    

z.searpc_func.<locals>.decorate.<locals>.newfunc)r'   r*   r   r   r+   r   )r5   r6   ©Úret_typer4   r   Údecorateh   s"    zsearpc_func.<locals>.decorater   )r8   Zparam_typesr9   r   r7   r   Úsearpc_funcf   s    r:   c                   @   s   e Zd Zdd„ ZdS )ÚSearpcClientc                 C   s
   t ƒ ‚d S r   )ÚNotImplementedError)r   r3   r   r   r   r1   ˆ   s    z"SearpcClient.call_remote_func_syncN)r   r   r   r1   r   r   r   r   r;   †   s   r;   )r   Úcommonr   r   r   r,   r   ZJSONEncoderr   r'   r*   r+   r:   r;   r   r   r   r   Ú<module>   s    