U
    hD                     @   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   sD   t 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     )totalZ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>N   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_debugC   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 )Nr7   )strip)r)   sr   r   r   	<genexpr>\   s      z*Connection.resource_url.<locals>.<genexpr>)r   r   r1   )r   resourcer   r   r   r   r   resource_urlW   s
    zConnection.resource_urlc                 C   s   t | j|S r   )r   r   )r   pathr   r   r   
url_joiner^   s    zConnection.url_joinerGETr7   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|
_	|

  |
S )N?TF&)r,   r   r-   r    )r,   r   r    r-   jsonr   Zverifyzutf-8)r>   r   r   r6   r0   r   requestr   r   encodingZraise_for_status)r   r,   r=   r-   rB   paramsr    r   Zparams_already_in_urlZ	json_dumpresponser   r   r   rC   a   s:    	



	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=   rE   r-   )rC   textrB   	Exceptionr3   error)r   r=   rE   r-   rF   er   r   r   get   s    

zConnection.get)r   r	   TNNr
   )NN)r?   r7   NNNN)NN)__name__
__module____qualname__r0   r   r   r   r   r$   r   r   loggingDEBUGr6   r<   r>   rC   rK   r   r   r   r   r      s@         


      
.  r   )rO   r   rB   r   urllib.parser   r   Zrequests.adaptersr   Zurllib3.util.retryr   Z	getLoggerrL   r3   objectr   r   r   r   r   <module>   s   
