o
    ic\                     @   s  d Z ddlZddlmZ ddlZddlmZ ddlZzddlZdZ	W n e
y1   dZ	e ZY nw ddl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 ejje	ddZdZejdddd Zefdee fddZdef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%ej&d(dd)d*d*d+d,gd-Z'd.d/ Z(d0d1 Z)d2d3 Z*d4d5 Z+d6d7 Z,d8d9 Z-d:d; Z.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dDdE Z3dFefdGdHZ4eej5j6ej7dIddJdKdL Z8eej5j6ej7dIddJdMdN Z9eej5j6ej7dIddJdOdP Z:eej5j6ej7dIddJdQdR Z;eej5j6ej7dIddJdSdT Z<eej5j6ej7dIddJdUdV Z=eej5j6ej7dIddJdWdX Z>eej5j6ej7dIddJdYdZ Z?dS )\zTests for http retries.    N)Sequence)mockFT)credentials   )_api_client)errors)typesz(aiohttp is not installed, skipping test.)reason)    i  i  i    )autousec                   c   s    d V  dt _d S )NF)
api_clienthas_aiohttp r   r   d/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/google/genai/tests/client/test_retries.pyreset_has_aiohttp6   s   
r   retried_codesc                    s    fddt ddD S )Nc                    s   g | ]}| vr|qS r   r   ).0coder   r   r   
<listcomp>=   s    z _final_codes.<locals>.<listcomp>d   iX  )ranger   r   r   r   _final_codes<   s   r   r   c                 C   s   t j| dt| iddS )Nstatus-code    )status_codeheaderscontent)httpxResponsestr)r   r   r   r   _httpx_response@   s
   
r#   c                  C   sD   t d } t|  ddhksJ | d jdksJ | d s J d S )Nstopreraise   )r   
retry_argssetkeysmax_attempt_number)argsr   r   r   test_retry_args_disabledK   s   
r,   c                  C   s<  t t } t|  h dksJ | d jdksJ | d }|jdks'J |jdks.J |j	dks5J |j
dks<J | d }tD ](}ztjt| J d
 tjyj } z||s`J W Y d }~qBd }~ww t D ]-}z
tjt| W n tjy } z||rJ W Y d }~nd }~ww | d sJ qnd S )N>   r$   waitretryr%   before_sleepr$      r-      r&   <   r.   FExpected APIError to be raised.r%   )r   r'   r   HttpRetryOptionsr(   r)   r*   exp_baseinitialjittermax_RETRIED_CODESr   APIErrorraise_for_responser#   	predicater   )r+   r-   r.   r   er   r   r   %test_retry_args_enabled_with_defaultsS   s4   
r>   c                     s   g   fdd} t jdi tt }z||  J d tjy'   Y nw t dks0J  d  d  t	j
ddks@J  d	  d  t	j
d	dksPJ  d
  d	  t	j
ddks`J  d  d
  t	j
ddkspJ d S )Nc                     s$   t j  }  |  tjtd)Nr   )datetimenowappendr   r:   r;   r#   )r@   
timestampsr   r   fn}   s   

ztest_retry_wait.<locals>.fnFr3   r0   r&   r   )secondsr1   r         r   )tenacityRetryingr   r'   r   r4   r   r:   lenr?   	timedelta)rD   retryingr   rB   r   test_retry_waitz   s       $rM   c                  C   s2  t jdddddddgd} t| }|d jdksJ |d	 }|jdks&J |jdks-J |jdks4J |jdks;J |d
 }dD ](}zt	j
t| J d t	j
yi } z||s_J W Y d }~qAd }~ww tddgD ]&}z
t	j
t| W qp t	j
y } z||rJ W Y d }~qpd }~ww d S )N
   r   g      ?g      ?r
   r   attemptsinitial_delay	max_delayr5   r7   http_status_codesr$   r-   r.   )r
   r   Fr3   )r   r4   r   r'   r*   r6   r8   r5   r7   r   r:   r;   r#   r<   r   )optionsr'   r-   r.   r   r=   r   r   r   =test_retry_args_enabled_with_custom_values_are_not_overridden   s@   
rU   c                   C   s   t jdtddfddS )Nzgoogle.auth.defaultmagic_tokentest_projectT)return_valueautospec)r   patchr   Credentialsr   r   r   r   _patch_auth_default   s
   r\   c                 C   s$   | pt  } d|i| _d|i| _| S )N	transport)r   HttpOptionsclient_argsasync_client_args)http_optionsr]   async_transportr   r   r   _transport_options   s   

rc   c                  C   s   t jtjd} td| j_tjdddt	| dd}t
  |jdd	i d
}| j  |jd dks3J W d    d S 1 s>w   Y  d S )Nspec   TrW   globalr]   vertexaiprojectlocationra   GETpathhttp_methodrn   request_dictr   200)r   Mockr    BaseTransportr#   handle_requestrX   r   BaseApiClientrc   r\   requestassert_called_oncer   mock_transportclientresponser   r   r   6test_disabled_retries_successful_request_executes_once   s   
"r}   c                  C   s   t jtjd} td| j_tjdddt	| dd}t
 5 z|jdd	i d
 J d tjyC } z|jdks9J W Y d }~nd }~ww | j  W d    d S 1 sTw   Y  d S )Nrd   r   TrW   rg   rh   ri   rm   rn   ro   Fr3   )r   rs   r    rt   r#   ru   rX   r   rv   rc   r\   rw   r   r:   r   rx   rz   r{   r=   r   r   r   2test_disabled_retries_failed_request_executes_once   s$   "r   r1   r&   g?r   r   rO   c                  C   s   t jtjd} td| j_tjdddt	t
jtd| dd}t  |jd	d
i d}| j  |jd dks8J W d    d S 1 sCw   Y  d S )Nrd   rf   TrW   rg   retry_optionsra   r]   ri   rm   rn   ro   r   rr   )r   rs   r    rt   r#   ru   rX   r   rv   rc   r   r^   _RETRY_OPTIONSr\   rw   rx   r   ry   r   r   r   -test_retries_successful_request_executes_once   s    


"r   c                  C   s   t jtjd} tdtdf| j_tjdddt	t
jtd| dd	}t  |jd
di d}| j  |jd dks<J W d    d S 1 sGw   Y  d S )Nrd   r   rf   TrW   rg   r   r   ri   rm   rn   ro   r   rr   )r   rs   r    rt   r#   ru   side_effectr   rv   rc   r   r^   r   r\   rw   assert_calledr   ry   r   r   r   0test_retries_failed_request_retries_successfully  s$   


"r   c                  C   s   t jtjd} tdtdf| j_tjdddt	| dd}t
 $ |jd	d
i tjtdd}| j  |jd dks<J W d    d S 1 sGw   Y  d S )Nrd   r   rf   TrW   rg   rh   ri   rm   rn   r   rp   rn   rq   ra   r   rr   )r   rs   r    rt   r#   ru   r   r   rv   rc   r\   rw   r   r^   r   r   r   ry   r   r   r   Atest_retries_failed_request_retries_successfully_at_request_level"  s0   	
"r   c                  C   s   t jtjd} tdtdf| j_tjdddt	t
jtd| dd	}t 5 z|jd
di d J d tjyL } z|jdksBJ W Y d }~nd }~ww | j  W d    d S 1 s]w   Y  d S )Nrd   r   r   TrW   rg   r   r   ri   rm   rn   ro   Fr3   )r   rs   r    rt   r#   ru   r   r   rv   rc   r   r^   r   r\   rw   r   r:   r   r   r~   r   r   r   2test_retries_failed_request_retries_unsuccessfully?  s.   

"r   c                  C   s   t jtjd} tdtdf| j_tjdddt	| dd}t
 8 z|jd	d
i dtid J d tjyJ } z|jdks@J W Y d }~nd }~ww | j  W d    d S 1 s[w   Y  d S )Nrd   r   r   TrW   rg   rh   ri   rm   rn   r   r   Fr3   )r   rs   r    rt   r#   ru   r   r   rv   rc   r\   rw   r   r   r:   r   r   r~   r   r   r   Ctest_retries_failed_request_retries_unsuccessfully_at_request_levelY  s6   	"r   c                  C      dt _dd } t|   d S )NFc                     s   t jtjd} td| j_tjdddt	| dd}t
 " |jdd	i d
I d H }| j  |jd dks7J W d    d S 1 sBw   Y  d S )Nrd   rf   TrW   rg   rb   ri   rm   rn   ro   r   rr   )r   rs   r    AsyncBaseTransportr#   handle_async_requestrX   r   rv   rc   r\   async_requestrx   r   ry   r   r   r   run}  s    
"zItest_async_disabled_retries_successful_request_executes_once.<locals>.runr   r   asyncior   r   r   r   r   <test_async_disabled_retries_successful_request_executes_oncez  s   r   c                  C   r   )NFc                     s   t jtjd} td| j_tjdddt	| dd}t
 8 z|jdd	i d
I d H  J d tjyG } z|jdks=J W Y d }~nd }~ww | j  W d    d S 1 sXw   Y  d S )Nrd   r   TrW   rg   r   ri   rm   rn   ro   Fr3   )r   rs   r    r   r#   r   rX   r   rv   rc   r\   r   r   r:   r   rx   r~   r   r   r   r     s*   "zEtest_async_disabled_retries_failed_request_executes_once.<locals>.runr   r   r   r   r   8test_async_disabled_retries_failed_request_executes_once     r   c                  C   r   )NFc                     s   t jtjd} td| j_tjdddt	t
jtd| dd}t " |jd	d
i dI d H }| j  |jd dks<J W d    d S 1 sGw   Y  d S )Nrd   rf   TrW   rg   r   ra   rb   ri   rm   rn   ro   r   rr   )r   rs   r    r   r#   r   rX   r   rv   rc   r   r^   r   r\   r   rx   r   ry   r   r   r   r     s&   


"z@test_async_retries_successful_request_executes_once.<locals>.runr   r   r   r   r   3test_async_retries_successful_request_executes_once  r   r   c                  C   r   )NFc                     s   t jtjd} tdtdf| j_tjdddt	t
jtd| dd	}t " |jd
di dI d H }| j  |jd dks@J W d    d S 1 sKw   Y  d S )Nrd   r   rf   TrW   rg   r   r   ri   rm   rn   ro   r   rr   )r   rs   r    r   r#   r   r   r   rv   rc   r   r^   r   r\   r   r   r   ry   r   r   r   r     s*   


"zCtest_async_retries_failed_request_retries_successfully.<locals>.runr   r   r   r   r   6test_async_retries_failed_request_retries_successfully  s   r   c                  C   r   )NFc                     s   t jtjd} tdtdf| j_tjdddt	| dd}t
 ' |jd	d
i tjtddI d H }| j  |jd dks@J W d    d S 1 sKw   Y  d S )Nrd   r   rf   TrW   rg   r   ri   rm   rn   r   r   r   rr   )r   rs   r    r   r#   r   r   r   rv   rc   r\   r   r   r^   r   r   r   ry   r   r   r   r     s2   	
"zTtest_async_retries_failed_request_retries_successfully_at_request_level.<locals>.runr   r   r   r   r   Gtest_async_retries_failed_request_retries_successfully_at_request_level  s   r   c                  C   r   )NFc                     s   t jtjd} tdtdf| j_tjdddt	t
jtd| dd	}t 8 z|jd
di dI d H  J d tjyP } z|jdksFJ W Y d }~nd }~ww | j  W d    d S 1 saw   Y  d S )Nrd   r   r   TrW   rg   r   r   ri   rm   rn   ro   Fr3   )r   rs   r    r   r#   r   r   r   rv   rc   r   r^   r   r\   r   r   r:   r   r   r~   r   r   r   r     s4   

"zEtest_async_retries_failed_request_retries_unsuccessfully.<locals>.runr   r   r   r   r   8test_async_retries_failed_request_retries_unsuccessfully  s   r   c                  C   r   )NFc                     s   t jtjd} tdtdf| j_tjdddt	| dd}t
 = z|jd	d
i tjtddI d H  J d tjyP } z|jdksFJ W Y d }~nd }~ww | j  W d    d S 1 saw   Y  d S )Nrd   r   r   TrW   rg   r   ri   rm   rn   r   r   Fr3   )r   rs   r    r   r#   r   r   r   rv   rc   r\   r   r   r^   r   r   r:   r   r   r~   r   r   r   r   ,  s8   	
"zVtest_async_retries_failed_request_retries_unsuccessfully_at_request_level.<locals>.runr   r   r   r   r   Itest_async_retries_failed_request_retries_unsuccessfully_at_request_level)  s   r   statusc                    s8   t jtjd}| |_dt| i|_i |j_d|j	_|S )z&Has to return a coroutine hence async.rd   r   test)
r   rs   aiohttpClientResponser   r"   r   jsonrX   text)r   r|   r   r   r   _aiohttp_async_responseO  s   r   rw   )rY   c                    "   dt _ fdd}t|  d S )NTc                     sx   t d _tjdddd} t ! | jddi dI d H }   |jd	 d
ks*J W d    d S 1 s5w   Y  d S )Nrf   TrW   rg   rj   rk   rl   rm   rn   ro   r   rr   )r   rX   r   rv   r\   r   rx   r   r{   r|   mock_requestr   r   r   `  s   
"zKtest_aiohttp_disabled_retries_successful_request_executes_once.<locals>.runr   r   r   r   r   r   >test_aiohttp_disabled_retries_successful_request_executes_onceY  s   r   c                    r   )NTc                     s   t d _tjdddd} t 7 z| jddi dI d H  J d
 tjy; } z|jdks1J W Y d }~nd }~ww  	  W d    d S 1 sKw   Y  d S )Nr   TrW   rg   r   rm   rn   ro   Fr3   )
r   rX   r   rv   r\   r   r   r:   r   rx   r{   r=   r   r   r   r   x  s&   

"zGtest_aiohttp_disabled_retries_failed_request_executes_once.<locals>.runr   r   r   r   r   :test_aiohttp_disabled_retries_failed_request_executes_onces     r   c                    r   )NTc                     s   t d _tjdddttjtddd} t ! | j	dd	i d
I d H } 
  |jd dks2J W d    d S 1 s=w   Y  d S )Nrf   TrW   rg   r   ra   ri   rm   rn   ro   r   rr   )r   rX   r   rv   rc   r   r^   r   r\   r   rx   r   r   r   r   r   r     s"   

	"zBtest_aiohttp_retries_successful_request_executes_once.<locals>.runr   r   r   r   r   5test_aiohttp_retries_successful_request_executes_once  r   r   c                    r   )NTc                     s   t dt df _tjdddttjtddd} t ! | j	d	d
i dI d H } 
  |jd dks6J W d    d S 1 sAw   Y  d S )Nr   rf   TrW   rg   r   r   ri   rm   rn   ro   r   rr   )r   r   r   rv   rc   r   r^   r   r\   r   r   r   r   r   r   r   r     s&   
	"zEtest_aiohttp_retries_failed_request_retries_successfully.<locals>.runr   r   r   r   r   8test_aiohttp_retries_failed_request_retries_successfully  s   r   c                    r   )NTc                     s   t dt df _tjdddd} t & | jddi tjtd	d
I d H } 	  |j
d dks3J W d    d S 1 s>w   Y  d S )Nr   rf   TrW   rg   r   rm   rn   r   r   r   rr   )r   r   r   rv   r\   r   r   r^   r   r   r   r   r   r   r   r     s*   "zVtest_aiohttp_retries_failed_request_retries_successfully_at_request_level.<locals>.runr   r   r   r   r   Itest_aiohttp_retries_failed_request_retries_successfully_at_request_level  s   r   c                    r   )NTc                     s   t dt df _tjdddttjtddd} t 7 z| j	d	d
i dI d H  J d t
jyG } z|jdks=J W Y d }~nd }~ww    W d    d S 1 sWw   Y  d S )Nr   r   TrW   rg   r   r   ri   rm   rn   ro   Fr3   )r   r   r   rv   rc   r   r^   r   r\   r   r   r:   r   r   r   r   r   r   r     s0   
	
"zGtest_aiohttp_retries_failed_request_retries_unsuccessfully.<locals>.runr   r   r   r   r   :test_aiohttp_retries_failed_request_retries_unsuccessfully  s   r   c                    r   )NTc                     s   t dt df _tjdddd} t : z| jddi d	tid
I d H  J d tjyB } z|j	dks8J W Y d }~nd }~ww  
  W d    d S 1 sRw   Y  d S )Nr   r   TrW   rg   r   rm   rn   r   r   Fr3   )r   r   r   rv   r\   r   r   r   r:   r   r   r   r   r   r   r     s0   
"zXtest_aiohttp_retries_failed_request_retries_unsuccessfully_at_request_level.<locals>.runr   r   r   r   r   Ktest_aiohttp_retries_failed_request_retries_unsuccessfully_at_request_level
  s   r   c                    r   )NTc               
      s   t jt jddddd d d tdtdf _tjdddd	} t	 ! | j
d
di dI d H }   |jd dks;J W d    d S 1 sFw   Y  d S )N	localhostP   FT)connection_keyos_errorrf   rW   rg   r   rm   rn   ro   r   rr   )r   ClientConnectorErrorclient_reqrepConnectionKeyOSErrorr   r   r   rv   r\   r   r   r   r   r   r   r   r   4  s*   "zMtest_aiohttp_retries_client_connector_error_retries_successfully.<locals>.runr   r   r   r   r   @test_aiohttp_retries_client_connector_error_retries_successfully-  s   r   )NNN)@__doc__r   collections.abcr   r?   unittestr   pytestr   AIOHTTP_NOT_INSTALLEDImportError	MagicMockgoogle.oauth2r   r    rH    r   r   r   r   markskipifrequires_aiohttpr9   fixturer   intr   r#   r,   r>   rM   rU   r\   rc   r}   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   objectClientSessionr   r   r   r   r   r   r   r   r   r   r   r   <module>   s   


'#


!"!&
 !