U
    Ĺho                     @   sb   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 e eZG dd deZdS )    N)dumps)	urlencodeurljoin)HTTPAdapter)Retryc                   @   s   e Zd Zd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ejfddZd#ddZdd Zd$ddZd%d d!ZdS )&
Connectionzapplication/json)zContent-TypeZAcceptapilatestTNK   c                 C   sR   || _ || _|| _|| _t|| _|d kr6t | _n|| _| 	| | 
  d S N)urlapi_rootapi_version
verify_sslinttimeoutrequestsZSession_session_create_token_session_set_session_retries)selfr   r   r   r   Zsessiontokenr    r   ,./modules/kaiten/kaiten_client/connection.py__init__   s    


zConnection.__init__c                 C   s   | S r   r   r   r   r   r   	__enter__*   s    zConnection.__enter__c                 G   s   |    d S r   )close)r   _r   r   r   __exit__-   s    zConnection.__exit__c                 C   s
   | j  S r   )r   r   r   r   r   r   r   0   s    zConnection.closec                 C   s   | j j||i d S r   )r   headersupdate)r   keyvaluer   r   r   _update_header3   s    zConnection._update_headerc                 C   s   |  ddj|d d S )NZAuthorizationzBearer {token})r   )r$   format)r   r   r   r   r   r   6   s    z Connection._create_token_sessionc              	   C   sF   t ddddddddgdd	}t|d
}| jd| | jd| d S )N   i  i  i  i  i  i     )totalstatusZstatus_forcelistZbackoff_factor)Zmax_retrieszhttp://zhttps://)r   r   r   Zmount)r   ZretriesZhttp_adapterr   r   r   r   9   s    
zConnection._set_session_retriesc                 C   sT   |p| j }dj|ddd | D |s.dndt||d}tj||d d S )	Nz5curl --silent -X {method} -H {headers} {data} '{url}'z -H c                 S   s   g | ]\}}d  ||qS )z
'{0}: {1}')r%   ).0r"   r#   r   r   r   
<listcomp>O   s   z0Connection.logger_curl_debug.<locals>.<listcomp> z--data '{0}')methodr    datar   )levelmsg)default_headersr%   joinitemsr   loggerlog)r   r-   r   r.   r    r/   messager   r   r   logger_curl_debugD   s    

	zConnection.logger_curl_debugc                 C   s6   |d kr| j }|d kr| j}ddd |||fD S )N/c                 s   s    | ]}|d k	r| dV  qd S )Nr8   )strip)r*   sr   r   r   	<genexpr>]   s      z*Connection.resource_url.<locals>.<genexpr>)r   r   r2   )r   resourcer   r   r   r   r   resource_urlX   s
    zConnection.resource_urlc                 C   s   t | j|S r   )r   r   )r   pathr   r   r   
url_joiner_   s    zConnection.url_joinerGETr8   c              	   C   s   |  |}d|krdnd}|r4|r,|d7 }n|d7 }|rH|t|pBi 7 }|sPd nt|}|s`d nt|}	| j|||rx|n|	|d |p| j}| jj|||||| j| jd}
d|
_	t
d|||
j|
j t
d	|
j |
  |
S )
N?TF&)r-   r   r.   r    )r-   r   r    r.   jsonr   Zverifyzutf-8zHTTP: {} {} -> {} {}zHTTP: Response text -> {})r?   r   r   r7   r1   r   requestr   r   encodingr4   debugr%   Zstatus_codereasontextZraise_for_status)r   r-   r>   r.   rC   paramsr    r   Zparams_already_in_urlZ	json_dumpresponser   r   r   rD   b   sL    	



	zConnection.requestc              
   C   sb   | j d|||d}|jsd S z
| W S  tk
r\ } zt| |j W Y S d }~X Y nX d S )Nr@   )r>   rI   r.   )rD   rH   rC   	Exceptionr4   error)r   r>   rI   r.   rJ   er   r   r   get   s    

zConnection.get)r   r	   TNNr
   )NN)r@   r8   NNNN)NN)__name__
__module____qualname__r1   r   r   r   r   r$   r   r   loggingDEBUGr7   r=   r?   rD   rN   r   r   r   r   r      s@         


      
7  r   )rR   r   rC   r   urllib.parser   r   Zrequests.adaptersr   Zurllib3.util.retryr   Z	getLoggerrO   r4   objectr   r   r   r   r   <module>   s   
