U
    \i0                     @   sj   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
 d dlT e eZG dd deZdS )	    N)dumps)	urlencodeurljoin)HTTPAdapter)Retry)*c                   @   s   e Zd Zdd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-TypeAcceptz*/*z
keep-alive)r	   r   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__0   s    zConnection.__enter__c                 G   s   |    d S r   )close)r   _r   r   r   __exit__3   s    zConnection.__exit__c                 C   s
   | j  S r   )r   r   r   r   r   r   r   6   s    zConnection.closec                 C   s   | j j||i d S r   )r   headersupdate)r   keyvaluer   r   r   _update_header9   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   <   s    z Connection._create_token_sessionc                 C   s@   t tjtjtjdd}t|d}| jd| | jd| d S )N   )totalstatusZstatus_forcelistZbackoff_factor)Zmax_retrieszhttp://zhttps://)r   ZconfigZIMPORT_REQUEST_RETRY_TOTALZ!IMPORT_REQUEST_RETRY_STATUS_CODESr   r   Zmount)r   ZretriesZhttp_adapterr   r   r   r   ?   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>U   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"   r0   messager   r   r   logger_curl_debugJ   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 )Nr9   )strip)r+   sr   r   r   	<genexpr>c   s      z*Connection.resource_url.<locals>.<genexpr>)r   r   r3   )r   resourcer   r   r   r   r   resource_url^   s
    zConnection.resource_urlc                 C   s   t | j|S r   )r   r   )r   pathr   r   r   
url_joinere   s    zConnection.url_joinerGETr9   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   r8   r2   r   requestr   r   encodingr5   debugr'   Zstatus_codereasontextZraise_for_status)r   r.   r?   r/   rD   paramsr"   r   Zparams_already_in_urlZ	json_dumpresponser   r   r   rE   h   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 )NrA   )r?   rJ   r/   )rE   rI   rD   	Exceptionr5   error)r   r?   rJ   r/   rK   er   r   r   get   s    

zConnection.get)r
   r   TNNr   )NN)rA   r9   NNNN)NN)__name__
__module____qualname__r2   Zdownload_headersr   r   r!   r   r&   r   r   loggingDEBUGr8   r>   r@   rE   rO   r   r   r   r   r      sF         


      
7  r   )rS   r   rD   r   urllib.parser   r   Zrequests.adaptersr   Zurllib3.util.retryr   Zcmf.includeZ	getLoggerrP   r5   objectr   r   r   r   r   <module>   s   
