o
    pkjG?                     @   st  U d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	Z
ddl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mZ d
dlmZ zddlZdZW n eyb   dZY nw g Zeej ed< eje e! dedZ"dZ#dedej$ej%B fddZ&dedej$ej%B fddZ'dedede(dB fddZ)G dd dZ*G dd dZ+G d d! d!Z,d"d# Z-d$d% Z.ej/jd&d' Z0d(d) Z1ej/jd*d+ Z2d,d- Z3d.d/ Z4d0d1 Z5d2d3 Z6ej/jd4d5 Z7ej/jd6d7 Z8ej/jd8d9 Z9d:d; Z:ej/jd<d= Z;ej/jej/j<ed>d?d@dA Z=dBdC Z>ej/jej/j<ed>d?dDdE Z?ej/jdFdG Z@ej/jdHdI ZAdS )JzTest files upload method.    N)mock)Any   )_transformers)types)BaseApiClient)
AsyncFilesFiles   )pytest_helperFT
test_tablezt.t_file_name)fileglobals_for_filetest_methodr   )pytest_asyncioclientreturnc                 C   sp   | j  D ]}|jd ur|  S q| jjddtjddddd}|js1t	d | j
|}|jr#|jjd	 jS 
Nzveo-2.0-generate-001z
A red ball
dont_allowz16:9   )person_generationaspect_ratioduration_seconds)modelpromptconfig
   r   )fileslistdownload_urimodelsgenerate_videosr   GenerateVideosConfigdonetimesleep
operationsgetresultgenerated_videosvideor   r   	operation r-   d/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/google/genai/tests/files/test_download.py_get_downloadable_file7   s$   
	
r/   c                    s   | j j I d H 2 z3 d H W }|jd ur|  S q
6 | j jjddtjdddddI d H }|jsFt	
dI d H  | j j|I d H }|jr1|jjd	 jS r   )aior   r   r   r    r!   r   r"   r#   asyncior%   r&   r'   r(   r)   r*   r+   r-   r-   r.   _async_get_downloadable_fileK   s(   
	r2   argskwargsc                     s   | dd u r
dS d S )Ndestination
   video_data)r'   )r3   r4   r-   r-   r.   _mock_async_download_videoa   s   r7   c                   @       e Zd ZddedB fddZdS )_AsyncMockChunkIterN
chunk_sizec                 C     dV  dV  d S N   chunk1   chunk2r-   selfr:   r-   r-   r.   iter_chunkedi      
z _AsyncMockChunkIter.iter_chunkedN)__name__
__module____qualname__intrA   r-   r-   r-   r.   r9   g       r9   c                   @   r8   )_AsyncHttpxMockChunkIterNr:   c                 C  r;   r<   r-   r?   r-   r-   r.   __call__p   rB   z!_AsyncHttpxMockChunkIter.__call__rC   )rD   rE   rF   rG   rJ   r-   r-   r-   r.   rI   n   rH   rI   c                   @   s(   e Zd ZdddZdeddfddZdS )	_AsyncWriterr   Nc                 C   s
   g | _ d S rC   )written_chunks)r@   r-   r-   r.   __init__w   s   
z_AsyncWriter.__init__datac                    s   | j | d S rC   )rL   append)r@   rN   r-   r-   r.   writez   s   z_AsyncWriter.write)r   N)rD   rE   rF   rM   bytesrP   r-   r-   r-   r.   rK   u   s    
rK   c              	   C   s   t | t\ t| }|jp|jdd dd }t|dd p&t|dd }tj	|d}tj
|d}||t|d	|t|dd t|dd ||fD ]}|d urYt|}||ksYJ qHW d    d S 1 sew   Y  d S )
N/:r   r   urirU   r*   name)r   exception_if_vertex
ValueErrorr/   rX   rU   splitgetattrr   VideoGeneratedVideott_file_name)r   r   file_idr   r*   generated_videofrX   r-   r-   r.   test_name_transform_name~   s,    


	
"rd   c                 C   s\   t | t t| }| jj|d}|dd dksJ W d    d S 1 s'w   Y  d S Nr            ftyp)r   rY   rZ   r/   r   downloadr   r   contentr-   r-   r.   test_basic_download   s
   "rm   c                    sl   t | t% t| I d H }| jjj|dI d H }|dd dks$J W d    d S 1 s/w   Y  d S re   )r   rY   rZ   r2   r0   r   rj   rk   r-   r-   r.   test_basic_download_async   s   "rn   c                 C   s   t | t1 t| }|d }| jj||d}|d u sJ | s#J | dd dks/J W d    d S 1 s:w   Y  d S )Nzdownloaded.mp4r   r5   rg   rh   ri   )r   rY   rZ   r/   r   rj   exists
read_bytesr   tmp_pathr   out_filer(   r-   r-   r.   test_destination_download   s   "ru   c                    s   t | t8 t| I d H }|d }| jjj||dI d H }|d u s%J | s+J | dd dks7J W d    d S 1 sBw   Y  d S )Nzdownloaded_async.mp4ro   rg   rh   ri   )	r   rY   rZ   r2   r0   r   rj   rp   rq   rr   r-   r-   r.   test_async_destination_download   s   "rv   c                 C   s   | j jr*tjtdd | jjdt|d d W d    d S 1 s#w   Y  d S tj	t
ddd}d|_d |j_t|}t|d }|jd|d}|d u sPJ |j  |jjjd	 |ks`J d S )
N-only supported in the Gemini Developer clientmatchfiles/test_123out.mp4ro   Tinstancespec_setFr5   )_api_clientvertexaipytestraisesrZ   r   rj   strr   create_autospecr   download_filereturn_valuer	   assert_called_once	call_argsr4   r   rs   
api_clientfiles_clienttarget_filer(   r-   r-   r.   test_destination_filepath   s,   

r   c                 C   sx   | j jrd S tjtddd}d|_d |j_t|}|d }|jd|d}|d u s*J |j	  |jj
jd |ks:J d S )NTr|   Fr{   rz   ro   r5   )r   r   r   r   r   r   r   r	   rj   r   r   r4   r   r-   r-   r.   test_destination_pathlib      
r   c                 C   sx   | j jrd S tjtddd}d|_d |j_t|}t	 }|j
d|d}|d u s*J |j  |jjjd |ks:J d S )NTr|   Frz   ro   r5   )r   r   r   r   r   r   r   r	   ioBytesIOrj   r   r   r4   r   r   r   bufferr(   r-   r-   r.   test_destination_bytesio   r   r   c                 C   s   | j jrd S tjtddd}d|_d|j_t|}tj	dd}|j
|d}|dks+J |jdks2J tj	dd}d |j_t }|j
||d}|d u sMJ |jd u sTJ tj	dd}	tj|	d	}
d|j_|j
|
d}|dkspJ |
jjdksxJ d S )
NTr|   Fr6   Ahttps://generativelanguage.googleapis.com/v1beta/files/test_videorV   rf   ro   rW   )r   r   r   r   r   r   r   r	   r   r]   rj   video_bytesr   r   r^   r*   )r   rs   r   r   r*   rN   video2bufdata2video3	gen_videodata3r-   r-   r.   test_video_destination_behavior   s<   r   c                    s   | j jrd S tjtddd}d|_tjtd|_t|}t	j
dd}|j|dI d H }|dks2J |jdks9J t	j
dd}t }|j||d	I d H }|d u sSJ |jd u sZJ d S )
NTr|   F)side_effectr   rV   rf   r6   ro   )r   r   r   r   r   	AsyncMockr7   async_download_filer   r   r]   rj   r   r   r   )r   r   r   r*   rN   r   r   r   r-   r-   r.   %test_async_video_destination_behavior%  s0   r   c                    s   | j jr/tjtdd | jjjdt|d dI d H  W d    d S 1 s(w   Y  d S t	j
tddd}d|_t	jd d	|_t|}|d }|jd|dI d H }|d u sYJ d S )
Nrw   rx   rz   r{   ro   Tr|   Fr   )r   r   r   r   rZ   r0   r   rj   r   r   r   r   r   r   r   r   r-   r-   r.   test_async_destinationB  s.   
r   c                    sf   | j jrd S tjtddd}d|_tjd d|_t|}t	 }|j
d|dI d H }|d u s1J d S )NTr|   Fr   rz   ro   )r   r   r   r   r   r   r   r   r   r   rj   r   r-   r-   r.   test_async_destination_bytesio[  s   r   c                 C   sX   | j jrd S tdd}tjtdd |jddd W d    d S 1 s%w   Y  d S Ntest_keyapi_keyzUnsupported destination typerx   files/test_123:downloadi90  r5   )r   r   r   r   r   rZ   r   r   r   r-   r-   r.   test_destination_invalid_typel  s   
"r   c                    s`   | j jrd S tdd}tjtdd |jdddI d H  W d    d S 1 s)w   Y  d S r   )r   r   r   r   r   rZ   r   r   r-   r-   r.   #test_async_destination_invalid_typeu  s   
"r   z(aiohttp is not installed, skipping test.)reasonc              	      s  | j jrd S tdd}tjtjdd}d|_t |_	tjtj
dd}tj|d|_t |_d|_t }tjj|ddd+ tjj|d	|d |jd
|dI d H }W d    n1 s^w   Y  W d    n1 smw   Y  |d u sxJ | dksJ |j  d S )Nr   r   Tr}      r   F_use_aiohttp_get_aiohttp_sessionr   r      chunk1chunk2)r   r   r   r   r   aiohttpClientResponsestatusr9   rl   ClientSessionr   requestconfigure_mtls_channel_is_mtlsr   r   patchobjectr   getvaluecloser   )r   r   mock_responsemock_sessionr   r(   r-   r-   r.   ,test_async_destination_bytesio_writes_chunks  s8   

 	r   c                 C   s   | j jrd S tdd}tjtjdd}d|_ddg|j_	tjt
jjjjdd}||j_	d|_||_t }tjj|d	dd
 |jd|d}W d    n1 sPw   Y  |d u s[J | dkscJ |j  d S )Nr   r   Tr   r   r=   r>   F_use_google_auth_syncr   r   r   r   )r   r   r   r   r   requestsResponsestatus_codeiter_contentr   googleauth	transportAuthorizedSessionr   r   _authorized_sessionr   r   r   r   r   r   r   r   )r   r   r   mock_auth_sessionr   r(   r-   r-   r.   3test_authorized_session_destination_closes_response  s*   
r   c              	      s  | j jrd S tdd}tjtjdd}d|_t |_	tjtj
dd}tj|d|_t |_d|_t }tjj|ddd+ tjj|d	|d |jd
|dI d H }W d    n1 s]w   Y  W d    n1 slw   Y  |d u swJ |jddgksJ |j  d S )Nr   r   Tr   r   r   Fr   r   r   r   r=   r>   )r   r   r   r   r   r   r   r   r9   rl   r   r   r   r   r   rK   r   r   r   rL   r   r   )r   r   r   r   async_writerr(   r-   r-   r.   'test_async_destination_awaitable_writer  s8   

 	r   c              	      s   | j jrd S tdd}tjtjdd}d|_t |_	t
 |_t }tjj|ddd/ tj|jd	tj
|d |jd
|dI d H }W d    n1 sPw   Y  W d    n1 s_w   Y  |d u sjJ | dksrJ |j  d S )Nr   r   Tr   r   r   Fr   sendr   r   r   )r   r   r   r   r   httpxr   r   rI   aiter_bytesr   acloser   r   r   r   _async_httpx_clientr   r   assert_awaited_once)r   r   r   r   r(   r-   r-   r.   2test_async_httpx_destination_bytesio_writes_chunks  s2   

 	r   c              	      s   | j jrd S tdd}tjtjdd}d|_t |_	t
 |_t }tjj|ddd/ tj|jd	tj
|d |jd
|dI d H }W d    n1 sOw   Y  W d    n1 s^w   Y  |d u siJ |jddgksrJ |j  d S )Nr   r   Tr   r   r   Fr   r   r   r   r=   r>   )r   r   r   r   r   r   r   r   rI   r   r   r   rK   r   r   r   r   rL   r   )r   r   r   r   r(   r-   r-   r.   -test_async_httpx_destination_awaitable_writer  s2   

 	r   )B__doc__r1   r   pathlibr$   unittestr   typingr   google.auth.transport.requestsr   r   r   r    r   r_   r   r   r   r   r   r	   r   r   AIOHTTP_NOT_INSTALLEDImportErrorr   r   TestTableItem__annotations__setup__file__globals
pytestmarkpytest_pluginsFiler]   r/   r2   rQ   r7   r9   rI   rK   rd   rm   markrn   ru   rv   r   r   r   r   r   r   r   r   r   skipifr   r   r   r   r   r-   r-   r-   r.   <module>   s   

	

(


	

