§
    UCÄj–  ã                   óÎ  — d Z ddlZddlZ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 ddlmZ  ej        d	d
ddg d¢¬¦  «        Zd„ Zd„ Zd„ Zej        d„ ¦   «         Z ej        d¬¦  «        d„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         Zdededefd„Zej        d„ ¦   «         Z
ej        d„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         ZdS ) z Conftest for google.genai tests.é    N)Úmocké   )Ú_common)Ú_replay_api_client)Úclient)Útypesé   g      ð?g      $@g       @)i˜  i­  iô  iö  i÷  iø  )ÚattemptsÚinitial_delayÚ	max_delayÚexp_baseÚhttp_status_codesc                 ór   — dt          j        | j        ¦  «                             t           j        ¦  «        v S )z=True only for the curated cross-SDK suite under tests/shared.Úshared)ÚosÚfspathÚpathÚsplitÚsep)Úrequests    ú_C:\Projects\Historical\FacebookAutoPoster\venv\Lib\site-packages\google/genai/tests/conftest.pyÚ_is_shared_integration_testr   .   s)   € à	•R”Y˜wœ|Ñ,Ô,×2Ò2µ2´6Ñ:Ô:Ð	:Ð:ó    c                 ó6  — | €t          j        t          ¬¦  «        S t          | t          ¦  «        r9|                      d¦  «        s|                      d¦  «        r| S i | ¥dt          i¥S t          | dd¦  «        r| S |                      dt          i¬¦  «        S )zFAdds the shared retry options, leaving any caller-supplied ones alone.N)Úretry_optionsr   ÚretryOptions)Úupdate)r   ÚHttpOptionsÚ_SHARED_TEST_RETRY_OPTIONSÚ
isinstanceÚdictÚgetÚgetattrÚ
model_copy)Úhttp_optionss    r   Ú_with_shared_test_retry_optionsr&   3   s·   € àÐÝÔÕ+EÐFÑFÔFÐFÝ��dÑ#Ô#ð IØ×Ò˜Ñ(Ô(ð ¨L×,<Ò,<¸^Ñ,LÔ,Lð ØÐØHˆlÐH˜OÕ-GÐHÐHÐHÝˆ\˜?¨DÑ1Ô1ð ØÐØ	×	 Ò	 ØÕ9Ð:ð 
!ñ 
ô 
ð r   c                 ój   — |                       dddd¬¦  «         |                       dddd	¬¦  «         d S )
Nú--modeÚstoreÚautoae  Replay mode.
  One of:
  * auto: Replay if replay files exist, otherwise record.
  * record: Always call the API and record.
  * replay: Always replay, fail if replay files do not exist.
  * api: Always call the API and do not record.
  * tap: Always replay, fail if replay files do not exist. Also sets default values for the API key and replay directory.
)ÚactionÚdefaultÚhelpú	--privateÚ
store_trueFzRun private tests.)Ú	addoption)Úparsers    r   Úpytest_addoptionr2   B   sb   € Ø×ÒØØØðð	 ñ ô ð ð 	×ÒØØØØð	 ñ ô ð ð ð r   c                  ó   — dS )NF© r4   r   r   Ú
use_vertexr5   Y   s   € à	ˆr   T)Úautousec                 ó  — | j                              d¦  «        }|dk    ràd }t          | d¦  «        r:t          | j        d¦  «        r%| j        j        j                             d¦  «        }nd| j        v r|                      d¦  «        }t          j
                             d¦  «        }t          j
                             d¦  «        }|du r|rt          j        d	¦  «         d S |d
u r|rt          j        d¦  «         d S d S d S d S )Nr(   ÚapiÚnodeÚcallspecr5   Ú(GOOGLE_GENAI_RUN_VERTEX_ONLY_IN_API_MODEÚ(GOOGLE_GENAI_RUN_GEMINI_ONLY_IN_API_MODETzBSkipping Vertex AI tests in API mode (GEMINI ONLY config enabled).FzCSkipping Gemini API tests in API mode (VERTEX ONLY config enabled).)ÚconfigÚ	getoptionÚhasattrr9   r:   Úparamsr"   ÚfixturenamesÚgetfixturevaluer   ÚenvironÚpytestÚskip)r   Úmoder5   Úrun_vertex_onlyÚrun_gemini_onlys        r   Úskip_based_on_api_mode_env_varsrI   ^   s  € à	Œ×	!Ò	! (Ñ	+Ô	+€$Ø	ˆU‚]€]Ø€JÝˆw˜ÑÔð 9¥G¨G¬L¸*Ñ$EÔ$Eð 9Ø”<Ô(Ô/×3Ò3°LÑAÔA€j€jØ	˜Ô-Ð	-Ð	-Ø×*Ò*¨<Ñ8Ô8€jå”j—n’nÐ%OÑPÔP€OÝ”j—n’nÐ%OÑPÔP€Oà�TÐÐ˜oÐÝ„kÐVÑWÔWÐWÐWÐWØ	�uÐ	Ð	 Ð	Ý„kÐWÑXÔXÐXÐXÐXð €]ð 
Ð	Ð	Ð	r   c                  ó   — dS )NÚtestr4   r4   r   r   Úreplays_prefixrL   r   s   € à	ˆr   c                  ó   — d S )Nr4   r4   r   r   Úlocation_overriderN   y   s   € à	ˆr   r5   rL   Úreturnc                 ó  — t           j                             d¦  «                             d¦  «        d         }|                     d¦  «        d                              d¦  «        d         dz   | rdnd	z   }d
                     ||g¦  «        S )NÚPYTEST_CURRENT_TESTz::éÿÿÿÿú r   ú[ú.ÚvertexÚmldevú/)r   rC   r"   r   Újoin)r5   rL   Útest_name_endingÚ	test_names       r   Ú_get_replay_idr\   ~   sŠ   € Ý”Z—^’^Ð$9Ñ:Ô:×@Ò@ÀÑFÔFÀrÔJÐà×Ò˜SÑ!Ô! !Ô$×*Ò*¨3Ñ/Ô/°Ô2ØñàÐ	,ˆˆ Wñ.ð ð
 
�Š�> 9Ð-Ñ	.Ô	.Ð.r   c              #   ó²  K  — |j                              d¦  «        }|dvrt          d|z   ¦  «        ‚|j        j        }t
          j                             t
          j                             |j        ¦  «        ¦  «        d         }| 	                    |¦  «        rt          d|› d�¦  «        ‚dD ]}||v rt          d|› d	�¦  «        ‚Œt          | |¦  «        }	|d
k    rìd}dt
          j        d<   t
          j                             t
          j                             t          ¦  «        d¦  «        t
          j        d<   dt
          j        d<   dt
          j        d<   t
          j                             t
          j                             t
          j                             t          ¦  «        d¦  «        ¦  «        }
|
t
          j        d<   |j                              d¦  «        }| sd }n+|€)d|v r%t
          j                             d¦  «        dk    rd}|dk    rt#          |¦  «        rt%          |¦  «        }t'          j        ||	| |||¬¦  «        }t*          j                             t0          j        d¦  «        5 }||_        d| i}|r||d<   t1          j        di |¤Ž}|V — |j                             ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nr(   )r*   ÚrecordÚreplayr8   ÚtapzInvalid mode: r   z
      zl:
      Do not include the test filename in the test function name.
      keep the test function name short.)rW   Úml_devrV   z	
        zÈ:
        You should never ever include api types in the file name (mldev or vertex).
        All tests should run against all apis.
        Assert an exception if the test is not supported in an API.r`   r_   zdummy-api-keyÚGOOGLE_API_KEYzcredentials.jsonÚGOOGLE_APPLICATION_CREDENTIALSz
project-idÚGOOGLE_CLOUD_PROJECTÚlocationÚGOOGLE_CLOUD_LOCATIONz8../../../../../google/cloud/aiplatform/sdk/genai/replaysÚGOOGLE_GENAI_REPLAYS_DIRECTORYr.   ÚtuningsÚglobalzus-central1r8   )rF   Ú	replay_idÚvertexair%   Úprivatere   Ú_get_api_clientrk   r4   )r=   r>   Ú
ValueErrorÚfunctionÚ__name__r   r   ÚsplitextÚbasenameÚ
startswithr\   rC   rY   ÚdirnameÚ__file__Úabspathr"   r   r&   r   ÚReplayApiClientr   ÚpatchÚobjectÚgoogle_genai_client_moduleÚClientÚreturn_valueÚ_api_clientÚclose)r5   rL   r%   r   rN   rF   Útest_function_nameÚtest_filenameÚwordrj   Úreplays_root_directoryrl   Úreplay_clientÚpatch_methodÚkwargsÚgoogle_genai_clients                   r   r   r   ˆ   sY  è è € à	Œ×	!Ò	! (Ñ	+Ô	+€$Ø	Ð;Ð;Ð;Ý
Ð%¨Ñ,Ñ
-Ô
-Ð-ØÔ'Ô0ÐÝ”'×"Ò"¥2¤7×#3Ò#3°G´LÑ#AÔ#AÑBÔBÀ1ÔE€-Ø×"Ò" =Ñ1Ô1ð -Ý
ð ,Øð,ð ,ð ,ñ -ô -ð -ð ,ð Hð H€dØÐ!Ð!Ð!Ýð GØ	ðGð Gð Gñ Hô Hð Hð "õ ˜Z¨Ñ8Ô8€)à	ˆU‚]€]Ø€Dð $3…B„JÐÑ Ý35´7·<²<Ý
Œ�Š�Ñ!Ô!Øñ4ô 4…B„JÐ/Ñ0ð *6…B„JÐ%Ñ&Ø*4…B„JÐ&Ñ'õ  œWŸ_š_Ý
Œ�ŠÝŒG�OŠO�HÑ%Ô%ØFñ	
ô 	
ñô Ðð 4J…B„JÐ/Ñ0àŒN×$Ò$ [Ñ1Ô1€'à	ð (ØÐÐØÐ  Y°.Ð%@Ð%@å	„z‡~‚~Ð-Ñ.Ô.°(Ò:Ð:Ø'Ðð 
ˆU‚]€]Õ2°7Ñ;Ô;€]Ý2°<Ñ@Ô@€Lå$Ô4ØØØØØØ ðñ ô €-õ „z×ÒÝ Ô'Ð):ñô ð ,àØ -€LÔØ˜*Ð%€FØð -Ø,€fˆZÑÝ4Ô;ÐEÐE¸fÐEÐEÐð ÐÐÐð Ô#×)Ò)Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s   É>AKËKËKc               #   ó’   K  — t           j                             t          dd¬¦  «        5 } | V — d d d ¦  «         d S # 1 swxY w Y   d S )NÚtimestamped_unique_nameÚ20240101000000_bd656)r|   )r   rx   ry   r   )Úunique_name_mocks    r   Úmock_timestamped_unique_namer‹   Ú   sœ   è è € å„z×ÒÝØØ)ð ñ ô ð ð Ø
ÐÐÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ª<¼A ÁA c               #   ó  K  — dd l } t          j                             t          j                             t
          ¦  «        dd¦  «        }| j                             |¦  «        5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S )Nr   Údataz
google.jpg©Ú	PIL.Imager   r   rY   rt   ru   ÚImageÚopen©ÚPILÚ
image_pathÚimgs      r   Ú
image_jpegr–   ä   óµ   è è € àÐÐÐÝŒw�|Š|�BœGŸOšO­HÑ5Ô5°v¸|ÑLÔL€*Ø
„y‡~‚~�jÑ!Ô!ð  SØ
€I€I€Iðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ó   Á$A6Á6A:Á=A:c               #   ó  K  — dd l } t          j                             t          j                             t
          ¦  «        dd¦  «        }| j                             |¦  «        5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r�   z
google.pngrŽ   r’   s      r   Ú	image_pngrš   ì   r—   r˜   )Ú__doc__Údatetimer   Úunittestr   ÚuuidrD   Ú r   r   r   rz   r   ÚHttpRetryOptionsr   r   r&   r2   Úfixturer5   rI   rL   rN   ÚboolÚstrr\   r‹   r–   rš   r4   r   r   ú<module>r¤      s  ðð" 'Ð &à €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€à Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð ð 4˜UÔ3ØØØØØ4Ð4Ð4ðñ ô Ð ð;ð ;ð ;ð
ð ð ðð ð ð. „ðð ñ „ðð €„˜ÐÑÔðYð Yñ ÔðYð& „ðð ñ „ðð „ðð ñ „ðð/˜tð /°Sð /¸Sð /ð /ð /ð /ð „ðN,ð N,ñ „ðN,ðb „ðð ñ „ðð „ðð ñ „ðð „ðð ñ „ðð ð r   