
    SIg                         d dl Z d dlmZ d dlmZmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ  e j        e          Z G d d	e          ZdS )
    N)dumps)	urlencodeurljoin)	HTTPError)HTTPAdapter)check_header_validity)Retryc            
           e Zd ZddddZdddddddg d	d
df
dZd Zd Zd Zd Zd Z	e
d             Zddej        fdZd Zd ZddZ	 	 	 	 	 	 ddZ	 	 ddZ	 	 	 d dZd ZdS )!
Connectionzapplication/jsonzno-check)AcceptContent-TypezCache-ControlNapiZ   TF)i  i  i  x      c           	      \   || _         || _        t          |          | _        || _        t          j                    | _        |rzt          t          j	        
                    d          d                   dk    rDt          d |d |	dd|
          }| j                            | j         t          |                     || j        _        |r|r|                     ||           n||                     |           | j        j                                        D ]}t'          |           d S )N.r         )totalstatusallowed_methodsstatus_forcelistbackoff_factorbackoff_jitterbackoff_max)max_retries)urlapi_rootinttimeout
verify_sslrequestsSession_sessionurllib3__version__splitr	   mountr   verify_create_basic_session_create_token_sessionheadersitemsr   )selfr   usernamepasswordtokenr   r!   r"   backoff_and_retryretry_status_codesmax_backoff_secondsmax_backoff_retriesretriesheaders                 0./modules/youtrack/youtrack_client/connection.py__init__zConnection.__init__   s>     7||$ (** 
	LW%8%>%>s%C%CA%F!G!G1!L!L* $!3  /  G M+'*J*J*JKKK) 	. 	.&&x::::&&u---m+1133 	* 	*F!&))))	* 	*    c                     | S N r/   s    r9   	__enter__zConnection.__enter__@   s    r;   c                 .    |                                   d S r=   )close)r/   _s     r9   __exit__zConnection.__exit__C   s    

r;   c                 "    ||f| j         _        d S r=   )r%   auth)r/   r0   r1   s      r9   r+   z Connection._create_basic_sessionF   s    &1r;   c                 8    |                      dd|            d S )NAuthorizationzBearer )_update_header)r/   r2   s     r9   r,   z Connection._create_token_sessionI   s'    O->u->->?????r;   c                 H    | j         j                            ||i           d S r=   )r%   r-   update)r/   keyvalues      r9   rI   zConnection._update_headerL   s%    $$c5\22222r;   c                     	 |                                  S # t          $ r t                              d           Y d S t          $ r%}t                              |           Y d }~d S d }~ww xY w)Nz!Received response with no content)json
ValueErrorloggerdebug	Exceptionerror)responsees     r9   _response_handlerzConnection._response_handlerO   s|    	==??" 	 	 	LL<===44 	 	 	LLOOO44444	s    $A+	A+A&&A+c           	      (   |p| j         }d                    |d                    d |                                D                       |sdn!d                    t	          |                    |          }t
                              ||           d S )Nz5curl --silent -X {method} -H {headers} {data} '{url}'z -H c                 @    g | ]\  }}d                      ||          S )z
'{0}: {1}')format).0rL   rM   s      r9   
<listcomp>z0Connection.logger_curl_debug.<locals>.<listcomp>e   s<     ! ! !C ##C//! ! !r;    z--data '{0}')methodr-   datar   )levelmsg)default_headersrZ   joinr.   r   rQ   log)r/   r^   r   r_   r-   r`   messages          r9   logger_curl_debugzConnection.logger_curl_debugZ   s     1T1IPPKK ! !")--//! ! !    G^%:%:5;;%G%G Q 
 
 	

G
,,,,,r;   c                 4    | j                                         S r=   )r%   rB   r?   s    r9   rB   zConnection.closen   s    }""$$$r;   c                 ,    t          | j        |          S r=   )r   r   )r/   paths     r9   	build_urlzConnection.build_urlq   s    tx&&&r;   c                    t                               d|           |                     |          }|                     d|           | j                            d|d| j        | j                  }|                    d          S )NzStream GET %sGET)r^   r   T)r^   r   streamr!   r*   i    )	rQ   inforj   rf   r%   requestr!   r"   iter_content)r/   ri   paramsr   rU   s        r9   rm   zConnection.streamt   s    OT***nnT"" 	 	
 	
 	
 =((L? ) 
 
 $$X...r;   rl   /c           	         |                      |          }d|v rdnd}|r|r|dz  }n|dz  }|r|t          |pi           z  }|sd nt          |          }|sd nt          |          }	|                     |||r|n|	|           |p| j        }| j                            |||||| j        | j                  }
d|
_	        | 
                    |
           |
S )N?TF&)r^   r   r_   r-   )r^   r   r-   r_   rO   r!   r*   zutf-8)rj   r   r   rf   rb   r%   ro   r!   r"   encodingraise_for_status)r/   r^   ri   r_   rO   rq   r-   r   params_already_in_url	json_dumprU   s              r9   ro   zConnection.request   s*    nnT""(+s

 	$ s
s
 	+9V\r***C0ttU4[[ $5DD%++	,9	 	 	
 	
 	
 1T1=((L? ) 
 
 $h'''r;   c                     |                      d|||          }|j        sd S 	 |                                S # t          $ r+}t                              |           |j        cY d }~S d }~ww xY w)Nrl   )ri   rq   r_   )ro   textrO   rS   rQ   rT   )r/   ri   rq   r_   rU   rV   s         r9   getzConnection.get   s     <<	   
 
 } 	4	!==??" 	! 	! 	!LLOOO=      	!s   8 
A- A("A-(A-c                 `    |                      d||||          }|                     |          S )NPOST)ri   r_   rO   rq   )ro   rW   )r/   ri   r_   rO   rq   rU   s         r9   postzConnection.post   sA     <<   
 
 %%h///r;   c                 $   |j         dk    r/|j                            d          dk    rt          d|          d|j         cxk    rdk     rn n	 |                                }|                    d          }|                    d	          }d
                    ||          }t          ||          # t          $ r9}t                              |           |	                                 Y d }~d S d }~ww xY w|	                                 d S )Ni  r   zapplication/json;charset=UTF-8zUnauthorized (401))rU   i  iX  rT   error_descriptionz{}: {})
status_coder-   r|   r   rO   rZ   rS   rQ   rT   rw   )r/   rU   jrT   r   	error_msgrV   s          r9   rw   zConnection.raise_for_status   s1    C'' $$^448XXX08DDDD(&,,,,,,,,,	>MMOOg$%EE*=$>$>!$OOE3DEE	
  	H====	  , , ,Q))+++++++++, %%'''''s   AB6 6
C9 .C44C9r=   )rl   rr   NNNN)NN)NNN)__name__
__module____qualname__rb   r:   r@   rD   r+   r,   rI   staticmethodrW   loggingDEBUGrf   rB   rj   rm   ro   r|   r   rw   r>   r;   r9   r   r      s       $*# O *??(* (* (* (*T    2 2 2@ @ @3 3 3   \ m- - - -(% % %' ' '/ / / /$ ) ) ) )\ 	! ! ! !0 0 0 0 0"( ( ( ( (r;   r   )r   rO   r   urllib.parser   r   r#   r&   r   requests.adaptersr   requests.utilsr   urllib3.utilr	   	getLoggerr   rQ   objectr   r>   r;   r9   <module>r      s           + + + + + + + +         ) ) ) ) ) ) 0 0 0 0 0 0      		8	$	$Y( Y( Y( Y( Y( Y( Y( Y( Y( Y(r;   