§
    UCÄj¸"  ã                   ó  — d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ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 d	Z G d
„ dej        ¦  «        Zdededededeeef         f
d„Zdeeef         dedefd„Zdeeef         dedee         fd„Zdddddœdedeeeef                  dee         deee                  dee         f
d„Zdee         fd„Zdee         fd„Z dedefd„Z!dedefd „Z"d!„ Z#d"„ Z$dS )#é    N)ÚAnyÚOptional)Ú	BaseModelÚFieldÚSerializeAsAnyé   )Ú_common)Ú_replay_api_client)Útypes)ÚHttpOptionsz#config.getoption('--mode') == 'api'c                   ór   — e Zd ZU dZ ed¬¦  «        Zee         ed<    edd¬¦  «        Z	e
e         ed<   dS )	ÚTestTableItemFz0The parameters to the test. Use pydantic models.)ÚdescriptionÚ
parametersNzKWhen set to a reason string, this test will be skipped in private SDK mode.)Údefaultr   Úskip_in_private)Ú__name__Ú
__module__Ú__qualname__Ú__test__r   r   r   r   Ú__annotations__r   r   Ústr© ó    údC:\Projects\Historical\FacebookAutoPoster\venv\Lib\site-packages\google/genai/tests/pytest_helper.pyr   r   !   s   € € € € € € à€(ð +0¨%ØHð+ñ +ô +€*ˆn˜YÔ'ð ð ñ ð $) 5ØØcð$ñ $ô $€/�8˜C”=ð ð ñ ð ð r   r   Ú
use_vertexÚreplays_prefixÚtest_methodÚtest_table_itemÚglobals_for_filec           	      óä  — t          | j        dd¦  «        r |j        rt          j        |j        ¦  «         |j        r|j        n|j        }|rdnd}|› d|› d|› �}| j                             |¦  «         t          |j	        ¦  «         
                    ¦   «         }	 d|v rW|                     d¦  «        }	|	d d…         }
|	d         }| }|
D ]}t          ||¦  «        }Œt          ||¦  «        } |di |¤Ž n||         } || |j	        ¦  «         |j        r| j        j        s
J d¦   «         ‚|j        r| j        j        r
J d	¦   «         ‚| j                             ¦   «          d S # t           $ rÿ}t          |d
d ¦  «        dk    r1t          | j        dd ¦  «        dk    rt          j        d|› �¦  «         |j        rL| j        j        s@|j        t#          |¦  «        vr)t%          d|j        › dt#          |¦  «        › d�¦  «        |‚nU|j        rL| j        j        r@|j        t#          |¦  «        vr)t%          d|j        › dt#          |¦  «        › d�¦  «        |‚n|‚Y d }~d S Y d }~d S d }~ww xY w)NÚ_privateFÚvertexÚmldevú/ú.éÿÿÿÿz&Should have raised exception in MLDev.z'Should have raised exception in Vertex.Úcodei­  Ú_modeÚapiz<Resource Exhausted (429). Skipping test instead of failing: ú'z
' not in 'r   )ÚgetattrÚ_api_clientr   ÚpytestÚskipÚoverride_replay_idÚnameÚinitialize_replay_sessionÚvarsr   ÚcopyÚsplitÚexception_if_mldevÚvertexaiÚexception_if_vertexÚcloseÚ	Exceptionr   ÚAssertionError)Úclientr   r   r   r   r    Ú	replay_idÚapi_typeÚparameters_dictÚmethod_name_partsÚmodule_path_partsÚmethod_nameÚcurrent_objectÚpartÚmethodÚcustom_methodÚes                    r   Úbase_test_functionrH   /   s=  € õ ˆfÔ  *¨eÑ4Ô4ð1à
Ô
)ð1õ „K�Ô/Ñ0Ô0Ð0ð 
Ô	+ð €oÔ(Ð(àÔð ð
 $Ð0ˆXˆX¨€(ØÐ8Ð8 )Ð8Ð8¨hÐ8Ð8€)ØÔ×.Ò.¨yÑ9Ô9Ð9å˜Ô3Ñ4Ô4×9Ò9Ñ;Ô;€/ð'Ø
ˆkÐÐØ%×+Ò+¨CÑ0Ô0ÐØ+¨C¨R¨CÔ0ÐØ% bÔ)€kà€nØ#ð 7ð 7ˆ$Ý  °Ñ6Ô6ˆˆÝ�~ {Ñ3Ô3€fØ€fÐÐˆÐÐÐÐà& {Ô3€mØ€m�F˜OÔ6Ñ7Ô7Ð7àÔ)ð >°&Ô2DÔ2Mð >Ø<Ð<Ñ<Ô<ˆUØ	Ô	,ð >°Ô1CÔ1Lð >Ø=Ð=Ñ=Ô=ˆUØ
Ô×ÒÑÔÐÐÐøÝ	ð ð ð åˆq�&˜$ÑÔ 3Ò&Ð&­7°6Ô3EÀwÐPTÑ+UÔ+UÐY^Ò+^Ð+^Ý„kðØðð ñô ð ð
 Ô)ð °&Ô2DÔ2Mð Ø	Ô	+µ3°q±6´6Ð	9Ð	9ÝØG�Ô2ÐGÐG½cÀ!¹f¼fÐGÐGÐGñ
ô 
àð	ð 
:ð 
Ô	,ð °Ô1CÔ1Lð Ø	Ô	,µC¸±F´FÐ	:Ð	:ÝØH�Ô3ÐHÐH½sÀ1¹v¼vÐHÐHÐHñ
ô 
àð	ð 
;ð
 €gð 
:Ð	9Ð	9Ð	9Ð	9Ð	9ð
 
;Ð	:Ð	:Ð	:Ð	:Ð	:øøøøðøøøs   ÂCE& Å&
I/Å0C.I*É*I/c                 ó   ‡ ‡‡— ˆ ˆˆfd„S )Nc                 ó,   •— t          | ||‰‰‰¦  «        S ©N)rH   )r<   r   r   r    r   r   s      €€€r   ú<lambda>z,create_test_for_table_item.<locals>.<lambda>u   s$   ø€ Õ4FØØØØØØñ5ô 5€ r   r   )r    r   r   s   ```r   Úcreate_test_for_table_itemrM   p   s(   øøø€ ð

ð 
ð 
ð 
ð 
ð 
ð r   Ú
test_tablec                 óª   — |D ]O}|j         r-|j                             d¦  «        sJ d|j        › d�¦   «         ‚t          | ||¦  «        | |j        <   ŒPd S )NÚtest_union_z
      test: aª  
      When has_union is true, it must be a test that explicitly test the
      non-canonical type in the union.
      For all other tests, use transformers to convert data to the canonical
      type of the field so it can be tested in other languages.
      If this test is truly about testing the non-canonical type of the union,
      rename the test to start with 'test_union_'. E.g.
      test_union_contents_is_string())Ú	has_unionr1   Ú
startswithrM   )r    r   rN   r   s       r   Úcreate_test_for_tablerS      s’   € ð
 $ð ð €oØÔ ð 	)ØÔ!×,Ò,¨]Ñ;Ô;ð )ð )ð >)ØÔ!ð>)ð >)ð >)ñ )ô )Ð;õ .HØ˜+ ñ.ô .Ð�_Ô)Ñ*Ð*ðð r   )r    r   rN   Úhttp_optionsÚfilerT   c                 ó´  — |                       t          j                             t          ¦  «        d¦  «                              dd¦  «                              dd¦  «        }d}t          j                             dd¦  «        �d	}|rt          |||¦  «         |�r—|�s”t          j                             d
d¦  «        }|€t          d¦  «        ‚t          j         	                    ||¦  «        }t          j         	                    |d¦  «        }	t          j        |¦  «                             d	d	¬¦  «         t          |d         j        t          ¦  «        sJ |	› d�¦   «         ‚t!          j        d|t%          |d         j        j                             ¦   «         ¦  «        |¬¦  «        }
t          j        t          j                             |	¦  «        d	¬¦  «         t-          |	d¦  «        5 }|                     |
                     d	d	d¬¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t2          j                             dd	||fd||fg¦  «        S )zDGenerates parameterization for tests, run for both Vertex and MLDev.Útestsz.pyÚ z/test_r%   FÚUNITTEST_ON_FORGENTÚGOOGLE_GENAI_REPLAYS_DIRECTORYz>GOOGLE_GENAI_REPLAYS_DIRECTORY environment variable is not setz_test_table.json)ÚparentsÚexist_okr   z  parameters must be a BaseModel.zAuto-generated. Do not edit.)Úcommentr   Úparameter_namesrN   )r\   Úwr   )Úexclude_noneÚby_aliasÚindentz(use_vertex, replays_prefix, http_options)ÚreplaceÚosÚpathÚdirnameÚ__file__ÚenvironÚgetrS   Ú
ValueErrorÚjoinÚpathlibÚPathÚmkdirÚ
isinstancer   r   r   ÚTestTableFileÚlistÚmodel_fieldsÚkeysÚmakedirsÚopenÚwriteÚmodel_dump_jsonr.   ÚmarkÚparametrize)rU   r    r   rN   rT   Úreplays_directoryÚis_tap_modeÚreplays_root_directoryÚabs_replay_directoryÚtest_table_file_pathÚtest_table_fileÚfs               r   Úsetupr�   ›   s¥  € ð ‡l‚l•2”7—?’?¥8Ñ,Ô,¨gÑ6Ô6ß‚wˆu�bÑÔß‚wˆx˜ÑÔð ð €+Ý„Z‡^‚^Ð'¨Ñ.Ô.Ð:Ø€Kàð EÝÐ*¨K¸ÑDÔDÐDàñ ˜ñ ÝœZŸ^š^Ø(¨$ñô Ðð Ð%ÝØ
Jñô ð õ œ7Ÿ<š<ØÐ 1ñô Ðõ œ7Ÿ<š<ØÐ0ñô Ðõ „LÐ%Ñ&Ô&×,Ò,°TÀDÐ,ÑIÔIÐIÝØ�1ŒÔ ¥)ñô ð Að Aà
Ð@Ð@Ð@ñAô Að õ Ô)Ø.ØÝ˜Z¨œ]Ô5ÔB×GÒGÑIÔIÑJÔJØð	ñ ô €Oõ „K•”—’Ð 4Ñ5Ô5ÀÐEÑEÔEÐEå	Ð" CÑ	(Ô	(ð ¨AØ‡g‚gØ
×
)Ò
)°tÀdÐSTÐ
)Ñ
UÔ
Uñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ 
Œ×	 Ò	 Ø0àÐ" LÐ
1ØÐ# \Ð
2ðñ
ô 
ð s   Ç/,H'È'H+È.H+Úexception_typec                 óh   — | j         j        rt          j        ¦   «         S t	          j        |¦  «        S rK   )r-   r7   Ú
contextlibÚnullcontextr.   Úraises©r<   r‚   s     r   r6   r6   Û   s/   € ØÔÔ ð )ÝÔ!Ñ#Ô#Ð#åŒ=˜Ñ(Ô(Ð(r   c                 óh   — | j         j        rt          j        |¦  «        S t	          j        ¦   «         S rK   )r-   r7   r.   r†   r„   r…   r‡   s     r   r8   r8   â   s/   € ØÔÔ ð $ÝŒ=˜Ñ(Ô(Ð(åÔ!Ñ#Ô#Ð#r   Ú	snake_strÚreturnc                 ó0   — t          j        dd„ | ¦  «        S )z*Converts a snake_case string to CamelCase.z_([a-zA-Z])c                 óP   — |                       d¦  «                             ¦   «         S )Né   )ÚgroupÚupper)Úmatchs    r   rL   z snake_to_camel.<locals>.<lambda>ë   s   € ¨e¯kªk¸!©n¬n×.BÒ.BÑ.DÔ.D€ r   )ÚreÚsub)r‰   s    r   Úsnake_to_camelr“   é   s   € å	Œ�Ð DÐ DÀiÑ	PÔ	PÐPr   Ú	camel_strc                 óx   — t          j        dd| ¦  «                             ¦   «                              d¦  «        S )z*Converts a CamelCase string to snake_case.z([A-Z])z_\1Ú_)r‘   r’   ÚlowerÚlstrip)r”   s    r   Úcamel_to_snaker™   î   s0   € å	Œ�
˜F IÑ	.Ô	.×	4Ò	4Ñ	6Ô	6×	=Ò	=¸cÑ	BÔ	BÐBr   c                 óŠ   — |                       t          |¦  «        |                       t          |¦  «        d¦  «        ¦  «        S )z_Returns the value of the key in the object, converting to camelCase or snake_case if necessary.N)ri   r“   r™   )ÚobjÚkeys     r   Úget_value_ignore_key_caser�   ó   s4   € à	�Š• Ñ$Ô$ c§g¢g­n¸SÑ.AÔ.AÀ4Ñ&HÔ&HÑ	IÔ	IÐIr   c                 ó   — t          | t          ¦  «        rWi }|                      ¦   «         D ]>\  }}t          |t          ¦  «        rt	          |¦  «        }n|}t          |¦  «        ||<   Œ?|S t          | t          ¦  «        rd„ | D ¦   «         S | S )z8Converts all keys in a dictionary or list to snake_case.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úcamel_to_snake_all_keys)Ú.0Úitems     r   ú
<listcomp>z+camel_to_snake_all_keys.<locals>.<listcomp>  s!   € Ð;Ð;Ð;¨dÕ# DÑ)Ô)Ð;Ð;Ð;r   )ro   ÚdictÚitemsr   r™   r    rq   )ÚdataÚnew_dictrœ   ÚvalueÚnew_keys        r   r    r    ø   sŸ   € å�•dÑÔð Ø€HØ—j’j‘l”lð 9ð 9‰
ˆˆUÝ	�C�Ñ	Ô	ð Ý  Ñ%Ô%ˆˆàˆÝ1°%Ñ8Ô8€hˆwÑÐØ€OÝ�$�ÑÔð Ø;Ð;°dÐ;Ñ;Ô;Ð;à€Kr   )%r„   Újsonrd   rl   Útypingr   r   Úpydanticr   r   r   r.   r‘   rX   r	   r
   r   r-   r   Úis_api_moder   Úboolr   r¤   rH   rM   rq   rS   r�   Útyper:   r6   r8   r“   r™   r�   r    r   r   r   ú<module>r°      sä  ðð" Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à3€ðð ð ð ð �EÔ'ñ ô ð ð>àð>ð ð>ð ð	>ð
 #ð>ð ˜3 ˜8”nð>ð >ð >ð >ðBØ˜3 ˜8”nðàðð #ðð ð ð ðØ˜3 ˜8”nðàðð �]Ô#ðð ð ð ð> 26Ø!%Ø04Ø*.ð=ð =ð =à
ð=ð ˜t C¨ Hœ~Ô.ð=ð ˜#”ð	=ð
 ˜˜mÔ,Ô-ð=ð ˜;Ô'ð=ð =ð =ð =ð@)¨t°I¬ð )ð )ð )ð )ð$°°Y´ð $ð $ð $ð $ðQ˜cð Q cð Qð Qð Qð Qð
C˜cð C cð Cð Cð Cð Cð
Jð Jð Jð
ð ð ð ð r   