
    +jQ6                       d Z ddlZddlmZ ddl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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m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"Z!ddl"m#Z# dd	l$m%Z% dd
l&m'Z' ddl m(Z) ddl*Z*ddl+m,Z, ddl+m-Z- ddl.Z.ddl/m0Z0 ddl1Z1ddl2m3Z3 ddl2m4Z4 ddl2m5Z5 ddl6m7Z7 ddl6m8Z8 ddl6m9Z: ddl6m;Z; ddl6m<Z< 	 ddl=m>Z? n# e@$ r	 ddlAm>Z? Y nw xY wdZB	 ddlCZCdZBn# eD$ r Y nw xY werddlEmFZF ddlGmHZH  e
jI        d          ZJdZKdZLd ZMdZNd!ZOd"d#hZP G d$ d%eQ          ZRd&eeS         fd'ZTd(eUeSeSf         d&dfd)ZVd*e7d+e7d&e7fd,ZWd(eUeSeSf         d-eeeXeYf                  d&dfd.ZZd/eSd0eSd&eSfd1Z[d2eeSdf         d&ee#eSf         fd3Z\d4e#d&e#fd5Z]d6eeeXeYf                  d&eeX         fd7Z^e G d8 d9                      Z_ G d: d;          Z9d<Z`d=Zad>Zbd!ZcdZdd?Zed*ee;         d&e3jf        fd@Zg G dA dBe*jh                  Zi G dC dDe*jj                  Zk G dE dF          ZldGdFd4e!jm        jn        j#        d&eSfdHZodGdFd4e!jm        jn        j#        d&eSfdIZpdS )JzBase client for calling HTTP APIs sending and receiving JSON.

The BaseApiClient is intended to be a private module and is subject to change.
    N)	Generator)	dataclass)AnyAsyncIteratorIteratorOptionalTYPE_CHECKINGTupleUnion)urlparse)
urlunparseCredentials)mtls)AuthorizedSession)
exceptions)	BaseModel)ValidationError)CaseInsensitiveDict   )_common)errors)version)HttpOptions)HttpOptionsOrDict)HttpResponse)HttpRetryOptions)ResourceScope)connectFT)CIMultiDictProxyAsyncAuthorizedSessionzgoogle_genai._api_clienti   i  @       useuc                       e Zd ZdZdS )EphemeralTokenAPIKeyErrorz)Error raised when the API key is invalid.N)__name__
__module____qualname____doc__     \/home/wildlama/visual-decline/.venv/lib/python3.11/site-packages/google/genai/_api_client.pyr(   r(   b   s        1111r.   r(   returnc                      t           j                            dd          } t           j                            dd          }| r|rt                              d           | p|pdS )zGets the API key from environment variables, prioritizing GOOGLE_API_KEY.

  Returns:
      The API key string if found, otherwise None. Empty string is considered
      invalid.
  GOOGLE_API_KEYNGEMINI_API_KEYzEBoth GOOGLE_API_KEY and GEMINI_API_KEY are set. Using GOOGLE_API_KEY.)osenvirongetloggerwarning)env_google_api_keyenv_gemini_api_keys     r/   get_env_api_keyr;   h   sn     z~~&6==z~~&6== . 
NNO   
	91	9T9r.   headersc                    dt           j         }dt          j                                         d         z   }| d| }d| v r|| d         vr| d| d         z   | d<   n(d| v r|| d         vr| d          d| | d<   n	d| vr|| d<   d| v r|| d         vr| d| d         z   | d<   dS d| v r|| d         vr| d          d| | d<   dS d| vr|| d<   dS dS )z1Appends the telemetry header to the headers dict.zgoogle-genai-sdk/z
gl-python/r    z
user-agentzx-goog-api-clientN)r   __version__syssplit)r<   library_labellanguage_labelversion_header_values       r/   append_library_version_headersrE   y   s   ;g&9;;-#+"3"3"5"5a"88.)<<N<<g
w|4
4
436669NNGLw>9N#N#N&|4GG~GGGL7""0GLW$$
w':;
;
;  """W-@%AA     W$$
(; <
<
< &'::.::     '))#7G    *)r.   optionspatch_optionsc           	      z   |                                  }|j        pi }|j        pi }i |||_        t          j                                        }|D ]M}|dk    r	t          ||d           }|t          |||           .t          ||t          | |                     N|j        t          |j                   |S )Nr<   )
model_copyr<   r   model_fieldskeysgetattrsetattrrE   )rF   rG   copy_optionoptions_headerspatch_options_headershttp_options_keyskeypatch_values           r/   patch_http_optionsrT      s     ""$$+'-2/'/52+
 ".3355 7 7c
i-d33Kk3,,,,k3 5 56666$";#6777	r.   timeout_in_secondsc                 b    |r*d| vr(t          t          j        |                    | d<   dS dS dS )z8Populates the server timeout header in the headers dict.zX-Server-TimeoutN)strmathceil)r<   rU   s     r/   populate_server_timeout_headerrZ      sN      E.g=="%di0B&C&C"D"DGE E==r.   base_urlpathc                    t          |           }|j                            d          r|j        d d         n|j        }|                    d          r
|dd          n|}t	          |                    |dz   |z                       S )N/r   )r\   )r   r\   endswith
startswithr   _replace)r[   r\   parsed_base	base_paths       r/   join_url_pathre      s    ""+ 
		"	"3	'	'kss 
 __S))	3abbt$	K((i#o.D(EE	F	FFr.   projectc                 |    t           j                            dg          \  }}| s|} | st          d          || fS )z-Loads google auth credentials and project id.z.https://www.googleapis.com/auth/cloud-platform)scopesz@Could not resolve project using application default credentials.)googleauthdefault
ValueError)rf   credentialsloaded_project_ids      r/   	load_authro      sc    #);#6#6>? $7 $ $ +  
  G	 
J   
g	r.   rm   c                 L    ddl m} |                      |                       | S )Nr   )Request)google.auth.transport.requestsrq   refresh)rm   rq   s     r/   refresh_authrt      s4    444444ggii   	r.   timeoutc                     | r| dz  }nd}|S )z Converts the timeout to seconds.g     @@Nr-   )ru   rU   s     r/   get_timeout_in_secondsrw      s(       !6)	r.   c                       e Zd ZU eeef         ed<   eed<   eed<   eeeef         ef         ed<   dZ	e
e         ed<   dS )HttpRequestr<   urlmethoddataNru   )r)   r*   r+   dictrW   __annotations__r   objectbytesru   r   floatr-   r.   r/   ry   ry      sk         S>
(((
+++d3;&''''!'8E?!!!!!r.   ry   c            	       z   e Zd Z	 	 ddeeeef         ej        def         dee	ef         dee	e
f         fdZddZde	fd	Zede	fd
            Zdee	ddf         fdZdee	         fdZdeee
e	f         ddf         fdZdeeef         ddfdZdee         fdZdee         fdZede	de	fd            ZdS )r   Nr<   zCIMultiDictProxy[str]response_streambyte_streamc                    t          t                    r| _        nt          t          j                  r&fd                                D             | _        nvt          t                    r$d                                 D             | _        n=t                    j	        dk    r%fd                                D             | _        d| _
        || _        || _        d S )Nc                 b    i | ]+}|d                                          |                    ,S z, )joinget_list.0rR   r<   s     r/   
<dictcomp>z)HttpResponse.__init__.<locals>.<dictcomp>  sB       47#tyy))#..//  r.   c                     i | ]\  }}||	S r-   r-   )r   rR   values      r/   r   z)HttpResponse.__init__.<locals>.<dictcomp>	  s    CCCZS%c5CCCr.   r    c                 b    i | ]+}|d                                          |                    ,S r   )r   getallr   s     r/   r   z)HttpResponse.__init__.<locals>.<dictcomp>  s@       25#tyy,,--  r.      )
isinstancer}   r<   httpxHeadersrK   r   itemstyper)   status_coder   r   )selfr<   r   r   s    `  r/   __init__zHttpResponse.__init__   s    '4   dll	GU]	+	+ 	   ;B<<>>  dll 
G0	1	1 CC7==??CCCdll	g	#5	5	5   9@  dl  D*D"Dr.   r0   c                 8    |                                  | _        | S N)async_segmentssegment_iteratorr   s    r/   	__aiter__zHttpResponse.__aiter__  s     //11DKr.   c                 p   K   	 | j                                          d {V S # t          $ r t          w xY wr   )r   	__anext__StopIterationStopAsyncIterationr   s    r/   r   zHttpResponse.__anext__  sS      (22444444444   s   # 5c                     t          | j        t                    sd S | j        r| j        d         sdS |                     | j        d                   S )Nr    )r   r   list_load_json_from_responser   s    r/   jsonzHttpResponse.json  sY     d*D11 T t';A'> R(()=a)@AAAr.   c              #   
  K   t          | j        t                    r'| j        D ]}|r|                     |          ni V  d S | j        
g E d {V  d S |                                 D ]}|                     |          V  d S r   )r   r   r   r   _iter_response_stream)r   chunks     r/   segmentszHttpResponse.segments*  s      $&-- 	3' D D%6;Cd++E222CCCCD D			%mmmmmmmmm --// 3 3%++E2222223 3r.   c                *  K   t          | j        t                    r(| j        D ]}|r|                     |          ni W V  d S | j        g 2 3 d {V }|W V  6 d S |                                 2 3 d {V }|                     |          W V   6 d S r   )r   r   r   r   _aiter_response_stream)r   r   cs      r/   r   zHttpResponse.async_segments6  s     $&-- 
3' D D%6;Cd++E222CCCCCD D			%        RR 4466 3 3 3 3 3 3 3++E2222222 766s   A2Bc              #      K   t          | j        t                    r| j        E d {V  d S | j        
g E d {V  d S t          d          )Nz8Byte segments are not supported for streaming responses.)r   r   r   rl   r   s    r/   byte_segmentszHttpResponse.byte_segmentsC  so      $"D)) !!!!!!!!!!			!mmmmmmmmm
D  r.   response_payloadc                     t          | d           t          |           D ]'}t          j        t	          | |                    ||<   (d S )Nr   )delattrdircopydeepcopyrL   )r   r   	attributes      r/   _copy_to_dictzHttpResponse._copy_to_dictN  sX    D$%%%YY L L	$(M'$	2J2J$K$Ky!!L Lr.   c              #     K   t          | j        t          j                  sIt          | j        t          j                  s*t          dt          | j                  j         d          d}d}g }t          | j        t          j                  r| j                                        }n| j                            d          }|D ]}|s|rd	                    |          V  g } |
                    d          r+|                    |t          d          d	                    `|D ]}|d
k    r|dz  }|dk    r|dz  }||z  }|dk    r|V  d}|r|V  |rd	                    |          V  d	S d	S )z,Iterates over chunks retrieved from the API.zFExpected self.response_stream to be an httpx.Response object, but got .r   r   T)decode_unicode
data: N{r   })r   r   r   Responserequests	TypeErrorr   r)   
iter_linesr   ra   appendlen)r   r   balancedata_bufferr   liner   s          r/   r   z"HttpResponse._iter_response_streamT  s      	4'88d*H,=>> <$.//8< < <  
 EGK$&77 M,7799oo,77t7LLo    			+&&
&
&
&+ 
	"	" 4H/000
   !88
Q,''#XX
Q,'tme	A  kkk #IIk"""""""# #r.   c                6  K   t          | j        t          j                  p%t          ot          | j        t
          j                  }|s*t          dt          | j                  j	         d          d}d}g }t          | j        t          j                  r	 | j        
                                2 3 d{V }|s|rd                    |          W V  g }&|                    d          r+|                    |t          d          d                    f|D ]}|dk    r|d	z  }|d
k    r|d	z  }||z  }|dk    r|W V  d}6 |r|W V  |rd                    |          W V  | j                                         d{V  dS # | j                                         d{V  w xY wt          r_t          | j        t
          j                  rA	 	 | j        j                            t$                     d{V }|sn|                    d                                          }|s|rd                    |          W V  g }u|                    d          r+|                    |t          d          d                    |D ]}|dk    r|d	z  }|d
k    r|d	z  }||z  }|dk    r|W V  d}|r|W V  |rd                    |          W V  | j                                         dS # | j                                         w xY wdS dS )z;Asynchronously iterates over chunks retrieved from the API.z`Expected self.response_stream to be an httpx.Response or aiohttp.ClientResponse object, but got r   r   r   Nr   r   r   r   r   T)max_line_lengthutf-8)r   r   r   r   has_aiohttpaiohttpClientResponser   r   r)   aiter_linesr   ra   r   r   aclosecontentreadlineREAD_BUFFER_SIZEdecoderstriprelease)r   is_valid_responser   r   r   r   r   
line_bytess           r/   r   z#HttpResponse._aiter_response_stream  s6     "4#7HH P
4#79OPP   54'((15 5 5   EGK$&77 R'!,.::<< 	 	 	 	 	 	 	$  IIk******k __X&& tCMMNN3444
   aCxxlggclg
4-%\\KKKKE1 =4  	++++ 	'		+&&
&
&
&
& "))+++++++++++d"))++++++++++ 
 -'g4  -'*'!	!19BB. C        *  ""7++2244$  IIk******k __X&& tCMMNN3444
   aCxxlggclg
4-%\\KKKKEC!	F  	++++ 	'		+&&
&
&
&
& 	$$&&&&&$$&&&&[-' -' -' -'s&   F 4E	:B1F !F-DK9 9Lresponsec                     	 t          j        |          S # t           j        $ r}t          j        d|           |d}~ww xY w)zFLoads JSON from the response, or raises an error if the parsing fails.z0Failed to parse response as JSON. Raw response: N)r   loadsJSONDecodeErrorr   UnknownApiResponseError)clsr   es      r/   r   z%HttpResponse._load_json_from_response  s\    Z!!!   *
GX
G
G s    A=A)NN)r0   r   )r)   r*   r+   r   r}   rW   r   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   classmethodr   r-   r.   r/   r   r      s        *.'+# #
sCx.
-
!
# S#X# e$# # # #:   s     	BC 	B 	B 	B 8	B
3	#tT/2 
3 
3 
3 
33M#$6 3 3 3 3	YuUCZ'8$'DE 	 	 	 	LDf,= L$ L L L L1#Xc] 1# 1# 1# 1#fb'M#,> b' b' b' b'H c c    ;  r.   r      g      ?g      N@)i  i  i  i  i  i  c                    | t          j        d          ddS | j        dk    rd| _        t          j        | j        pt                    }| j        pt
          t          j        fd          }t          j        | j        pt          | j
        pt          | j        pt          | j        pt                    }||d|t          j        t"          t$          j                  dS )	a  Returns the retry args for the given http retry options.

  Args:
    options: The http retry options to use for the retry configuration. If None,
      the 'never retry' stop strategy will be used.

  Returns:
    The arguments passed to the tenacity.(Async)Retrying constructor.
  Nr   T)stopreraiser   c                     t          | t          j                  r	| j        v p%t          | t          j        t          j        f          S r   )r   r   APIErrorcoder   TimeoutExceptionConnectError)r   retriable_codess    r/   <lambda>zretry_args.<locals>.<lambda>  s@    Av//MAFo4M E	A.0BC	D	D r.   )initialmaxexp_basejitter)r   retryr   waitbefore_sleep)tenacitystop_after_attemptattempts_RETRY_ATTEMPTShttp_status_codes_RETRY_HTTP_STATUS_CODESretry_if_exceptionwait_exponential_jitterinitial_delay_RETRY_INITIAL_DELAY	max_delay_RETRY_MAX_DELAYr   _RETRY_EXP_BASEr   _RETRY_JITTERbefore_sleep_logr7   loggingINFO)rF   r   r   r   r   s       @r/   
retry_argsr  	  s     _/22tDDDG		$W%5%H	I	I$-I1I/

%E E E E % 
	)#;';


//2?^,}	
 
 
$ /EE
 
 r.   c                   4     e Zd ZdZdeddf fdZddZ xZS )SyncHttpxClientzSync httpx client.kwargsr0   Nc                 f    |                     dd            t                      j        di | dS zInitializes the httpx client.follow_redirectsTNr-   
setdefaultsuperr   r   r	  	__class__s     r/   r   zSyncHttpxClient.__init__/  =    
($///EGGvr.   c                     	 | j         rdS n# t          $ r Y nw xY w	 |                                  dS # t          $ r Y dS w xY w)zCloses the httpx client.N)	is_closed	Exceptioncloser   s    r/   __del__zSyncHttpxClient.__del__4  ss    	    
d
jjlllll   
dds    
3 
A Ar0   Nr)   r*   r+   r,   r   r   r  __classcell__r  s   @r/   r  r  ,  se        s t      

 
 
 
 
 
 
 
r.   r  c                   4     e Zd ZdZdeddf fdZddZ xZS )AsyncHttpxClientzAsync httpx client.r	  r0   Nc                 f    |                     dd            t                      j        di | dS r  r  r  s     r/   r   zAsyncHttpxClient.__init__D  r  r.   c                     	 | j         rd S n# t          $ r Y nw xY w	 t          j                                        |                                            d S # t          $ r Y d S w xY wr   )r  r  asyncioget_running_loopcreate_taskr   r   s    r/   r  zAsyncHttpxClient.__del__I  s    	    
d  ,,T[[]];;;;;   
dds    
8A 
A%$A%r  r  r  s   @r/   r  r  A  se        s t      
	 	 	 	 	 	 	 	r.   r  c                   `   e Zd ZdZ	 	 	 	 	 	 d8dee         dee         deej        j	        j
                 dee         dee         dee         fd	Zd
efdZd
efdZd
ed         fdZeded
eej        ej        f         fd            Zeded
ej        fd            Zeded
ej        fd            Zd
efdZd
efdZd
efdZd
ej        fdZd
eeef         fdZ 	 d9dedede!ee"f         dee         d
e#f
dZ$	 d:de#ded
e%fdZ&	 	 d;de#dee         ded
e%fd Z'	 d:de#ded
e%fd!Z(	 	 d;de#dee         ded
e%fd"Z)d
ej        fd#Z*	 d9dedede!ee"f         dee         d
e+f
d$Z,	 d9dedede!ee"f         dee         d
e-e+ddf         f
d%Z.	 d9dedede!ee"f         dee         d
e+f
d&Z/	 d9dedede!ee"f         dee         d
ef
d'Z0dd(d)eee1j2        f         d*ed+e3dee         d
e%f
d,Z4dd(d-e1j2        d*ed+e3dee         d
e%f
d.Z5dd(dedee         d
eee6f         fd/Z7dd(d)eee1j2        f         d*ed+e3dee         d
e%f
d0Z8dd(d-ee1j2        e9j:        e         f         d*ed+e3dee         d
e%f
d1Z;dd(dedee         d
eee6f         fd2Z<d3ej=        d
dfd4Z>d<d5Z?d<d6Z@d<d7ZAdS )=BaseApiClientz8Client for calling HTTP APIs sending and receiving JSON.Nvertexaiapi_keyrm   rf   locationhttp_optionsc                 Z   || _         d | _        | j         t          j                            dd           }t          j                            dd           }d }	||                                dv }	d }
||                                dv }
|	|
|	|
k    rt          j        d           |	|	| _         n	|
|
| _         |s|r|rt          d          |r|rt          d          t                      }t          |t                    r8	 t          j        |          }n@# t          $ r}t          d          |d }~ww xY w|rt          j        |t                    r|}|j        r|j        st          d          t          j                            d	d           }t          j                            d
d           }t%                      }|p|| _        |p|| _        |p|| _        || _        t                      | _        t1          j                    | _        d | _        d | _        | j         r|r$|r"t:                              d           d | _        n~|s|r+|r)t:                              d           d | _        d | _        nO|s|r$|r"t:                              d           d | _        n'|s|r#|r!t:                              d           d | _        |j        r|j        nd | _        | j        s7| j        s0| j        sd| _        n!| j                            d          rd| _        | j        s4| j        s-| j        s&tA          d           \  }| _        | j        s|| _        | j        r| j        p| j        }|s| j        st          d          | j        s| j        dk    r| j        sd| j        _        n| j        tB          v r| j        sd| j         d| j        _        n\| j        r@| j                            d          s&|r|s"|s | j        | j        _        d | _        d | _        nd| j         d| j        _        d| j        _"        n.| j        st          d          d| j        _        d| j        _"        ddi| j        _#        | j        r>| j        $                                | _        | j        j#        | j        | j        j#        d<   |rtK          | j        |          | _        n%| j        j#        tM          | j        j#                   | '                    | j                  \  }}|| _(        d | _)        | *                                rd | _+        n/| j        j,        r| j        j,        | _+        nt[          d&i || _+        | .                                rd | _/        n/| j        j0        r| j        j0        | _/        ntc          d&i || _/        | j        j0        r| j        j0        | _/        ntc          d&i || _/        d | _2        | 3                                r	 dd l4}| j        j5        r| j        j5        | _2        | 6                    | j                  | _7        | .                                rPd | j7        d!<   | j        j8        ts          d"          nts          | j        j8                  | j7        d#<   d$| j7        d%<   n# tt          $ r Y nw xY wtw          | j        j<                  }| =                    | j                  | _>        t          j@        d&i || _A        t          jB        d&i || _C        d S )'NGOOGLE_GENAI_USE_ENTERPRISEGOOGLE_GENAI_USE_VERTEXAI)true1zWarning: Both GOOGLE_GENAI_USE_ENTERPRISE and GOOGLE_GENAI_USE_VERTEXAI are set with conflicting values. The value of GOOGLE_GENAI_USE_ENTERPRISE will be used.zNProject/location and API key are mutually exclusive in the client initializer.zICredentials and API key are mutually exclusive in the client initializer.zInvalid http_optionsz9base_url must be set when base_url_resource_scope is set.GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATIONzoThe user provided Google Cloud credentials will take precedence over the API key from the environment variable.zrThe user provided Vertex AI API key will take precedence over the project/location from the environment variables.zqThe user provided project/location will take precedence over the Vertex AI API key from the environment variable.zyThe project/location from the environment variables will take precedence over the API key from the environment variables.globalz.googleapis.comrf   z<Project or API key must be set when using the Vertex AI API.z"https://aiplatform.googleapis.com/zhttps://aiplatform.z.rep.googleapis.com/zhttps://z-aiplatform.googleapis.com/v1beta1zNo API key was provided. Please pass a valid API key. Learn how to create an API key at https://ai.google.dev/gemini-api/docs/api-key.z*https://generativelanguage.googleapis.com/v1betazContent-Typezapplication/jsonzx-goog-api-keyr   Tsslinfmax_allowed_timer   total_attemptsr-   )Dr%  custom_base_urlr4   r5   r6   lowerwarningswarnrl   r   r   r}   model_validater   r   is_duck_type_ofbase_url_resource_scoper[   r;   rf   r'  r&  _credentials_http_options	threadingLock_sync_auth_lock_async_auth_lock_async_auth_lock_creation_lockr7   infor`   ro   _MULTI_REGIONAL_LOCATIONSapi_versionr<   striprT   rE   _ensure_httpx_ssl_ctx_async_httpx_client_args_authorized_session_use_google_auth_sync_httpx_clienthttpx_clientr  _use_google_auth_async_async_httpx_clienthttpx_async_clientr  _aiohttp_session_use_aiohttpr   aiohttp_client_ensure_aiohttp_ssl_ctx"_async_client_session_request_argsru   r   ImportErrorr  retry_options_ensure_websocket_ssl_ctx_websocket_ssl_ctxr   Retrying_retryAsyncRetrying_async_retry)r   r%  r&  rm   rf   r'  r(  env_enterprise_strenv_vertexai_strenv_enterpriseenv_vertexaivalidated_http_optionsr   env_projectenv_locationenv_api_keyhas_sufficient_authclient_argsasync_client_argsr   retry_kwargss                        r/   r   zBaseApiClient.__init__X  s    DMD}:>>*GNN(CTJJn		'+1133}Dl		%'--//=@ 
$&,,B	
 	
 	
 
	#&#$ 	 8     
     )]],%% ,8!,!;L!I!I 8 8 8/00a78	 ,'1,LL ,+ 	6&/
 
E  
 *..!7>>K:>>"94@@L!##K)kDL,DM)kDL#D$D %>++D48DBFD' } b0	  A	
 	
 	
  K W B	
 	
 	
  x [ B	
 	
 	
  K [ M	
 	
 	
  $,
 
)
)  m#,# # 	#"$--!**+<== 	#"$- l*,* &*
 %.d$;$;$;!T\  	*)$
!\;dmL  
)= 
J
 
 	
 ,
-833$ 4&K##
-4
4
4& 5 F$-EEE 	## 

&//0ABB
 
 '
 ,3
 '+&:# Bt}AAA 	# (1d$$\ 
>
 
 	

 %Qd!'/d$"02D!ED| D\''))dl			#	/7;|"#34 C-

4 d 
		#	/&t'9'ABBB%)%?%?& &"K" %6D!<@D!!## :d			( :-:d*99[99d""$$ G!%d			. G!%!3!Fd!1!F!F4E!F!Fd, G!%!3!Fd!1!F!F4E!F!Fd aeD , 	D"&"4"C$
 (();<< 	/ &&(( 	H;?$
1%
8 !)1 INI I I7< (8 8 
12D
E
 GH$
12B
C    d0>??L"<<T=OPPD#33l33DK .>>>>Ds+   D 
D;&D66D;B$Z7 7
[[r0   c                     t          t          d          sdS t          | j        o>t          j                    o+t          j                    o| j        j        p| j        j                   S )Nshould_use_client_certF)	hasattrr   boolr%  rm  has_default_client_cert_sourcer@  rO  ri  r   s    r/   rM  z#BaseApiClient._use_google_auth_syncZ  ss    4122 U 	
'))	
/11	
 +Mt/A/M
	  r.   c                     t          t          oN| j        oGt          t          d          o2t	          j                    ot	          j                    o| j        j                   S )Nrm  )	ro  r   r%  rn  r   rm  rp  r@  rR  r   s    r/   rP  z$BaseApiClient._use_google_auth_asyncf  sm     	6M	6D233	6 '))	6 /11		6
 "55  r.   )zaiohttp.ClientSessionr"   c                   K   | j         _|                                 rK	 ddlm} ddlm}  G d d|          } | ||                     | _         | j         S # t          $ r Y nw xY w|                                 s| j         *| j         j        s| j         j        	                                rR G d dt          j                  } G d	 d
t          j                  } | |d          dt                    | _         | j         S )z#Returns the aiohttp client session.Nr   r   r!   c            
       l     e Zd ZdZd fdZdedededeeef         d	d
f
dZe	d	e
fd            Z xZS )HBaseApiClient._get_aiohttp_session.<locals>._RefreshableAsyncCredentialszJAdapter to use the client's sync credentials in an AsyncAuthorizedSession.clientr$  c                 V    t                                                       || _        d S r   )r  r   _client)r   ru  r  s     r/   r   zQBaseApiClient._get_aiohttp_session.<locals>._RefreshableAsyncCredentials.__init__}  s$    GG!DLLLr.   requestr{   rz   r<   r0   Nc                    K   | j                                          d {V }d| |d<   | j         j        r'| j         j        j        r| j         j        j        |d<   d S d S d S )NBearer Authorizationx-goog-user-project)rw  _async_access_tokenr?  quota_project_id)r   rx  r{   rz   r<   tokens         r/   before_requestzWBaseApiClient._get_aiohttp_session.<locals>._RefreshableAsyncCredentials.before_request  s       ,::<<<<<<<<E'8'8'8GO$)L->
 ,+< +,,,	   r.   c                 B    | j         j        sdS | j         j        j         S NF)rw  r?  expiredr   s    r/   validzNBaseApiClient._get_aiohttp_session.<locals>._RefreshableAsyncCredentials.valid  s%    <, U|0888r.   )ru  r$  )r)   r*   r+   r,   r   r   rW   r}   r  r   ro  r  r  r  s   @r/   _RefreshableAsyncCredentialsrt  z  s        
Z
Z" " " " " " *-47BFsCx.    9T 9 9 9 89 9 9 9 9r.   r  c                   "    e Zd ZefdeddfdZdS )@BaseApiClient._get_aiohttp_session.<locals>.AiohttpClientSession	_warningsr0   Nc                 H    | j         s| dd}| j        | j        |d<   d S d S d S )NzUnclosed client session)client_sessionmessagesource_traceback)closed_source_traceback)r   r  contexts      r/   r  zHBaseApiClient._get_aiohttp_session.<locals>.AiohttpClientSession.__del__  sR     C"&4 G %1,0,Bg()))C C
 21r.   r)   r*   r+   r:  r   r  r-   r.   r/   AiohttpClientSessionr    sG        +3 	C 	CS 	C 	C 	C 	C 	C 	C 	Cr.   r  c                   "    e Zd ZefdeddfdZdS )?BaseApiClient._get_aiohttp_session.<locals>.AiohttpTCPConnectorr  r0   Nc                     | j         rd S | j        sd S d | j                                        D             }|                                  | |dd}| j        | j        |d<   d S d S )Nc                 ,    g | ]}t          |          S r-   )repr)r   r   s     r/   
<listcomp>z[BaseApiClient._get_aiohttp_session.<locals>.AiohttpTCPConnector.__del__.<locals>.<listcomp>  s    999q477999r.   zUnclosed connector)	connectorconnectionsr  r  )_closed_connsvalues_closer  )r   r  connsr  s       r/   r  zGBaseApiClient._get_aiohttp_session.<locals>.AiohttpTCPConnector.__del__  s    \ F F99DK$6$6$8$8999%
++---"- '
 #/*.*@G&''' 0/r.   r  r-   r.   r/   AiohttpTCPConnectorr    sG        +3 	A 	AS 	A 	A 	A 	A 	A 	A 	Ar.   r  )limitT)r  	trust_envread_bufsize)rS  rP  google.auth.aio.credentialsr   "google.auth.aio.transport.sessionsr"   rX  r  _loopr  r   ClientSessionTCPConnectorr   )r   AsyncCredentialsr"   r  r  r  s         r/   _get_aiohttp_sessionz"BaseApiClient._get_aiohttp_sessionp  s     
 $)D)D)F)F$!OOOOOOMMMMMM	9 	9 	9 	9 	9+; 	9 	9 	94 !7 67S7STX7Y7Y Z Z$$    &&(( (% ' 	& &0022 	&
	C 	C 	C 	C 	C!6 	C 	C 	CA A A A A 4 A A A$ 32''a000'  d   s   9A 
A&%A&rF   c                    d| j         }| j        }|r|                              n|r|                              nd}|sbt          j        t
          j                            dt          j                              t
          j                            d                    }dt          t          j                 dt          j        dt          j        ffd	} |||           |||          fS )
zEnsures the SSL context is present in the HTTPX client args.

    Creates a default SSL context if one is not provided.

    Args:
      options: The http options to check for SSL context.

    Returns:
      A tuple of sync/async httpx client args.
    verifyNSSL_CERT_FILESSL_CERT_DIRcafilecapathargsctxr0   c                    | r|                                s| pi                                 } || <   |                                 }|                                D ]/}|t          j        t          j        j                  j        vr||= 0|S -  Sets the SSL context in the client args if not set.

      Does not override the SSL context if it is already set.

      Args:
        args: The client args to to check for SSL context.
        ctx: The SSL context to set.

      Returns:
        The client args with the SSL context included.
      )r6   r   inspect	signaturer   Clientr   
parametersr  r  copied_argsrR   r  s       r/   
_maybe_setz7BaseApiClient._ensure_httpx_ssl_ctx.<locals>._maybe_set  s      &)) 
  ""VIIKKk!!##  #g'(=>>III#r.   )ri  rj  r6   r4  create_default_contextr4   r5   certifiwherer   r   
StringDict
SSLContext)rF   r  
async_argsr  r  r  s        @r/   rJ  z#BaseApiClient._ensure_httpx_ssl_ctx  s    FD*J 	 Z^^F+++   
 &AA//  c
w)*^ 
	     4 	
4
:s## r.   c                    d| j         }|r|                              nd}|sbt          j        t          j                            dt          j                              t          j                            d                    }dt          t          j
                 dt          j        dt          j
        ffd	} |||          S )
  Ensures the SSL context is present in the async client args.

    Creates a default SSL context if one is not provided.

    Args:
      options: The http options to check for SSL context.

    Returns:
      An async aiohttp ClientSession._request args.
    r4  Nr  r  r  r  r  r0   c                    | r|                                s| pi                                 } || <   |                                 }|                                D ]/}|t          j        t          j        j                  j        vr||= 0|S r  )r6   r   r  r  r   r  _requestr  r  s       r/   r  z9BaseApiClient._ensure_aiohttp_ssl_ctx.<locals>._maybe_set  s      &)) 
  ""VIIKKk!!##  #$W%:%CDDOP P #r.   rj  r6   r4  r  r4   r5   r  r  r   r   r  r  rF   r  r  r  r  s       @r/   rV  z%BaseApiClient._ensure_aiohttp_ssl_ctx  s     F*J$.
8*..
 
 
 DC &AA//  c
w)*^ 
	     8 :j#&&&r.   c                    d| j         }|r|                              nd}|sbt          j        t          j                            dt          j                              t          j                            d                    }dt          t          j
                 dt          j        dt          j
        ffd	} |||          S )
r  r4  Nr  r  r  r  r  r0   c                    | r|                                s| pi                                 } || <   |                                 }|                                D ]+}|t          j        t                    j        vr	|dk    r||= ,|S )r  r4  )r6   r   r  r  
ws_connectr  r  s       r/   r  z;BaseApiClient._ensure_websocket_ssl_ctx.<locals>._maybe_setW  s      &)) 
  ""VIIKKk!!##  #g'
33>>>3%<<#r.   r  r  s       @r/   rZ  z'BaseApiClient._ensure_websocket_ssl_ctx;  s     F*J$.
8*..
 
 
 DC 	 &AA//  c
w)*^ 
	     2 :j#&&&r.   c                 r    t           o0| j        j        pi                     d          d u o| j        j        d u S )N	transport)r   r@  rj  r6   rR  r   s    r/   rT  zBaseApiClient._use_aiohttpr  sJ     	 	<17R<<[II	< 2d:	r.   c                     | j         r| j        p| j        }| j        r	|s| j        S t	          | j        j                  }|                    d                                          S )Nwss)scheme)	rf   r'  r&  r8  r   r@  r[   rb   geturl)r   rh  	url_partss      r/   _websocket_base_urlz!BaseApiClient._websocket_base_url|  sl    <9DMJdl "$7 " !!+455IU++22444r.   c                     | j         5  | j        s+t          | j                  \  | _        }| j        s|| _        | j        r!t	          | | j                  cddd           S t          d          # 1 swxY w Y   dS )z/Retrieves the access token for the credentials.r1  N0Could not resolve API token from the environment)rC  r?  ro   rf   get_token_from_credentialsRuntimeError)r   rf   s     r/   _access_tokenzBaseApiClient._access_token  s    		 	O 	O !%.t|%D%D%D"7| 	! $,		 O)$0ABB	O 	O 	O 	O 	O 	O 	O 	O MNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   AA2#A22A69A6c                   K   | j         p| j        t          j                    | _        | j        4 d{V  | j         t          j                    | _         	 ddd          d{V  n# 1 d{V swxY w Y   | j         S )a[  Lazily initializes and returns an asyncio.Lock for async authentication.

    This method ensures that a single `asyncio.Lock` instance is created and
    shared among all asynchronous operations that require authentication,
    preventing race conditions when accessing or refreshing credentials.

    The lock is created on the first call to this method. An internal async lock
    is used to protect the creation of the main authentication lock to ensure
    it's a singleton within the client instance.

    Returns:
        The asyncio.Lock instance for asynchronous authentication operations.
    N)rD  rE  r   rB  r   s    r/   _get_async_auth_lockz"BaseApiClient._get_async_auth_lock  s      $		,	4.5lnn+4 1 1 1 1 1 1 1 1 ("),..$

01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1   s    A))
A36A3c                   K   | j         s|                                  d{V }|4 d{V  | j         s<t          j        t          | j                   d{V \  | _         }| j        s|| _        	 ddd          d{V  n# 1 d{V swxY w Y   | j         rt          | | j                    d{V S t          d          )z>Retrieves the access token for the credentials asynchronously.Nr1  r  )r?  r  r   	to_threadro   rf    async_get_token_from_credentialsr  )r   async_auth_lockrf   s      r/   r}  z!BaseApiClient._async_access_token  s      #"7799999999o  	# 	# 	# 	# 	# 	# 	# 	#   	#-4->. . . ( ( ( ( ( (
$$
W  #"DL"	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#  M3


        
 KLLLs   AB
BBhttp_methodr\   request_dictc                    d |                                 D             }|D ]}||= |rSt          |t                    rt          | j        |          }n/t          | j        t          j        |                    }n| j        }d}| j        r|dk    r|                    d          rd}| j        rW|                    d          sB|s@| j        s| j	        r2| j
        r|j        t          j        k    sd| j         d| j	         d|z   }|j        d| }	n|j         d| }	|j        |j        st!          d	          |j        }
t#          |d
          r!|j        rt'          j        ||j                   |
}| j
        r| j        r| j	        s| j        r7|j        t          j        k    rt-          |
|          }n=t-          |
|	          }n,| j
        r%|j        t          j        k    rt-          |
|          }| j        r)| j                            d          rt/          d          t1          |j                  }|j        t!          d          t7          |j        |           t9          |||j        ||          S )Nc                 <    g | ]}|                     d           |S )_)ra   )r   rR   s     r/   r  z0BaseApiClient._build_request.<locals>.<listcomp>  s)    PPPcCNN3<O<OPcPPPr.   Fr6   zpublishers/google/modelsTz	projects/z/locations/r^   zBase URL must be set.
extra_bodyzauth_tokens/z4Ephemeral tokens can only be used with the live API.zRequest headers must be set.r{   rz   r<   r|   ru   )rK   r   r   rT   r@  r<  r%  ra   rf   r'  r8  r>  r   
COLLECTIONrH  r[   rl   rn  r  r   recursive_dict_updater&  re   r(   rw   ru   r<   rZ   ry   )r   r  r\   r  r(  keys_to_deleterR   patched_http_optionsquery_vertex_base_modelsversioned_pathr[   rz   rU   s                r/   _build_requestzBaseApiClient._build_request  sR    QP\%6%6%8%8PPPN  
s

 0	L+	.	. 
1 
  

  2 :< H H 
  
 "/$&5  OO677 ! "&J,,J )J \	J "]	J  J %<'( ( CBB$-BBBTId'/!4zznn.:CCTCCn 	%-#, 	. .///%.h 	$l33 + #
,7   C *L*!]* <* 
6%& & Hd++
 

 	* 8M<TTT(D))c| //?? %
@   00D0LMM#+5666"$&8   $,"   r.   Fhttp_requeststreamc                    d }| j         rw| j        s| j        rid|                                  |j        d<   | j        r | j        j        r| j        j        |j        d<   |j        rt          j	        |j                  nd }nK|j        rDt          |j        t                    s#|j        rt          j	        |j                  nd }n|j        }|                                 rt          |j                  }| j        Ht!          | j        d          | _        t#          j                    }| j                            |           | j        j        r5d|v r1d|v r|                    dd	          }n|                    dd
          }| j                            |j                                        |||j        |j        |          }nO| j                            |j        |j        ||j        |j                  }| j                            ||          }t:          j                            |           tA          |j        |r|n|j!        g          S )Nrz  r{  r|  r   )max_refresh_attemptsgoogleapis.comsandboxsandbox.googleapis.commtls.sandbox.googleapis.commtls.googleapis.com)r{   rz   r|   r<   ru   r  r{   rz   r   r<   ru   r  )"r%  rf   r'  r  r<   r?  r~  r|   r   dumpsr   r   rM  rW   rz   rL  r   r   default_client_cert_sourceconfigure_mtls_channel_is_mtlsreplacerx  r{   upperru   rN  build_requestsendr   r   raise_for_responser   text)r   r  r  r|   rz   client_cert_sourcer   httpx_requests           r/   _request_oncezBaseApiClient._request_once-  s   
 )-D} #$, #$- #.N8J8J8L8L.N.Nl?+		 
t0A 
. 	23 /;.?ITZ)***Tdd		 #,+U33 	#2>2CML-...$$"$!!## "G !!c		!	)#4!"$
 $
 $
  "<>> 77	
 	
 	
 
	!	* E/?3/F/F&(E ## ,.CDD#)11$**,,&& 2  hh (66$&& 7  m #((v(FFh
O&&x000fA((8=/  r.   c                     |rat          |t                    rt          di |n|}|j        r7t	          |j                  }t          j        di |} || j        ||          S |                     | j        ||          S Nr-   )	r   r}   r   rY  r  r   r\  r  r]  r   r  r(  r  parameter_modelrk  r   s          r/   r  zBaseApiClient._requestj  s      
? d+++
%
%
%
%
%  
	& ?!/"?@@!11L11uT'v>>>;;t)<@@@r.   c                 l  K   d }| j         rZ| j        s| j        rLd|                                  d {V  |j        d<   | j        r | j        j        r| j        j        |j        d<   |j        rNt          |j        t                    s-t          j        |j                                      d          }n|j        }|r|                                 r`|                                  d {V | _        |j        }|                                 rtt%          j                    }| j                            |           d {V  | j        j        r5d|v r1d|v r|                    dd          }n|                    dd	          }	  | j        j        d|j        ||j        |t3          j        |j        
          d| j         d {V }n# t2          j        t2          j        t2          j        t2          j         tB          j"        f$ r}tG          j$        dtK          j&        dd          z              d {V  tN          (                    d|z             | )                    | j*                  | _        |                                  d {V | _         | j        j        d|j        ||j        |t3          j        |j        
          d| j         d {V }Y d }~nd }~ww xY wtV          j,        -                    |           d {V  t]          |d          r|j/        }ta          |j        |          S | j1        2                    |j        |j        ||j        |j                  }| j1        3                    ||           d {V }	tV          j,        -                    |	           d {V  ta          |	j        |	          S |                                 r|                                  d {V | _        |j        }|                                 rtt%          j                    }| j                            |           d {V  | j        j        r5d|v r1d|v r|                    dd          }n|                    dd	          }	  | j        j        d|j        ||j        |t3          j        |j        
          d| j         d {V }tV          j,        -                    |           d {V  |}
t]          |
d          r|
j/        }
ta          |
j        |
4                                 d {V g          S # t2          j        t2          j        t2          j        t2          j         tB          j"        f$ rF}tG          j$        dtK          j&        dd          z              d {V  tN          (                    d|z             | )                    | j*                  | _        |                                  d {V | _         | j        j        d|j        ||j        |t3          j        |j        
          d| j         d {V }tV          j,        -                    |           d {V  |}t]          |d          r|j/        }ta          |j        |4                                 d {V g          cY d }~S d }~ww xY w| j1                            |j        |j        |j        ||j                   d {V }	tV          j,        -                    |	           d {V  ta          |	j        |	j4        g          S )Nrz  r{  r|  r   r  r  r  r  r  totalr  r   r   	   z!Retrying due to aiohttp error: %s	_responser  r  r{   rz   r<   r   ru   r-   )5r%  rf   r'  r}  r<   r?  r~  r|   r   r   r   r  encoderT  r  rS  rz   rP  r   r  r  r  r  rx  r{   r   ClientTimeoutru   rW  ClientConnectorErrorClientConnectorDNSErrorClientOSErrorServerDisconnectedErrorauth_exceptionsTransportErrorr   sleeprandomrandintr7   rF  rV  r@  r   r   raise_for_async_responsern  r  r   rQ  r  r  r  )r   r  r  r|   rz   r  r   r   r  client_responseunwrapped_responseunwrapped_retry_responses               r/   _async_request_oncez!BaseApiClient._async_request_once~  sB	      !D } 
$, 
$- 

6$2244444444
6
6 ?+ 
	 
t0A 
. 	23  !)511 !z,+,,33G<<  QM					 DF&*&?&?&A&A A A A A A A&&(( 	I#>@@
%<<          "+ I0@C0G0GCKK*,I cc KK 02GHHc	8408 !("*+,2FGGG  7       (( (+!+*
 	 	 	 a&.A"6"6677
7
7
7
7
7
7
7
++9A=
>
>
> **4+=>> 
1 )-(A(A(C(C"C"C"C"C"C"C$
8408 !("*+,2FGGG  7       ((((((	0 o66x@@@@@@@@@8[)) 	( '(H,h777 0>>&  ( ( ? 
 
 !% 8 = = !> !
 !
 
 
 
 
 
 
 o66GGGGGGGGGO3_EEE					 JM&*&?&?&A&A A A A A A A&&(( 	I#>@@
%<<          "+ I0@C0G0GCKK*,I cc KK 02GHHc0	8408 !("*+,2FGGG  7       ( 88BB
B
B
B
B
B
B
B$,
'55 >!3!= (1C1H1H1J1J+J+J+J+J+J+J*K   (+!+*
 	 	 	 a&.A"6"6677
7
7
7
7
7
7
7
++9A=
>
>
> **4+=>> 
1 )-(A(A(C(C"C"C"C"C"C"C$
8408 !("*+,2FGGG  7       ( 88BB
B
B
B
B
B
B
B*2
"-{;; J'?'I$&.-22444444445       9	D !% 8 @ @&  ( ( !A !
 !
 
 
 
 
 
 
 o66GGGGGGGGGO3o6J5KLLLs:   AG	 	<KCKKB0T7 7=Z:4D;Z5/Z:5Z:c                   K   |rgt          |t                    rt          di |n|}|j        r=t	          |j                  }t          j        di |} || j        ||           d {V S |                     | j        ||           d {V S r  )	r   r}   r   rY  r  r   r^  r  r_  r  s          r/   _async_requestzBaseApiClient._async_request%  s        
K d+++
%
%
%
%
%  
	& K!/"?@@&6666U43\6JJJJJJJJJ"" ,        r.   c                 |    t          | j        t                    r| j                                        }n| j        }|S r   )r   r@  r   
model_dump)r   copieds     r/   get_read_only_http_optionsz(BaseApiClient.get_read_only_http_options:  s:    $$i00 "!,,..ff!fMr.   c                     |                      ||||          }|                     ||d          }|j        r|j        d         nd}t          |j        |          S )NFr  r   r   r<   body)r  r  r   SdkHttpResponser<   )r   r  r\   r  r(  r  r   response_bodys           r/   rx  zBaseApiClient.requestA  sp     &&T< L }}\<}FFH'/'?G ##R  8#3-HHHHr.   c              #   D  K   |                      ||||          }|                     ||d          }|                                D ]}t          j        |          }	 |                    d          r\t          j        |          }	t          j        	                    |	
                    di           
                    d          |	|           n7# t          j        j        $ r  t                              d|z             Y nw xY wt          |j        |          V  d S )NTr  	{"error":errorr   1Failed to decode chunk that contains an error: %sr&  )r  r  r   r   r  ra   r   r   r   raise_errorr6   decoderr   r7   debugr(  r<   )
r   r  r\   r  r(  r  session_responser   
chunk_dump
chunk_jsons
             r/   request_streamedzBaseApiClient.request_streamedQ  sK      &&T< L }}\<}MM!**,, O O:e$$j  -- 	z*--*
/
%
%nnWb))--f55  
 \)   ?*L	
 	
 	
 		
 $4$<:NNNNNNNO Os   A1C1DDc                    K   |                      ||||          }|                     ||d           d {V }|j        r|j        d         nd}t          |j        |          S )NFr  r(  r  r   r   r&  )r  r   r   r(  r<   )r   r  r\   r  r(  r  resultr)  s           r/   async_requestzBaseApiClient.async_requestn  s       &&T< L &&!U '        F 281GOF*1--RM6>FFFFr.   c                    K   |                      ||||          }|                     ||d           d {V fd} |            S )NTr6  c                   K   2 3 d {V } t          j        |           }	 |                    d          rbt          j        |          }t          j                            |                    di                               d          |           d {V  n7# t           j        j	        $ r  t                              d|z             Y nw xY wt          j        |          W V  6 d S )Nr+  r,  r   r-  r&  )r   r  ra   r   r   r   raise_error_asyncr6   r/  r   r7   r0  r(  r<   )r   r2  r3  r   s      r/   async_generatorz=BaseApiClient.async_request_streamed.<locals>.async_generator  sA     ! I I I I I I IZ&&
	"";// J//J/33w++//77        
 |+ 	 	 	
,,AJN   $		
 h&6ZHHHHHHHH "s   C+A7B1CC)r  r   )r   r  r\   r  r(  r  r<  r   s          @r/   async_request_streamedz$BaseApiClient.async_request_streamed  s       &&T< L ((!T )        HI I I I I$ ?r.   r(  	file_path
upload_urlupload_sizec                    t          |t          j                  r|                     ||||          S t	          |d          5 }|                     ||||          cddd           S # 1 swxY w Y   dS )a%  Transfers a file to the given URL.

    Args:
      file_path: The full path to the file or a file like object inherited from
        io.BytesIO. If the local file path is not found, an error will be
        raised.
      upload_url: The URL to upload the file to.
      upload_size: The size of file content to be uploaded, this will have to
        match the size requested in the resumable upload request.
      http_options: The http options to use for the request.

    returns:
          The HttpResponse object from the finalize request.
    r>  rbN)r   ioIOBase
_upload_fdopen)r   r?  r@  rA  r(  files         r/   upload_filezBaseApiClient.upload_file  s    , )RY'' 
__
Z<     	4   
D*k  
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A**A.1A.rH  c                   d}|r|n| j         }t          |t                    r|                    d          nt	          |dd          }|rLt          |          }t          |          }t          |                    |j        |j	                            }	 |
                    t                    }	d}
|	rt          |	          }
d}|
|z   |k    r|dz  }t          |t                    r|                    d          n|j        }|2t          | j         t                    r| j         j        n| j         j        }t          |          }t          |t                    r|                    d	i           nt	          |d	i           pi }|rt          |          ni }|                    |t!          |          t!          |
          d
           t#          ||           d}|t$          k     rp| j                            d|||	|          }|j                            d          rn6t,          t.          |z  z  }|dz  }t1          j        |           |t$          k     p||
z  }|j                            d          dk    rn||k    rt5          d          t6          j                            |           |j                            d          dk    rt5          d          t=          |j        |j        g          S )a  Transfers a file to the given URL.

    Args:
      file: A file like object inherited from io.BytesIO.
      upload_url: The URL to upload the file to.
      upload_size: The size of file content to be uploaded, this will have to
        match the size requested in the resumable upload request.
      http_options: The http options to use for the request.

    returns:
          The HttpResponse object from the finalize request.
    r   r[   Nr  netlocTupload
, finalizeru   r<   zX-Goog-Upload-CommandzX-Goog-Upload-OffsetzContent-LengthPOSTr  x-goog-upload-statusr   activeFAll content has been uploaded, but the upload status is not finalized.final6Failed to upload file: Upload status is not finalized.r   ) r@  r   r}   r6   rL   r   r   rb   r  rL  read
CHUNK_SIZEr   ru   rw   updaterW   rZ   MAX_RETRY_COUNTrN  rx  r<   INITIAL_RETRY_DELAYDELAY_MULTIPLIERtimer  rl   r   r   r   r   r  )r   rH  r@  rA  r(  offsetr[   rc   parsed_upload
file_chunk
chunk_sizeupload_commandru   rU   user_headersupload_headersretry_countr   delay_secondss                      r/   rF  zBaseApiClient._upload_fd  s[   ( F#/G<<T5GL lD))	5$$$\:t44 
  X&&kz**m

 
  '0B !   j8
99Z((jj	 %__
n	f		+	+,& d++$,

9
%
%
%# 
 
 $,d33,D&&#+ 	
 2':: d++<,

9b
)
)
)i44: 
 .:AtL)))rn#1"%f++
OO  	 	 	
 %^5GHHHk/))%--"& . 
 
  677 	
+/?/LMq
=!!! /)) 
f				4	5	5	A	A			
 
 	
k8
r O&&x000233w>>OPPP(8=/JJJJr.   c                   |                      d|i |          }d}|j        r;t          |j        t                    st	          j        |j                  }n|j        }| j                            |j        |j	        |j
        ||j                  }t          j                            |           t          |j
        |                                g          j        d         S )Downloads the file data.

    Args:
      path: The request path with query params.
      http_options: The http options to use for the request.

    returns:
          The file bytes
    r6   r\   r  r(  Nr  r   r   )r  r|   r   r   r   r  rN  rx  r{   rz   r<   ru   r   r   r   r   rW  r   )r   r\   r(  r  r|   r   s         r/   download_filezBaseApiClient.download_file%  s     &&Dr '  L )-D !)511 !z,+,, !))"$$ *  H O&&x000x}}&7  ! r.   c                p  K   t          |t          j                  r|                     ||||           d{V S t	          j        |          }|                    d           d{V }|4 d{V  |                     ||||           d{V cddd          d{V  S # 1 d{V swxY w Y   dS )a  Transfers a file asynchronously to the given URL.

    Args:
      file_path: The full path to the file. If the local file path is not found,
        an error will be raised.
      upload_url: The URL to upload the file to.
      upload_size: The size of file content to be uploaded, this will have to
        match the size requested in the resumable upload request.
      http_options: The http options to use for the request.

    returns:
          The HttpResponse object from the finalize request.
    r>  NrC  )r   rD  rE  _async_upload_fdanyioPathrG  )r   r?  r@  rA  r(  rH  fds          r/   async_upload_filezBaseApiClient.async_upload_fileL  s     * )RY'' 

((
Z< )          Z	""d4      b 
 
 
 
 
 
 
 
**
Kl + 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   3B%%
B/2B/c          	        K   d}|r|n| j         }t          |t                    r|                    d          nt	          |dd          }|rLt          |          }t          |          }t          |                    |j        |j	                            }| 
                                r|                                  d{V | _        	 t          |t          j                  r|                    t                     }	n |                    t                      d{V }	d}
|	rt#          |	          }
d}|
|z   |k    r|dz  }t          |t                    r|                    d          n|j        }|2t          | j         t                    r| j         j        n| j         j        }t'          |          }t          |t                    r|                    d	i           nt	          |d	i           pi }|rt          |          ni }|                    |t+          |          t+          |
          d
           t-          ||           d}d}|t.          k     r| j                            d||	|t3          j        |                     d{V }|j                            d          rn<t8          t:          |z  z  }|dz  }t=          j        |           d{V  |t.          k     ||
z  }||j                            d          dk    rn||k    rtA          d          [tB          j"        #                    |           d{V  |-|j                            d          dk    rtA          d          tI          |j        |%                                 d{V g          S 	 t          |t          j                  r|                    t                     }	n |                    t                      d{V }	d}
|	rt#          |	          }
d}|
|z   |k    r|dz  }t          |t                    r|                    d          n|j        }|2t          | j         t                    r| j         j        n| j         j        }t'          |          }t          |t                    r|                    d	i           nt	          |d	i           pi }|rt          |          ni }|                    |t+          |          t+          |
          d
           t-          ||           d}d}|t.          k     r| j&                            d||	||           d{V }|"|j        r|j                            d          rn6t8          t:          |z  z  }|dz  }tO          j        |           |t.          k     ||
z  }||j                            d          dk    rn||k    rtA          d          KtB          j"        #                    |           d{V  |-|j                            d          dk    rtA          d          tI          |j        |j%        g          S )a  Transfers a file asynchronously to the given URL.

    Args:
      file: A file like object inherited from io.BytesIO.
      upload_url: The URL to upload the file to.
      upload_size: The size of file content to be uploaded, this will have to
        match the size requested in the resumable upload request.
      http_options: The http options to use for the request.

    returns:
          The HttpResponse object from the finalized request.
    r   r[   NrK  TrM  rN  ru   r<   rO  rP  r
  )r{   rz   r|   r<   ru   zX-Goog-Upload-Statusr   rR  rS  rT  rU  rV  r  rQ  )(r@  r   r}   r6   rL   r   r   rb   r  rL  rT  r  rS  rD  rE  rW  rX  r   ru   rw   rY  rW   rZ   rZ  rx  r   r  r<   r[  r\  r   r  rl   r   r   r  r   r  rQ  r]  )r   rH  r@  rA  r(  r^  r[   rc   r_  r`  ra  rb  ru   rU   rc  rd  re  r   rf  r  s                       r/   rm  zBaseApiClient._async_upload_fdm  s     ( F#/G<<T5GL lD))	5$$$\:t44 
  X&&kz**m

 
  '0B !   j  d$($=$=$?$???????dBdBI&& 	3yy,,**!YYz22222222*
 	':*!+--
L
(. <..'LY'''& 	
 ? D.55.d ((%- 
 4G<< ,-->LY+++,	266<" 	
 0<Cl+++%3$'KK!*oo
 
 	 	 	
 	'~7IJJJO++088$+2DEEE 9        ( !!"899 -1A;1NO-

+m,,
,
,
,
,
,
,
, O++ 	*  $$%;<<HH
&    BH O44X>>>>>>>>>

""#9::gEED
 
 	
 

8==??-B-B-B-B-B-B,C   
EdBI&& 	3yy,,**!YYz22222222*
 	':*!+--
L
(. ,--&LY'''% 	
 ? D.55.d ((%- 
 4G<< ,-->LY+++,	266<" 	
 0<Cl+++%3$'KK!*oo
 
 	 	 	
 	'~7IJJJO++"&":"B"B $( #C # #      / )!) *!)--.DEE * -1A;1NO-

+
*]
#
#
#! O++$ 	*''++,BCCxOO
&    EEN O44_EEEEEEEEE

%%))*@AAWLLD
 
 	
 

!O4H3I   r.   c          	        K   |                      d|i |          }d}|j        rNt          |j        t                    s-t	          j        |j                                      d          }n|j        }|                                 r|                                  d{V | _	        | j	        
                    |j        |j        |j        |t          j        |j                             d{V }t"          j                            |           d{V  t)          |j        |                                 d{V g          j        d         S | j        
                    |j        |j        |j        ||j        	           d{V }t"          j                            |           d{V  t)          |j        |                                g          j        d         S )
rh  r6   ri  Nr   r
  r  rj  r   r  )r  r|   r   r   r   r  r  rT  r  rS  rx  r{   rz   r<   r   r  ru   r   r   r  r   rW  r   rQ  )r   r\   r(  r  r|   r   r  s          r/   async_download_filez!BaseApiClient.async_download_file8  sD      &&Dr '  L !D !)511 !z,+,,33G<<  $($=$=$?$???????d,44$&'l.BCCC 5        h O44X>>>>>>>>>

x}})>)>)>)>)>)>(?  A 
 #6>>$&& ?        o O44_EEEEEEEEE

!0D0D0F0F/G  A r.   response_modelc                     d S r   r-   )r   ru  s     r/   _verify_responsezBaseApiClient._verify_responser  s    Dr.   c                     | j         j        s | j        r| j                                         | j        r| j                                         dS dS )zCloses the API client.N)r@  rO  rN  r  rL  r   s    r/   r  zBaseApiClient.closeu  sa     * !t/A !
    '
$$&&&&&' 'r.   c                    K   | j         j        s| j                                         d{V  | j        r-| j         j        s#| j                                         d{V  dS dS dS )zCloses the API async client.N)r@  rR  rQ  r   rS  rU  r  r   s    r/   r   zBaseApiClient.aclose~  s       0 .$++--------- *T%7%F *!'')))))))))))* * * *r.   c                     	 | j         j        s|                                  n# t          $ r Y nw xY w	 t	          j                                        |                                            dS # t          $ r Y dS w xY w)zCloses the API client when the object is garbage collected.

    ADK uses this client so cannot rely on the genai.[Async]Client.__del__
    for cleanup.
    N)r@  rO  r  r  r   r!  r"  r   r   s    r/   r  zBaseApiClient.__del__  s    , 

   
d  ,,T[[]];;;;;   
dds    # 
008A. .
A<;A<)NNNNNNr   )Fr  r  )Br)   r*   r+   r,   r   ro  rW   ri   rj   rm   r   r   r   rM  rP  r   r  staticmethodr   r
   r   r  rJ  rV  rZ  rT  r  r  r   rB  r  r   r}  r}   r   ry   r  r   r  r  r  r   r$  r(  rx  r   r4  r8  r=  rD  rE  intrI  rF  r   rk  rq  rn  	AsyncFilerm  rt  r   rw  r  r   r  r-   r.   r/   r$  r$  U  sL       @@ "&#CG# $26@? @?@? }@? FK3?@	@?
 }@? @? ./@? @? @? @?D
T 
 
 
 
d    S!>?S! S! S! S!j ??W!334? ? ? <?B 1'{ 1'w7I 1' 1' 1' <1'f 4' 4'9K 4' 4' 4' <4'lD    53 5 5 5 5OS O O O O!', ! ! ! !2MsCx M M M M8 37i ii i f%	i
 ./i i i i i\ ; ;; ; 	; ; ; ;@ 37	A AA ./A 	A
 A A A A* 7<eM eM%eM/3eMeM eM eM eMT 37	  ./ 	
    *'*<     37I II I f%	I
 ./I I I I I* 37O OO O f%	O
 ./O $,-O O O OD 37G GG G f%	G
 ./G G G G G, 37! !! ! f%	!
 ./! ! ! ! !R 37
 
 
sBI~&
 
 	
 ./
 
 
 
 
L 37aK aK aKIaK aK 	aK ./aK aK aK aK aKN 37	% % %% ./	%
 S%Z% % % %Z 37
 
 
sBI~&
 
 	
 ./
 
 
 
 
N 37I I I")U_S112I I 	I ./I I I I I^ 37	5 5 55 ./	5
 S%Z5 5 5 5t	W-> 	4 	 	 	 	' ' ' '* * * *     r.   r$  ru  c                 v    |j         s|j        st          |           |j        st          d          |j        S )=Refreshes the authentication token for the given credentials.r  )r  r  rt   r  )ru  rm   s     r/   r  r    sK    
   1 		 K
I
J
JJ		r.   c                 D  K   |j         s|j        st|                                  d{V }|4 d{V  |j         s|j        s t          j        t
          |           d{V  ddd          d{V  n# 1 d{V swxY w Y   |j        st          d          |j        S )r  Nr  )r  r  r  r   r  rt   r  )ru  rm   r  s      r/   r  r    sU     
  ; 1 ;"7799999999O ; ; ; ; ; ; ; ;		 ;K$5 ;k:::::::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
 
	 K
I
J
JJ		s   /A44
A>A>)qr,   r   collections.abcr   r   dataclassesr   r  rD  r   r  rX   r4   r  r4  r@   rA  r]  typingr   r   r   r   r	   r
   r   urllib.parser   r   r:  rn  r  google.authri   google.auth.credentialsr   google.auth.transportr   rr   r   r   r  r   pydanticr   r   r   requests.structuresr   r   r   r   r   r   typesr   r   r   r(  r   r   websockets.asyncio.clientr   r  ModuleNotFoundErrorwebsockets.clientr   r   rX  	multidictr    r  r"   	getLoggerr7   rX  r   rZ  r[  r\  rG  rl   r(   rW   r;   r}   rE   rT   r   r|  rZ   re   ro   rt   rw   ry   r   r   r   r  r  r   r  r  r  r  AsyncClientr  r$  rj   rm   r  r  r-   r.   r/   <module>r     s  " 
  % % % % % %  ! ! ! ! ! !  				    				  



 



      V V V V V V V V V V V V V V V V V V ! ! ! ! ! ! # # # # # #            / / / / / / & & & & & & < < < < < < 5 5 5 5 5 5        $ $ $ $ $ $  3 3 3 3 3 3                          $ $ $ $ $ $ 2 2 2 2 2 2 # # # # # #            6======= 6 6 6555555556
 ...++   $  H((((((GGGGGG 
	5	6	6
   !4L 2 2 2 2 2
 2 2 2:# : : : :"8DcN 8t 8 8 8 8@)4   8E#s(^E19%s
:K1LE	E E E EGC Gs Gs G G G G%T	* u[#5E/F    "k k    
eE3J'(
e_
 
 
 
 " " " " " " " "~ ~ ~ ~ ~ ~ ~ ~J     !12  w7I        F    el   *    u(   (B B B B B B B BJ2

(4
 	
 
 
 
(4 	     s$   C# #C10C17C> >DD