a
    »ÏOc¡  ã                   @   sd   d dl Z d dlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
ƒZ	G dd„ dƒZ
dS )é    N)Úparsec                   @   s   e Zd ZdS )ÚNotFoundExceptionN©Ú__name__Ú
__module__Ú__qualname__© r   r   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/twentyc/rpc/client.pyr      s   r   c                   @   s   e Zd ZdS )ÚPermissionDeniedExceptionNr   r   r   r   r	   r
      s   r
   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚInvalidRequestExceptionc                    s   t ƒ  | |¡ || _d S ©N)ÚsuperÚ__init__Úextra)ÚselfÚmsgr   ©Ú	__class__r   r	   r      s    z InvalidRequestException.__init__)r   r   r   r   Ú__classcell__r   r   r   r	   r      s   r   c                   @   s€   e Z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d„ Zd"dd„Zdd„ Zdd„ Zdd„ Zdd „ ZdS )#Ú
RestClientc                 K   sT   || _ t | j ¡| _d| _d| _d| _d| _|D ]}t| |ƒr0t	| ||| ƒ q0dS )z 
        RESTful client
        NF)
Úurlr   ÚurlparseÚ_urlÚuserÚpasswordÚtimeoutÚverboseÚhasattrÚsetattr)r   r   ÚkwargsÚkr   r   r	   r      s    
zRestClient.__init__c                 K   s   t  | jjf i |¤Ž¡S r   )r   Ú
urlunparser   Ú_replace©r   r   r   r   r	   Ú
url_update'   s    zRestClient.url_updater   ÚGETNc           	      C   sd   ddi}d}| j r| j | jf}|sN|r>| j› d|› d|› �}n| j› d|› �}tj||||||d�S )z7
        send the request, return response obj
        ÚAcceptzapplication/jsonNú/)ÚparamsÚdataÚauthÚheaders)r   r   r   ÚrequestsÚrequest)	r   ÚtypÚidÚmethodr(   r)   r   r+   r*   r   r   r	   Ú_request*   s    ÿzRestClient._requestc                 C   s¦   |   d| ¡ | di ¡ dd¡}|jdk r�|jdkrJtd|j|f ƒ‚nF|jdks^|jd	krrtd|j|f ƒ‚n|jd
kr�td|j|f |ƒ‚td|j|f ƒ‚d S )Nz	=====> %sÚmetaÚerrorÚUnknowniX  i”  z%d %si‘  i“  i�  z%d Internal error: %s)ÚlogÚgetÚstatus_coder   r
   r   Ú	Exception)r   Úresr)   Úerrr   r   r	   Ú_throw?   s    


zRestClient._throwc                 C   sR   z|  ¡ }W n ty"   i }Y n0 |jdk rB|s6g S | dg ¡S |  ||¡ d S )Ni,  r)   )ÚjsonÚ
ValueErrorr7   r6   r;   )r   r9   r)   r   r   r	   Ú_loadM   s    

zRestClient._loadc                 C   sJ   d|vrd|v r|d |d< d|v r*|d= d|v r8|d= d|v rF|d= d S )Nr/   ÚpkZ_revZ_idr   ©r   r)   r   r   r	   Ú_mangle_dataZ   s    zRestClient._mangle_datac                 C   s   | j rt|ƒ d S r   )r   Úprint)r   r   r   r   r	   r5   d   s    zRestClient.logc                 K   s   |   | j||d�¡S )z¢
        List all of type
        Valid arguments:
            skip : number of records to skip
            limit : number of records to limit request to
        )r(   ©r>   r1   )r   r.   r   r   r   r	   Úallh   s    zRestClient.allc                 K   s   |   | j|||d�¡S )z!
        Load type by id
        )r/   r(   rC   ©r   r.   r/   r   r   r   r	   r6   q   s    zRestClient.getFc              
   C   sÊ   | j |d|d�}|jdkrrz| ¡ }|  ||¡ W n> typ } z&t|tƒsZ|  |i ¡ n‚ W Y d}~n
d}~0 0 |j dd¡}|rª| 	d¡rª|  
| j d| j|d�d�¡S |r¶| ¡ S |  
| j d|d�¡S )	z¡
        Create new type
        Valid arguments:
            skip : number of records to skip
            limit : number of records to limit request to
        ÚPOST)r0   r)   éÉ   NÚlocationr'   )Úpath)r   )r1   r7   r<   r;   r=   Ú
isinstancer   r+   r6   Ú
startswithr>   r$   )r   r.   r)   Zreturn_responser9   ÚeÚlocr   r   r	   Úcreatew   s    

zRestClient.createc                 K   s   |   | j||d|d�¡S )z9
        update just fields sent by keyword args
        ÚPUT©r/   r0   r)   rC   rE   r   r   r	   Úupdate‘   s    zRestClient.updatec                 C   s0   d|v r$|   | j||d d|d�¡S |  ||¡S )zH
        Save the dataset pointed to by data (create or update)
        r/   rO   rP   )r>   r1   rN   )r   r.   r)   r   r   r	   Úsave—   s
    ÿzRestClient.savec                 C   s   |   | j||dd�¡S )z"
        remove typ by id
        ÚDELETE)r/   r0   rC   )r   r.   r/   r   r   r	   Úrm¢   s    zRestClient.rmc                 C   s
   t | |ƒS r   )ÚTypeWrap)r   r.   r   r   r	   Ú	type_wrap¨   s    zRestClient.type_wrap)r   r%   NNN)F)r   r   r   r   r$   r1   r;   r>   rA   r5   rD   r6   rN   rQ   rR   rT   rV   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 )rU   c                 C   s   || _ || _d S r   )Úclientr.   )r   rW   r.   r   r   r	   r   ­   s    zTypeWrap.__init__c                 K   s   | j j| jfi |¤ŽS )z
        List all
        )rW   rD   r.   r#   r   r   r	   rD   ±   s    zTypeWrap.allc                 C   s   | j  | j|¡S )z
        Load by id
        )rW   r6   r.   ©r   r/   r   r   r	   r6   ·   s    zTypeWrap.getc                 C   s   | j  | j|¡S )z
        Save object
        )rW   rR   r.   r@   r   r   r	   rR   ½   s    zTypeWrap.savec                 C   s   | j  | j|¡S )z
        remove by id
        )rW   rT   r.   rX   r   r   r	   rT   Ã   s    zTypeWrap.rmN)r   r   r   r   rD   r6   rR   rT   r   r   r   r	   rU   ¬   s
   rU   )r,   Úurllibr   ÚLookupErrorr   ÚIOErrorr
   r=   r   r   rU   r   r   r   r	   Ú<module>   s    