§
    ìŽ’jz`  ã                   óÆ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZmZmZmZm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d	lmZ dd
lmZmZ dedefd„Zdedefd„Z dedede!fd„Z"dedefd„Z#dedefd„Z$de%eef         de%eef         fd„Z&dedefd„Z'dedefd„Z(deddfd„Z)deddfd „Z*defd!„Z+d"eddfd#„Z,de%eef         ddfd$„Z-ej.        d%d&deded         fd'„¦   «         Z/ej0        d%d&deded         fd(„¦   «         Z1 G d)„ d*e¦  «        Z2 G d+„ d,e¦  «        Z3 G d-„ d.e¦  «        Z4 G d/„ d0e¦  «        Z5 G d1„ d&e¦  «        Z6dS )2zReplay API client.é    N)ÚAnyÚLiteralÚOptionalÚUnionÚIteratorÚAsyncIteratoré   )Úerrors)ÚBaseApiClient)ÚHttpRequest)ÚHttpResponse)Ú	BaseModel)ÚHttpOptionsÚHttpOptionsOrDictÚnameÚreturnc                 óÆ   — t          | t          ¦  «        st          | ¦  «        } t          j        dd| ¦  «        }t          j        dd|¦  «                             ¦   «         S )z=Converts a string from camelCase or PascalCase to snake_case.z(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))Ú
isinstanceÚstrÚreÚsubÚlower)r   Ús1s     úMC:\Projects\DSCons\.venv\Lib\site-packages\google\genai\_replay_api_client.pyÚto_snake_caser   '   sV   € õ 
�D�#Ñ	Ô	ð Ýˆt‰9Œ9€DÝ	„vÐ  (¨DÑ1Ô1€"Ý	ŒÐ# X¨rÑ	2Ô	2×	8Ò	8Ñ	:Ô	:Ð:ó    Úobjc                 ó²  — t          | t          ¦  «        rPi }|                      ¦   «         D ]7\  }}t          |¦  «        }t	          |¦  «        }|dk    r	|i k    s|€Œ2|||<   Œ8|S t          | t
          ¦  «        rd„ | D ¦   «         S t          | t          j        ¦  «        r| j        S t          | t          ¦  «        rd| v r|  
                    dd¦  «        S | S )NÚgeneration_configc                 ó,   — g | ]}t          |¦  «        ‘ŒS © ©Ú_normalize_json_case)Ú.0Úitems     r   ú
<listcomp>z(_normalize_json_case.<locals>.<listcomp>;   s!   € Ð7Ð7Ð7¨4Õ  Ñ&Ô&Ð7Ð7Ð7r   zdivision by zeroz"integer division or modulo by zero)r   ÚdictÚitemsr   r#   ÚlistÚenumÚEnumÚvaluer   Úreplace)r   ÚresÚkÚvÚnorm_kÚnorm_vs         r   r#   r#   0   sû   € Ý�•TÑÔð Ø
€CØ—	’	‘”ð ð ‰ˆˆ1Ý˜QÑÔ€fÝ# AÑ&Ô&€fØ	Ð&Ò	&Ð	&¨F°bªL¨L¸F¸NØØ€cˆ&�k€kØ€JÝ�#•tÑÔð 	Ø7Ð7°3Ð7Ñ7Ô7Ð7Ý�#•t”yÑ!Ô!ð ØŒ9ÐÝ�#•sÑÔð à˜SÐ Ð Ø�[Š[Ø
ÐBñô ð ð 
€*r   Úobj1Úobj2c                 óR   — t          | ¦  «        }t          |¦  «        }||k    rdS dS )aÉ  Compares two Python objects for equality ignoring key casing.

  Returns:
      bool: True if the two objects are equal regardless of key casing
  (camelCase vs. snake_case). For example, the following are considered equal:

  {'my_key': 'my_value'}
  {'myKey': 'my_value'}

  This also considers enums and strings with the same value as equal.
  For example, the following are considered equal:

  {'type': <Type.STRING: 'STRING'>}}
  {'type': 'STRING'}
  TFr"   )r3   r4   Únormalized_obj_1Únormalized_obj_2s       r   Ú_equals_ignore_key_caser8   G   s6   € õ" *¨$Ñ/Ô/ÐÝ)¨$Ñ/Ô/ÐàÐ)Ò)Ð)Øˆ4àˆ5r   Úversion_stringc                 ó.   — t          j        dd| ¦  «        S )z8Redacts version numbers in the form x.y.z from a string.z\d+\.\d+\.\d+[a-zA-Z0-9]*z{VERSION_NUMBER}©r   r   )r9   s    r   Ú_redact_version_numbersr<   a   s   € å	ŒÐ,Ð.@À.Ñ	QÔ	QÐQr   Úlanguage_labelc                 ó.   — t          j        dd| ¦  «        S )z;Removed because replay requests are used for all languages.z
gl-python/z{LANGUAGE_LABEL}/r;   )r=   s    r   Ú_redact_language_labelr?   f   s   € å	Œ�Ð2°NÑ	CÔ	CÐCr   Úheadersc                 ón  — i }|                       ¦   «         D �]\  }}|                     ¦   «         dk    rd||<   Œ$|                     ¦   «         dk    rHt          t          |¦  «        ¦  «                             dd¦  «                             dd¦  «        ||<   Œ„|                     ¦   «         dk    rHt          t          |¦  «        ¦  «                             dd¦  «                             dd¦  «        ||<   Œä|                     ¦   «         d	k    rŒý|                     ¦   «         d
k    r�Œ|||<   �Œ|S )z,Redacts headers that should not be recorded.zx-goog-api-keyz
{REDACTED}z
user-agentzagentplatform-genai-moduleszvertex-genai-modulesz
+nonsourceÚ zx-goog-api-clientzx-goog-user-projectÚauthorization)r(   r   r?   r<   r-   )r@   Úredacted_headersÚheader_nameÚheader_values       r   Ú_redact_request_headersrG   k   sH  € àÐØ#*§=¢=¡?¤?ð 3ñ 3Ñ€k�<Ø×ÒÑÔÐ.Ò.Ð.Ø&2Ð�{Ñ#Ð#Ø	×	Ò	Ñ	Ô	 Ò	,Ð	,å
 Õ!8¸Ñ!FÔ!FÑ
GÔ
GßŠ7Ð0Ð2HÑIÔIßŠ7�< Ñ$Ô$ð �{Ñ#Ð#ð
 
×	Ò	Ñ	Ô	Ð 3Ò	3Ð	3å
 Õ!8¸Ñ!FÔ!FÑ
GÔ
GßŠ7Ð0Ð2HÑIÔIßŠ7�< Ñ$Ô$ð �{Ñ#Ð#ð
 
×	Ò	Ñ	Ô	Ð 5Ò	5Ð	5ØØ	×	Ò	Ñ	Ô	 Ò	/Ð	/Ùà&2Ð�{Ñ#Ñ#Ø	Ðr   Úurlc                 ó¶   — t          j        dd| ¦  «        }t          j        dd|¦  «        }t          j        dd|¦  «        }t          j        dd|¦  «        }|S )Nz".*/projects/[^/]+/locations/[^/]+/z{VERTEX_URL_PREFIX}/z#.*-aiplatform.googleapis.com/[^/]+/z".*aiplatform.googleapis.com/[^/]+/z+.*generativelanguage.*.googleapis.com/[^/]+z{MLDEV_URL_PREFIX}r;   )rH   Úresults     r   Ú_redact_request_urlrK   †   sy   € õ Œ6Ø+ØØ	ñô €&õ
 Œ6Ø,ØØñô €&õ
 Œ6Ø+ØØñô €&õ
 Œ6Ø4ØØñô €&ð
 
€-r   Úpathc                 óF   — d| v rd| v rt          j        dd| ¦  «        }|S | S )Nz	projects/z
locations/zprojects/[^/]+/locations/[^/]+/z{PROJECT_AND_LOCATION_PATH}/r;   )rL   rJ   s     r   Ú_redact_project_location_pathrN       s?   € ð �DÐÐ˜\¨TÐ1Ð1ÝŒVØ*Ø&Øñô €Fð
 €Mà€Kr   Úbodyc                 ól  — t          | t          ¦  «        r‡|                      ¦   «         D ]p\  }}t          |t          ¦  «        r+t	          |¦  «        }t          j        dd|¦  «        }|| |<   ŒEt          |t          t          f¦  «        rt          |¦  «         ŒqdS t          | t          ¦  «        r€t          | ¦  «        D ]r\  }}t          |t          ¦  «        r+t	          |¦  «        }t          j        dd|¦  «        }|| |<   ŒEt          |t          t          f¦  «        rt          |¦  «         ŒqdS dS )z,Redacts fields in the request body in place.z<[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}z{UUID}N)
r   r'   r(   r   rN   r   r   r)   Ú_redact_request_bodyÚ	enumerate)rO   Úkeyr,   Úis       r   rQ   rQ   ®   sP  € å�•dÑÔð $Ø—j’j‘l”lð 
$ð 
$‰
ˆˆUÝ	�E�3Ñ	Ô	ð 	$Ý-¨eÑ4Ô4ˆÝ”ØKØØñ
ô 
ˆð
 ˆˆS‰	ˆ	Ý�e�d¥D˜\Ñ*Ô*ð $Ý˜UÑ#Ô#Ð#øð
$ð 
$õ �$�ÑÔð $Ý˜d‘O”Oð 
$ð 
$‰ˆˆ5Ý	�E�3Ñ	Ô	ð 	$Ý-¨eÑ4Ô4ˆÝ”ØKØØñ
ô 
ˆð
 ˆˆQ‰ˆÝ�e�d¥D˜\Ñ*Ô*ð $Ý˜UÑ#Ô#Ð#øð$ð $ð
$ð 
$r   Úhttp_requestc                 óÊ   — t          | j        ¦  «        | _        t          | j        ¦  «        | _        t	          | j        t          ¦  «        st          | j        ¦  «         d S d S ©N)rG   r@   rK   rH   r   ÚdataÚbytesrQ   )rU   s    r   Úredact_http_requestrZ   Ê   s^   € Ý0°Ô1EÑFÔF€,ÔÝ(¨Ô)9Ñ:Ô:€,ÔÝ	�LÔ%¥uÑ	-Ô	-ð ,Ý˜Ô*Ñ+Ô+Ð+Ð+Ð+ð,ð ,r   c                  ó´   — t          j        ¦   «         } | �B| j        �;| j        j        �/| j        j        }t          j        |¦  «        }|j        }d|› d|› �S dS )z-Prints the current file path and line number.NzFile: z, Line: rB   )ÚinspectÚcurrentframeÚf_backÚgetfileÚf_lineno)Úcurrent_frameÚframeÚfilepathÚlinenos       r   Ú_current_file_path_and_linere   Ñ   sg   € åÔ&Ñ(Ô(€-àÐØ
Ô
Ð
*Ø
Ô
Ô
%Ð
1àÔ Ô'€EÝŒ˜uÑ%Ô%€HØŒ^€FØ.�HÐ.Ð. fÐ.Ð.Ð.Ø	ˆr   Úmessagec                 ó€   — t          dt          j                             d¦  «        dt	          ¦   «         d| ¦  «         d S )NzDEBUG (testÚPYTEST_CURRENT_TESTú)z:
    )ÚprintÚosÚenvironÚgetre   )rf   s    r   Ú_debug_printrn   à   sE   € ÝØÝ„j‡n‚nÐ*Ñ+Ô+Ø	Ý!Ñ#Ô#ØØñô ð ð ð r   c                 ó^   — |                       dd¦  «         |                       dd¦  «         dS )z*Remove headers that are not deterministic.ÚDateNzServer-Timing)Úpop)r@   s    r   Úpop_undeterministic_headersrr   ë   s0   € à	‡+‚+ˆf�dÑÔÐØ	‡+‚+ˆo˜tÑ$Ô$Ð$Ð$Ð$r   ÚclientÚReplayApiClientc              #   ór   K  — 	 d V — d S # t           j        $ r}|                      ||¦  «         |‚d }~ww xY wrW   ©r
   ÚAPIErrorÚ_record_interaction©rs   rU   Úes      r   Ú_record_on_api_errorr{   ñ   sT   è è € ðØ	€E€E€E€E€EøÝ	Œð ð ð Ø
×Ò˜|¨QÑ/Ô/Ð/Ø
€Gøøøøðøøøs   „
 Š6™1±6c                ót   K  — 	 d W V — d S # t           j        $ r}|                      ||¦  «         |‚d }~ww xY wrW   rv   ry   s      r   Ú_async_record_on_api_errorr}   ù   sV   è è € ðØ	€E€E€E€E€E€EøÝ	Œð ð ð Ø
×Ò˜|¨QÑ/Ô/Ð/Ø
€Gøøøøðøøøs   „ ‹7š2²7c                   óh   — e Zd ZU dZeed<   eed<   eeef         ed<   eeeef                  ed<   dS )ÚReplayRequestz(Represents a single request in a replay.ÚmethodrH   r@   Úbody_segmentsN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r'   r)   Úobjectr!   r   r   r   r     sX   € € € € € € Ø0Ð0à
€+€+�+Ø
€(€(�(Ø��S�Œ>ÐÐÑØ�d˜3 ˜;Ô'Ô(Ð(Ð(Ñ(Ð(Ð(r   r   c                   ó¾   — e Zd ZU dZdZeed<   eeef         ed<   e	eee
f                  ed<   dZee	e                  ed<   e	eee
f                  ed<   d	ed
dfd„ZdS )ÚReplayResponsez)Represents a single response in a replay.éÈ   Ústatus_coder@   r�   NÚbyte_segmentsÚsdk_response_segmentsÚ_ReplayResponse__contextr   c                 ó.   — t          | j        ¦  «         d S rW   )rr   r@   )ÚselfrŽ   s     r   Úmodel_post_initzReplayResponse.model_post_init  s   € Ý ¤Ñ-Ô-Ð-Ð-Ð-r   )r‚   rƒ   r„   r…   r‹   Úintr†   r'   r   r)   r‡   rŒ   r   rY   r   r‘   r!   r   r   r‰   r‰   
  s¯   € € € € € € Ø1Ð1à€+ˆsÐÐÑØ��S�Œ>ÐÐÑØ�d˜3 ˜;Ô'Ô(Ð(Ð(Ñ(Ø)-€-�˜$˜uœ+Ô&Ð-Ð-Ñ-Ø˜d 3¨ ;Ô/Ô0Ð0Ð0Ñ0ð. sð .¨tð .ð .ð .ð .ð .ð .r   r‰   c                   ó(   — e Zd ZU dZeed<   eed<   dS )ÚReplayInteractionzBRepresents a single interaction, request and response in a replay.ÚrequestÚresponseN)r‚   rƒ   r„   r…   r   r†   r‰   r!   r   r   r”   r”     s0   € € € € € € ØJÐJàÐÐÑØÐÐÑÐÐr   r”   c                   ó4   — e Zd ZU dZeed<   ee         ed<   dS )Ú
ReplayFilezRepresents a recorded session.Ú	replay_idÚinteractionsN)r‚   rƒ   r„   r…   r   r†   r)   r”   r!   r   r   r˜   r˜     s3   € € € € € € Ø&Ð&à€.€.�.ØÐ&Ô'Ð'Ð'Ñ'Ð'Ð'r   r˜   c                   óú  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 d.ded         dedee         ded	ee         d
eej	        j
        j                 dee         dee         dee         defˆ fd„Zdeddfd„Zdefd„Zdefd„Zdefd„Zd/d„Zd/d„Zdee         dedefd„Zd/d„Zdedeeej        ef         ddfd„Zdededdfd„Zdedefd„Zd e ddfd!„Z!	 	 d0dedee"         d"edefˆ fd#„Z#	 	 d0dedee"         d"edefˆ fd$„Z$dd%œd&eee%j&        f         d'ed(e'dee"         def
ˆ fd)„Z(dd%œd&eee%j&        f         d'ed(e'dee"         def
ˆ fd*„Z)dd%œd+edee"         deeee*f         fˆ fd,„Z+dd%œd+edee"         de*fˆ fd-„Z,ˆ xZ-S )1rt   zFFor integration testing, send recorded response or records a response.NFÚmode)ÚrecordÚreplayÚautoÚapir™   Úreplays_directoryÚvertexaiÚapi_keyÚcredentialsÚprojectÚlocationÚhttp_optionsÚprivatec                 óô   •— t          ¦   «                              ||||||	¬¦  «         || _        | j        s%t          j                             dd ¦  «        | _        d | _        || _        || _        |
| _	        d S )N)r¢   r£   r¤   r¥   r¦   r§   ÚGOOGLE_GENAI_REPLAYS_DIRECTORY)
ÚsuperÚ__init__r¡   rk   rl   rm   Úreplay_sessionÚ_modeÚ
_replay_idÚ_private)r�   rœ   r™   r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   Ú	__class__s              €r   r¬   zReplayApiClient.__init__(  s�   ø€ õ 
�G„G×ÒØØØØØØ!ð ñ ô ð ð /€DÔØÔ!ð Ý!œzŸ~š~Ø
*¨Dñ ô  €dÔð 48€DÔØ€D„JØ€D„OØ€D„M€M€Mr   r   c                 ó<   — || _         |                      ¦   «          d S rW   )r¯   Ú_initialize_replay_session)r�   r™   s     r   Úinitialize_replay_sessionz)ReplayApiClient.initialize_replay_sessionH  s!   € Ø€D„OØ×#Ò#Ñ%Ô%Ð%Ð%Ð%r   c                 óB   — |                       | j        | j        ¦  «        S rW   )Ú"_generate_file_path_from_replay_idr¡   r¯   ©r�   s    r   Ú_get_replay_file_pathz%ReplayApiClient._get_replay_file_pathL  s$   € Ø×2Ò2ØÔ ¤ñô ð r   c                 óŽ   — | j         dv p<| j         dk    o1t          j                             |                      ¦   «         ¦  «         S )N)r�   r    rŸ   )r®   rk   rL   Úisfiler¸   r·   s    r   Ú_should_call_apiz ReplayApiClient._should_call_apiQ  sF   € ØŒ:Ð*Ð*ð ØŒ
�fÒð 	=Ý”—’˜t×9Ò9Ñ;Ô;Ñ<Ô<Ð<ðr   c                 ó@   — |                       ¦   «         o
| j        dk    S )Nr    )r»   r®   r·   s    r   Ú_should_update_replayz%ReplayApiClient._should_update_replayW  s    € Ø× Ò Ñ"Ô"Ð: t¤z°UÒ':Ð:r   c                 ó@   — | j         s|                      ¦   «          d S d S rW   )r­   r³   r·   s    r   Ú(_initialize_replay_session_if_not_loadedz8ReplayApiClient._initialize_replay_session_if_not_loadedZ  s/   € ØÔð (Ø
×%Ò%Ñ'Ô'Ð'Ð'Ð'ð(ð (r   c                 óL  — t          d| j        z   ¦  «         d| _        d| _        |                      ¦   «         }t
          j                             |¦  «        }| j        dk    r|st          d| j        z   ¦  «        ‚| j        dv rm|rkt          |d¦  «        5 }t                               t          j        |                     ¦   «         ¦  «        ¦  «        | _        d d d ¦  «         n# 1 swxY w Y   |                      ¦   «         rt          | j        g ¬¦  «        | _        d S d S )NzTest is using replay id: r   rž   z)Replay files do not exist for replay id: )rž   rŸ   Úr)r™   rš   )rn   r¯   Ú_replay_indexÚ_sdk_response_indexr¸   rk   rL   rº   r®   Ú
ValueErrorÚopenr˜   Úmodel_validateÚjsonÚloadsÚreadr­   r½   )r�   Úreplay_file_pathÚreplay_file_existsÚfs       r   r³   z*ReplayApiClient._initialize_replay_session^  ss  € ÝÐ,¨t¬Ñ>Ñ?Ô?Ð?Ø€DÔØ €DÔØ×1Ò1Ñ3Ô3ÐåœŸšÐ(8Ñ9Ô9ÐØ„z�XÒÐÐ&8ÐÝØ
5¸¼Ñ
Gñô ð ð „zÐ'Ð'Ð'Ð,>Ð'ÝÐ  #Ñ&Ô&ð N¨!Ý(×7Ò7½¼
À1Ç6Â6Á8Ä8Ñ8LÔ8LÑMÔMˆÔðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nð ×!Ò!Ñ#Ô#ð Ý&Ø”O°"ðñ ô €dÔÐÐðð s   ÂAC(Ã(C,Ã/C,Úreplay_directoryc                 óÜ   — |                      d¦  «        }t          |¦  «        dk     rt          |› d�¦  «        ‚|€g }n|g}|                     |¦  «         t	          j        j        |Ž dz   S )Nú/é   zD: Session ID must be in the format of module/function/[vertex|mldev]z.json)ÚsplitÚlenrÄ   Úextendrk   rL   Újoin)r�   rÍ   r™   Úsession_partsÚ
path_partss        r   r¶   z2ReplayApiClient._generate_file_path_from_replay_ids  s‰   € Ø—O’O CÑ(Ô(€MÝ
ˆ=ÑÔ˜AÒÐÝØð ,ð ,ð ,ñô ð ð ÐØ€j€jà$Ð%€jØ×Ò�mÑ$Ô$Ð$ÝŒ7Œ<˜Ð$ wÑ.Ð.r   c                 óŠ  — |                       ¦   «         r| j        sd S |                      ¦   «         }t          j        t          j                             |¦  «        d¬¦  «         t          |d¦  «        5 }|                     | j         	                    dd¬¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   d | _        d S )NT)Úexist_okÚwé   )Úexclude_unsetÚindent)
r½   r­   r¸   rk   ÚmakedirsrL   ÚdirnamerÅ   ÚwriteÚmodel_dump_json)r�   rÊ   rÌ   s      r   ÚclosezReplayApiClient.close�  s  € Ø×%Ò%Ñ'Ô'ð ¨tÔ/Bð Ø€fØ×1Ò1Ñ3Ô3ÐÝ„K•”—’Ð 0Ñ1Ô1¸DÐAÑAÔAÐAÝ	Ð Ñ	$Ô	$ð Q¨Ø‡g‚gˆdÔ!×1Ò1ÀÈQÐ1ÑOÔOÑPÔPÐPðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qà€DÔÐÐs   Á50B1Â1B5Â8B5rU   Úhttp_responsec                 ó†  — |                       ¦   «         sd S t          |¦  «         t          |j        |j        |j        |j        g¬¦  «        }t          |t          ¦  «        rgt          t          |j        ¦  «        t          |                     ¦   «         ¦  «        d„ |                     ¦   «         D ¦   «         |j        g ¬¦  «        }n³t          |t          j        ¦  «        rCt          t          |j        j        ¦  «        |                     ¦   «         g|j        g ¬¦  «        }nVt          |t(          ¦  «        rt          i g |gg ¬¦  «        }n,t+          dt-          t/          |¦  «        ¦  «        z   ¦  «        ‚| j        €t+          d¦  «        ‚| j        j                             t7          ||¬¦  «        ¦  «         d S )	N)r€   rH   r@   r�   c                 ó(   — g | ]}|d d…         dz   ‘ŒS )Néd   s   ...r!   )r$   Úsegs     r   r&   z7ReplayApiClient._record_interaction.<locals>.<listcomp>œ  s2   € ð ð ð Ø%(ˆc�$�3�$Œi˜&Ñ ðð ð r   )r@   r�   rŒ   r‹   r�   )r@   r�   r‹   r�   )r@   r�   rŒ   r�   z Unsupported http_response type: úNo replay session found.)r•   r–   )r½   rZ   r   r€   rH   r@   rX   r   r   r‰   r'   r)   ÚsegmentsrŒ   r‹   r
   rw   r–   Ú_to_replay_recordÚcoderY   rÄ   r   Útyper­   rš   Úappendr”   )r�   rU   râ   r•   r–   s        r   rx   z#ReplayApiClient._record_interactionŠ  sê  € ð
 ×%Ò%Ñ'Ô'ð Ø€fÝ˜Ñ%Ô%Ð%ÝØÔ"ØÔØÔ$Ø#Ô(Ð)ð	ñ ô €Gõ �-¥Ñ.Ô.ð ÝÝ�}Ô,Ñ-Ô-Ý˜]×3Ò3Ñ5Ô5Ñ6Ô6ðð Ø,9×,GÒ,GÑ,IÔ,Iðñ ô ð $Ô/Ø "ðñ ô €h€hõ 
�M¥6¤?Ñ	3Ô	3ð ÝÝ�}Ô-Ô5Ñ6Ô6Ø&×8Ò8Ñ:Ô:Ð;Ø#Ô(Ø "ð	ñ ô €h€hõ 
�M¥5Ñ	)Ô	)ð 
ÝØØØ&˜Ø "ð	ñ ô €h€hõ Ø
,­sµ4¸Ñ3FÔ3FÑ/GÔ/GÑ
Gñô ð ð ÔÐ"ÝÐ1Ñ2Ô2Ð2ØÔÔ$×+Ò+Ý '°HÐ=Ñ=Ô=ñô ð ð ð r   Úinteractionc                 ó  — t          d|j        › �¦  «         t          d|j        j        › �¦  «         |j        |j        j        k    sJ ‚|j        |j        j        k    sJ ‚t	          j        |j        ¦  «        }t          |t          ¦  «        st          |¦  «         |g}t	          j        |j        j
        ¦  «        }|D ]&}t          |t          ¦  «        st          |¦  «         Œ't          ||¦  «        sJ d|› d|› �¦   «         ‚d S )Nzhttp_request.url: zinteraction.request.url: zRequest body mismatch:
Actual: ú
Expected: )rn   rH   r•   r€   ÚcopyÚdeepcopyrX   r   rY   rQ   r�   r8   )r�   rU   rí   Úrequest_data_copyÚactual_request_bodyÚexpected_request_bodyÚsegments          r   Ú_match_requestzReplayApiClient._match_requestº  sH  € õ
 Ð8 lÔ&6Ð8Ð8Ñ9Ô9Ð9ÝÐF¨[Ô-@Ô-DÐFÐFÑGÔGÐGØÔ˜{Ô2Ô6Ò6Ð6Ð6Ð6ð Ô +Ô"5Ô"<Ò<Ð<Ð<Ð<õ œ lÔ&7Ñ8Ô8Ðõ Ð'­Ñ/Ô/ð .ÝÐ,Ñ-Ô-Ð-à,Ð-ÐÝ œM¨+Ô*=Ô*KÑLÔLÐØ(ð &ð &ˆÝ˜¥Ñ'Ô'ð &Ý˜WÑ%Ô%Ð%øÝ"Ð#6Ð8MÑNÔNð ð ð	-Ø&ð	-ð 	-à*ð	-ð 	-ñô ÐNð ð r   c                 ó¼  — t          |¦  «         | j        €t          d¦  «        ‚| j        j        | j                 }|                      ||¦  «         | xj        dz  c_        d| _        t          j         	                    |j
        ¦  «         t          |j
        j        d„ |j
        j        D ¦   «         |j
        j        ¬¦  «        }|j        dgk    rdg|_        |S )Nrç   r	   r   c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r!   )rÇ   Údumps)r$   rõ   s     r   r&   z?ReplayApiClient._build_response_from_replay.<locals>.<listcomp>ê  s2   € ð 
ð 
ð 
àõ ŒJ�wÑÔð
ð 
ð 
r   )r@   Úresponse_streamÚbyte_streamz{}rB   )rZ   r­   rÄ   rš   rÂ   rö   rÃ   r
   rw   Úraise_for_responser–   r   r@   r�   rŒ   rú   )r�   rU   rí   râ   s       r   Ú_build_response_from_replayz+ReplayApiClient._build_response_from_replayÝ  sò   € Ý˜Ñ%Ô%Ð%àÔÐ"ÝÐ1Ñ2Ô2Ð2ØÔ%Ô2°4Ô3EÔF€Kà×Ò˜ kÑ2Ô2Ð2ØÐÔ˜!ÑÐÔØ €DÔÝ
„O×&Ò& {Ô';Ñ<Ô<Ð<Ý ØÔ$Ô,ð
ð 
à&Ô/Ô=ð
ñ 
ô 
ð  Ô(Ô6ðñ ô €Mð Ô$¨¨Ò.Ð.Ø') d€mÔ#ØÐr   Úresponse_modelc                 ó¸  — | j         dk    rd S | j        st          d¦  «        ‚| j        j        | j        dz
           }|                      ¦   «         r‰t          |t          ¦  «        r|d         }t          |dd ¦  «        }|r$|�"t          |dd ¦  «        }|rt          |¦  «         |j
        j                             |                     d¬¦  «        ¦  «         d S t          |t          ¦  «        r|d         }t          d	|                     d¬¦  «        › �¦  «         |                     dd
¬¦  «        }|j
        j        | j                 }t          |t           ¦  «        r¶d|v r²t          |d         t           ¦  «        r—d|d         v r�|d         d         }t          dt#          |¦  «        › �¦  «         t          d|› �¦  «         t          |t$          ¦  «        r9|dk    r3t'          j        |¦  «        }t'          j        |¦  «        }||d         d<   | j        s||k    sJ d|› d|› �¦   «         ‚nt          d|› d|› �¦  «         | xj        dz  c_        d S )Nr    rç   r	   r   Úsdk_http_responser@   T)Úexclude_nonezresponse_model: rÇ   )r  rœ   rO   zraw_body length: z
raw_body: rB   zSDK response mismatch:
Actual: rï   z(Expected SDK response mismatch:
Actual: )r®   r­   rÄ   rš   rÂ   r½   r   r)   Úgetattrrr   r–   r�   rì   Ú
model_dumprn   rÃ   r'   rÒ   r   rÇ   rÈ   rù   r°   )r�   rþ   rí   Úsdk_response_responser@   ÚactualÚexpectedÚraw_bodys           r   Ú_verify_responsez ReplayApiClient._verify_responseô  sÆ  € Ø„z�UÒÐØ€fØÔð 3ÝÐ1Ñ2Ô2Ð2àÔ%Ô2°4Ô3EÈÑ3IÔJ€KØ×!Ò!Ñ#Ô#ð Ý	�N¥DÑ	)Ô	)ð +Ø'¨Ô*ˆÝ% nÐ6IÈ4ÑPÔPÐØ	ð /Ø
Ð
+åØ! 9¨dñ
ô 
ˆð ð 	/Ý
% gÑ
.Ô
.Ð
.ØÔÔ0×7Ò7Ø
×
#Ò
#°Ð
#Ñ
6Ô
6ñô ð ð €få�.¥$Ñ'Ô'ð )Ø% aÔ(€nÝØI˜>×4Ò4À$Ð4ÑGÔGÐIÐIñô ð ð ×&Ò&°D¸vÐ&ÑFÔF€FØÔ#Ô9ØÔ ô€Hõ
 �(�DÑ!Ô!ð =Ø	 Ð	(Ð	(­ZØ
Ð&Ô
'­ñ.ô .Ð	(ð �XÐ1Ô2Ð2Ð2ØÐ1Ô2°6Ô:ˆ(Ý
Ð:­3¨x©=¬=Ð:Ð:Ñ
;Ô
;Ð
;Ý
Ð. HÐ.Ð.Ñ
/Ô
/Ð
/Ý˜¥#Ñ&Ô&ð =¨8°rª>¨>Ý”z (Ñ+Ô+ˆHÝ”z (Ñ+Ô+ˆHØ4<ˆHÐ(Ô)¨&Ñ1ØŒ=ð _à
�HÒ
Ð
Ð
Ø	J¨FÐ	JÐ	JÀÐ	JÐ	Jñ Ô
Ð
Ð
õ Ð]¸vÐ]Ð]ÐS[Ð]Ð]Ñ^Ô^Ð^ØÐÔ Ñ!ÐÔÐÐr   Ústreamc                 ór  •— |                       ¦   «          |                      ¦   «         rút          d|z  ¦  «         t          | |¦  «        5  t	          ¦   «                              |||¦  «        }d d d ¦  «         n# 1 swxY w Y   |rlg }|                     ¦   «         D ])}|                     t          j	        |¦  «        ¦  «         Œ*t          |j        |¦  «        }|                      ||¦  «         n|                      ||¦  «         t          d|j        z  ¦  «         |S |                      |¦  «        S ©Nzapi mode request: %szapi mode result: %s)r¿   r»   rn   r{   r«   Ú_requestrè   rì   rÇ   rù   r   r@   rx   rý   ©r�   rU   r§   r	  rJ   Úresult_segmentsrõ   r±   s          €r   r  zReplayApiClient._request+  sˆ  ø€ ð 	×1Ò1Ñ3Ô3Ð3Ø×ÒÑÔð <ÝÐ)¨LÑ8Ñ9Ô9Ð9Ý  lÑ3Ô3ð Fð FÝ‘”×!Ò! ,°¸fÑEÔEˆðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fà	ð 	7ØˆØ—’Ñ(Ô(ð 	6ð 	6ˆGØ
×
 Ò
 ¥¤¨GÑ!4Ô!4Ñ
5Ô
5Ð
5Ð
5Ý˜fœn¨oÑ>Ô>ˆØ× Ò  ¨vÑ6Ô6Ð6Ð6ð 	× Ò  ¨vÑ6Ô6Ð6ÝÐ(¨6¬;Ñ6Ñ7Ô7Ð7Ø€mà×-Ò-¨lÑ;Ô;Ð;s   Á$A<Á<B ÂB c              ƒ   ó´  •K  — |                       ¦   «          |                      ¦   «         �rt          d|z  ¦  «         t          | |¦  «        4 ƒd {V —† t	          ¦   «                              |||¦  «        ƒ d {V —†}d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   |rrg }|                     ¦   «         2 3 d {V —†}|                     t          j	        |¦  «        ¦  «         Œ/6 t          |j        |¦  «        }|                      ||¦  «         n|                      ||¦  «         t          d|j        z  ¦  «         |S |                      |¦  «        S r  )r¿   r»   rn   r}   r«   Ú_async_requestÚasync_segmentsrì   rÇ   rù   r   r@   rx   rý   r  s          €r   r  zReplayApiClient._async_requestE  s  øè è € ð 	×1Ò1Ñ3Ô3Ð3Ø×ÒÑÔñ <ÝÐ)¨LÑ8Ñ9Ô9Ð9Ý+¨D°,Ñ?Ô?ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
Ý‘w”w×-Ò-Ø˜,¨ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 	7ØˆØ#×2Ò2Ñ4Ô4ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6�'Ø
×
 Ò
 ¥¤¨GÑ!4Ô!4Ñ
5Ô
5Ð
5Ð
5ð 5å˜fœn¨oÑ>Ô>ˆØ× Ò  ¨vÑ6Ô6Ð6Ð6ð 	× Ò  ¨vÑ6Ô6Ð6ÝÐ(¨6¬;Ñ6Ñ7Ô7Ð7Ø€mà×-Ò-¨lÑ;Ô;Ð;s   Á*BÂ
BÂBÂ:C)©r§   Ú	file_pathÚ
upload_urlÚupload_sizec                ó„  •— t          |t          j        ¦  «        rƒ|                     ¦   «         }|                     ¦   «         }|                     |t          j        ¦  «         t          dddt          j
        |¦  «                             d¦  «        ii ¬¦  «        }nt          ddd|ii ¬¦  «        }|                      ¦   «         ret          | |¦  «        5  t          ¦   «                              ||||¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «         |S |                      |¦  «        S ©NÚPOSTrB   rY   zutf-8)r€   rH   rX   r@   r  r  )r   ÚioÚIOBaseÚtellrÉ   Úseekrk   ÚSEEK_SETr   Úbase64Ú	b64encodeÚdecoder»   r{   r«   Úupload_filerx   rý   ©
r�   r  r  r  r§   ÚoffsetÚcontentr•   rJ   r±   s
            €r   r!  zReplayApiClient.upload_filea  s„  ø€ õ �)�RœYÑ'Ô'ð Ø�~Š~ÑÔ€fØ—’Ñ Ô €gØ‡n‚n�V�Rœ[Ñ)Ô)Ð)ÝØØØ�Ô)¨'Ñ2Ô2×9Ò9¸'ÑBÔBÐCØð	ñ ô €g€gõ Ø˜R {°IÐ&>Èðñ ô €gð ×ÒÑÔð 	7å  gÑ.Ô.ð 
ð 
Ý‘”×$Ò$Ø�z ;¸\ð %ñ 
ô 
ˆð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð ×Ò˜w¨Ñ/Ô/Ð/Ø€mà×-Ò-¨gÑ6Ô6Ð6s   Ã&D
Ä
DÄDc             ƒ   ó¸  •K  — t          |t          j        ¦  «        rƒ|                     ¦   «         }|                     ¦   «         }|                     |t          j        ¦  «         t          dddt          j
        |¦  «                             d¦  «        ii ¬¦  «        }nt          ddd|ii ¬¦  «        }|                      ¦   «         r}t          | |¦  «        4 ƒd {V —† t          ¦   «                              ||||¬¦  «        ƒ d {V —†}d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   |                      ||¦  «         |S |                      |¦  «        S r  )r   r  r  r  rÉ   r  rk   r  r   r  r  r   r»   r}   r«   Úasync_upload_filerx   rý   r"  s
            €r   r&  z!ReplayApiClient.async_upload_file‚  s   øè è € õ �)�RœYÑ'Ô'ð Ø�~Š~ÑÔ€fØ—’Ñ Ô €gØ‡n‚n�V�Rœ[Ñ)Ô)Ð)ÝØØØ�Ô)¨'Ñ2Ô2×9Ò9¸'ÑBÔBÐCØð	ñ ô €g€gõ Ø˜R {°IÐ&>Èðñ ô €gð ×ÒÑÔð 	7å+¨D°'Ñ:Ô:ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
Ý‘w”w×0Ò0Ø�z ;¸\ð 1ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð ×Ò˜w¨Ñ/Ô/Ð/Ø€mà×-Ò-¨gÑ6Ô6Ð6s   Ã ,DÄ
D(Ä+D(rL   c                óŒ  •— |                       ¦   «          |                      d|i |¬¦  «        }|                      ¦   «         rct          | |¦  «        5  t	          ¦   «                              ||¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «         |S |                      |¦  «        j        d         S ©Nrm   )rL   Úrequest_dictr§   r  r   )	r¿   Ú_build_requestr»   r{   r«   Údownload_filerx   rý   rû   ©r�   rL   r§   r•   rJ   r±   s        €r   r+  zReplayApiClient.download_file£  s  ø€ ð 	×1Ò1Ñ3Ô3Ð3Ø×!Ò!Ø�D r¸ð "ñ ô €Gð ×ÒÑÔð FÝ  gÑ.Ô.ð Hð HÝ‘”×&Ò& t¸,Ð&ÑGÔGˆðHð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hà
×Ò˜w¨Ñ/Ô/Ð/Ø€mà×-Ò-¨gÑ6Ô6ÔBÀ1ÔEÐEs   Á$BÂBÂ
Bc             ƒ   óÀ  •K  — |                       ¦   «          |                      d|i |¬¦  «        }|                      ¦   «         r{t          | |¦  «        4 ƒd {V —† t	          ¦   «                              ||¬¦  «        ƒ d {V —†}d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   |                      ||¦  «         |S |                      |¦  «        j        d         S r(  )	r¿   r*  r»   r}   r«   Úasync_download_filerx   rý   rû   r,  s        €r   r.  z#ReplayApiClient.async_download_file²  sŽ  øè è € ð 	×1Ò1Ñ3Ô3Ð3Ø×!Ò!Ø�D r¸ð "ñ ô €Gð ×ÒÑÔð FÝ+¨D°'Ñ:Ô:ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
Ý‘w”w×2Ò2Ø˜|ð 3ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð ×Ò˜w¨Ñ/Ô/Ð/Ø€mà×-Ò-¨gÑ6Ô6ÔBÀ1ÔEÐEs   Á*BÂ
B!Â$B!)NFNNNNNF)r   N)NF).r‚   rƒ   r„   r…   r   r   r   ÚboolÚgoogleÚauthr¤   ÚCredentialsr   r¬   r´   r¸   r»   r½   r¿   r³   r¶   rá   r   r   r   r
   rw   rY   rx   r”   rö   rý   r   r  r   r  r  r  r  r’   r!  r&  r   r+  r.  Ú__classcell__)r±   s   @r   rt   rt   %  sÍ  ø€ € € € € ØNÐNð *.ØØ#ØCGØ#Ø $Ø,0Øðð àÐ5Ô6ðð ðð " #œð	ð
 ðð ˜Œ}ðð ˜FœKÔ3Ô?Ô@ðð ˜Œ}ðð ˜”ðð ˜[Ô)ðð ðð ð ð ð ð ð@&°ð &¸ð &ð &ð &ð &ð Sð ð ð ð ð
 ð ð ð ð ð; Tð ;ð ;ð ;ð ;ð(ð (ð (ð (ðð ð ð ð*/ÀÈ#Äð /Ð[^ð /Ðcfð /ð /ð /ð /ðð ð ð ð.àð.ð ˜<¨¬¸%Ð?Ô@ð.ð ð	.ð .ð .ð .ð`!àð!ð %ð!ð ð	!ð !ð !ð !ðF°kð Àlð ð ð ð ð.5"¨Yð 5"¸4ð 5"ð 5"ð 5"ð 5"ðt 37Øð	<ð <àð<ð Ð.Ô/ð<ð ð	<ð
 ð<ð <ð <ð <ð <ð <ð: 37Øð	<ð <àð<ð Ð.Ô/ð<ð ð	<ð
 ð<ð <ð <ð <ð <ð <ðD 37ð7ð 7ð 7à�s˜BœI�~Ô&ð7ð ð7ð ð	7ð Ð.Ô/ð7ð ð7ð 7ð 7ð 7ð 7ð 7ðN 37ð7ð 7ð 7à�s˜BœI�~Ô&ð7ð ð7ð ð	7ð Ð.Ô/ð7ð ð7ð 7ð 7ð 7ð 7ð 7ðD GKðFð Fð FØðFØ(0Ð1BÔ(CðFàˆ\˜5 #Ð%Ô&ðFð Fð Fð Fð Fð Fð  GKðFð Fð FØðFØ(0Ð1BÔ(CðFà
ðFð Fð Fð Fð Fð Fð Fð Fð Fð Fr   )7r…   r  rð   Ú
contextlibr*   r\   r  rÇ   rk   r   Útypingr   r   r   r   r   r   Úgoogle.authr0  rB   r
   Ú_api_clientr   r   r   Ú_commonr   Útypesr   r   r   r   r#   r/  r8   r<   r?   r'   rG   rK   rN   rQ   rZ   re   rn   rr   Úcontextmanagerr{   Úasynccontextmanagerr}   r   r‰   r”   r˜   rt   r!   r   r   ú<module>r<     s_  ðð  Ð à €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià Ð Ð Ð à Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ð;˜ð ; ð ;ð ;ð ;ð ;ð˜cð  cð ð ð ð ð. #ð ¨Sð °Tð ð ð ð ð4R¨Cð R°Cð Rð Rð Rð Rð
D¨3ð D°3ð Dð Dð Dð Dð
 T¨#¨s¨(¤^ð ¸¸SÀ#¸X¼ð ð ð ð ð6˜Sð  Sð ð ð ð ð4¨ð °ð ð ð ð ð$˜sð $ tð $ð $ð $ð $ð8, kð ,°dð ,ð ,ð ,ð ,ð Sð ð ð ð ð˜#ð  $ð ð ð ð ð%¨¨c°3¨h¬ð %¸Dð %ð %ð %ð %ð ÔðÐ!2ð À+ð ÐRZÐ[_ÔR`ð ð ð ñ Ôðð ÔðÐ->ð Èkð Ð^kÐlpÔ^qð ð ð ñ  Ôðð)ð )ð )ð )ð )�Iñ )ô )ð )ð
.ð 
.ð 
.ð 
.ð 
.�Yñ 
.ô 
.ð 
.ðð ð ð ð ˜	ñ ô ð ð(ð (ð (ð (ð (�ñ (ô (ð (ð\Fð \Fð \Fð \Fð \F�mñ \Fô \Fð \Fð \Fð \Fr   