
    GjǮ              	          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 d dl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 ddlmZ ddlmZ ddlmZmZ  ej6                  d      Z	 d deeeef   ef   deeeef      deeef   fdZ 	 d deeeef   ef   deeeef      deeef   fdZ!	 d deeeef   ef   deeeef      deeef   fdZ"	 d deeeef   ef   deeeef      deeef   fdZ#	 d deeeef   ef   deeeef      deeef   fdZ$	 d deeeef   ef   deeeef      deeef   fdZ%	 d deeeef   ef   deeeef      deeef   fdZ&	 d deeeef   ef   deeeef      deeef   fdZ'	 d deeeef   ef   deeeef      deeef   fdZ(	 d deeeef   ef   deeeef      deeef   fdZ) G d dejT                        Z+ G d dejT                        Z,y)!    N)AnyOptionalUnion)	urlencode   )_api_client)_api_module)_common)_extra_utils)_transformers)types)get_value_by_path)set_value_by_path)
AsyncPagerPagerzgoogle_genai.filesfrom_objectparent_objectreturnc                 V    i }t        | dg      t        |dgt        | dg             |S )Nfilegetvsetvr   r   	to_objects      X/var/www/python/quitsure-support/venv/lib/python3.12/site-packages/google/genai/files.py_CreateFileParameters_to_mldevr   (   5     !)	+x ,VHd;9:	    c                 V    i }t        | dg      t        |dgt        | dg             |S NsdkHttpResponsesdk_http_responser   r   s      r   _CreateFileResponse_from_mldevr$   3   @     !)	+)*+7'(${=N<O*P 
r   c           
      ~    i }t        | dg      -t        |ddgt        j                  t        | dg                   |S Nname_urlr   r   r   tt_file_namer   s      r   _DeleteFileParameters_to_mldevr-   @   F     !)	+x ,FF#Q]]4fX3N%O 
r   c                 V    i }t        | dg      t        |dgt        | dg             |S r!   r   r   s      r   _DeleteFileResponse_from_mldevr0   M   r%   r   c           
      ~    i }t        | dg      -t        |ddgt        j                  t        | dg                   |S r'   r*   r   s      r   _GetFileParameters_to_mldevr2   Z   r.   r   c                 V    i }t        | dg      t        |dgt        | dg             |S )Nurisr   r   s      r   )_InternalRegisterFilesParameters_to_mldevr5   g   r   r   c                     i }t        | dg      t        |ddgt        | dg             t        | dg      t        |ddgt        | dg             |S )N	page_size_querypageSize
page_token	pageTokenr   r   s      r   _ListFilesConfig_to_mldevr<   r   sm     !)	+}%1*-tK+/O 
+~&2	;[<.) 
r   c                 R    i }t        | dg      t        t        | dg      |       |S )Nconfig)r   r<   r   s      r   _ListFilesParameters_to_mldevr?      s1     !)	+z".d;
;YG	r   c                    i }t        | dg      t        |dgt        | dg             t        | dg      t        |dgt        | dg             t        | dg      't        |dgt        | dg      D cg c]  }| c}       |S c c}w )Nr"   r#   nextPageTokennext_page_tokenfilesr   r   r   r   items       r   _ListFilesResponse_from_mldevrF      s     !)	+)*+7'(${=N<O*P 
+()5&'kO;L)MN	+y!-WIkG91MNNO	  Os   3	Bc                     i }t        | dg      t        |dgt        | dg             t        | dg      't        |dgt        | dg      D cg c]  }| c}       |S c c}w )Nr"   r#   rC   r   rD   s       r   !_RegisterFilesResponse_from_mldevrH      sw     !)	+)*+7'(${=N<O*P 
+y!-WIkG91MNNO	  Os   	Ac            	       b   e Zd Zdddeej
                     dej                  fdZdddej                  deej                     dej                  fdZdddedeej                     dej                  fd	Zdddedeej                      dej"                  fd
Zdddee   deej(                     dej*                  fdZdddeeej2                  e   ej6                  f   deej8                     dej                  fdZdddeeej                  ej<                  ej>                  f   deej@                     de!fdZ"ddde#jH                  jJ                  jL                  dee   deej(                     dej*                  fdZ'dddeej
                     de(ej                     fdZy)FilesNr>   r>   r   c                L   t        j                  |      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd        d }|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d|||      }|j                   si nt#        j$                  |j                         }	| j                  j                  st'        |	      }	t         j(                  j+                  |	t-        |dd       rGdt-        |j                  d	d       t-        |j                  d
d       t-        |j                  dd       dini       }
t        j.                  |j0                        |
_        | j                  j5                  |
       |
S NrK   iThis method is only supported in Gemini Developer API mode, not in Gemini Enterprise Agent Platform mode.r)   rC   r8   ?r>   getresponse_schemaresponse_json_schemainclude_all_fieldsrQ   rR   rS   responsekwargsheaders)r   _ListFilesParametersr   vertexai
ValueErrorr?   rP   
format_mapr   popr>   http_optionsr
   convert_to_dictencode_unserializable_typesrequestbodyjsonloadsrF   ListFilesResponse_from_responsegetattrHttpResponserY   r#   _verify_responseselfr>   parameter_modelrequest_dictrequest_url_dictpathquery_paramsr_   rV   response_dictreturn_values              r   _listzFiles._list   s    00O
   4 
 3?Cl%))&1	!!"23##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL''t\<PH&mmBHMM1JM$$3MBm**99 ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! : L$ &+%7%7  &L" 	%%l3r   r   c                   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd        d }|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d|||      }	|@t!        |d	d       r3t        j"                  |	
      }
| j                  j%                  |
       |
S |	j&                  si nt)        j*                  |	j&                        }| j                  j                  st-        |      }t         j"                  j/                  |t!        |dd       rGdt!        |j                  dd       t!        |j                  dd       t!        |j                  dd       dini       }
| j                  j%                  |
       |
S Nr   r>   rN   r)   zupload/v1beta/filesr8   rO   r>   postshould_return_http_responser#   rQ   rR   rS   rT   rU   )r   _CreateFileParametersr   r[   r\   r   rP   r]   r   r^   r>   r_   r
   r`   ra   rb   rh   CreateFileResponserj   rc   rd   re   r$   rg   rl   r   r>   rm   rn   ro   rp   rq   r_   rV   rs   rr   s               r   _createzFiles._create   s7    11O   4 
 4ODl%))&1	$//0@A$##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL''lLH g-t --Il
''5&mmBHMM1JM$$4]Cm++:: ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! ; L& 	%%l3r   r(   c                   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd       d}|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d	|||      }	|	j                   si nt#        j$                  |	j                         }
t         j&                  j)                  |
t+        |dd      rGdt+        |j                  d
d      t+        |j                  dd      t+        |j                  dd      dini       }| j                  j-                  |       |S )ai  Retrieves the file information from the service.

    Args:
      name (str): The name identifier for the file to retrieve.
      config (GetFileConfig): Optional, configuration for the get method.

    Returns:
      File: The file information.

    Usage:

    .. code-block:: python

      file = client.files.get(name='files/...')
      print(file.uri)
    r(   r>   rN   r)   files/{file}r8   rO   r>   NrP   rQ   rR   rS   rT   rU   )r   _GetFileParametersr   r[   r\   r2   rP   r]   r   r^   r>   r_   r
   r`   ra   rb   rc   rd   re   Filerg   rh   rj   rl   r(   r>   rm   rn   ro   rp   rq   r_   rV   rr   rs   s               r   rP   z	Files.getJ  s   ( ..O   4 
 1Al%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL''t\<PH&mmBHMM1JM::,, ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! - L& 	%%l3r   c                N   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd       d}|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d	|||      }	|	j                   si nt#        j$                  |	j                         }
| j                  j                  st'        |
      }
t         j(                  j+                  |
t-        |dd      rGdt-        |j                  d
d      t-        |j                  dd      t-        |j                  dd      dini       }t        j.                  |	j0                        |_        | j                  j5                  |       |S )a]  Deletes a remotely stored file.

    Args:
      name (str): The name identifier for the file to delete.
      config (DeleteFileConfig): Optional, configuration for the delete method.

    Returns:
      DeleteFileResponse: The response for the delete method

    Usage:

    .. code-block:: python

      client.files.delete(name='files/...')
    r   rN   r)   r   r8   rO   r>   NdeleterQ   rR   rS   rT   rU   rX   )r   _DeleteFileParametersr   r[   r\   r-   rP   r]   r   r^   r>   r_   r
   r`   ra   rb   rc   rd   re   r0   DeleteFileResponserg   rh   ri   rY   r#   rj   r   s               r   r   zFiles.delete  s   & 11O   4 
 4ODl%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL''$lH 'mmBHMM1JM$$4]Cm++:: ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! ; L$ &+%7%7  &L" 	%%l3r   r4   c                   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd        d }|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d|||      }	|@t!        |d	d       r3t        j"                  |	
      }
| j                  j%                  |
       |
S |	j&                  si nt)        j*                  |	j&                        }| j                  j                  st-        |      }t         j"                  j/                  |t!        |dd       rGdt!        |j                  dd       t!        |j                  dd       t!        |j                  dd       dini       }
| j                  j%                  |
       |
S Nr4   r>   rN   r)   zfiles:registerr8   rO   r>   rx   ry   rz   rQ   rR   rS   rT   rU   )r    _InternalRegisterFilesParametersr   r[   r\   r5   rP   r]   r   r^   r>   r_   r
   r`   ra   rb   rh   RegisterFilesResponserj   rc   rd   re   rH   rg   rl   r4   r>   rm   rn   ro   rp   rq   r_   rV   rs   rr   s               r   _register_fileszFiles._register_files  s7    <<O   4 
 ?Ol%))&1	**+;<##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL''lLH g-t 008Ll
''5&mmBHMM1JM$$7Fm..== ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! > L& 	%%l3r   c                   | j                   j                  rt        d      t        j                         }|r_t        |t              rt        j                  di |}n|}t        j                  |j                  |j                  |j                        }nt        j                         }|j                  /|j                  j                  d      sd|j                   |_	        t        j                  ||j                  |j                        \  }}}||_        ||_        | j!                  |t        j"                  |d            }|j$                  .|j$                  j&                  d|j$                  j&                  vrt)        d	      |j$                  j&                  d   }	t        |t*        j,                        r*| j                   j/                  ||	|j                  |
      }
n>t1        j2                  |      }| j                   j/                  ||	|j                  |
      }
t        j                  j5                  |
j6                  d   |r|j9                               S i       S )a  Calls the API to upload a file using a supported file service.

    Args:
      file: A path to the file or an `IOBase` object to be uploaded. If it's an
        IOBase object, it must be opened in blocking (the default) mode and
        binary mode. In other words, do not use non-blocking mode or text mode.
        The given stream must be seekable, that is, it must be able to call
        `seek()` on 'path'.
      config: Optional parameters to set `display_name`, `mime_type`, and
        `name`.
    =This method is only supported in the Gemini Developer client.	mime_typer(   display_namefiles/user_http_optionsuser_mime_typeTr_   ry   rw   x-goog-upload-urlPFailed to create file. Upload URL was not returned from the create file request.r_   r   rU    )r   r[   r\   r   UploadFileConfig
isinstancedictr   r   r(   r   
startswithr   prepare_resumable_uploadr_   
size_bytesr~   CreateFileConfigr#   rY   KeyErrorioIOBaseupload_fileosfspathrg   rd   
model_dumprl   r   r>   config_modelfile_objr_   r   r   rV   
upload_urlreturn_filefs_paths               r   uploadzFiles.uploadA  s>   "   
I  ))+L	FD	!--77 **  #00h h}} )A)A()Kx}}o.hm*6*O*O&33#--+'L*i
 %H"H||%%%4
  H 	""*%%--5h&@&@&H&HH  ++334GHJ$		"$$00

H//l 1 k 		$g$$00
:x22 1 k ::$$!!&),2|&&( %  8: %  r   c                   | j                   j                  rt        d      d}|r(t        |t              rt        j                  di |}n|}t        |t
        j                        r|j                  t        d      t        j                  |      }d| d}ddi}| dt        |       }d}t        |d	g      t        |d	g      }| j                   j                  ||
      }t        |t
        j                        r	||_        |S t        |t
        j                         r|j"                  ||j"                  _        |S )ar  Downloads a file's data from storage.

    Files created by `upload` can't be downloaded. You can tell which files are
    downloadable by checking the `source` or `download_uri` property.

    Note: This method returns the data as bytes. For `Video` and
    `GeneratedVideo` objects there is an additional side effect, that it also
    sets the `video_bytes` property on the `Video` object.

    Args:
      file (str): A file name, uri, or file object. Identifying which file to
        download.
      config (DownloadFileConfigOrDict): Optional, configuration for the get
        method.

    Returns:
      File: The file data as bytes.

    Usage:

    .. code-block:: python

      for file client.files.list():
        if file.download_uri is not None:
          break
      else:
        raise ValueError('No files found with a `download_uri`.')
      data = client.files.download(file=file)
      # data = client.files.download(file=file.name)
      # data = client.files.download(file=file.download_uri)

      video = types.Video(uri=file.uri)
      video_bytes = client.files.download(file=video)
      video.video_bytes
    r   NzOnly generated files can be downloaded, uploaded files can't be downloaded. You can tell which files are downloadable by checking the `source` or `download_uri` property.r   	:downloadaltmediarO   r_   r   r   )r   r[   r\   r   r   r   DownloadFileConfigr   download_urir+   r,   r   r   download_fileVideovideo_bytesGeneratedVideovideo)	rl   r   r>   r   r(   rp   rq   r_   datas	            r   downloadzFiles.download  sI   R   
I  L	FD	!//9&9$

#(9(9(A5 
 ==DD6#D7#LV1Y|,-.DLL>*+7,(89l))! * D
 $$d K 
D%..	/DJJ4J#djjKr   authc                   t        |t        j                  j                  j                        st        d      |t        j                         }n1t        j                  j                  |      }|j                  d      }|j                  xs t        j                         }|j                  xs i }|j                         D ci c]  \  }}|j                         | }}}t        j                   | j                  |      }d| |d<   |j"                  r|j"                  |d<   ||_        ||_
        | j%                  ||      S c c}}w )*Registers gcs files with the file service.:auth must be a google.auth.credentials.Credentials object.TdeepBearer authorizationx-goog-user-projectr   )r   googler   credentialsCredentialsr\   r   RegisterFilesConfigmodel_validate
model_copyr_   HttpOptionsrY   itemslowerr   get_token_from_credentialsquota_project_idr   	rl   r   r4   r>   r_   rY   kvtokens	            r   register_fileszFiles.register_files  s*    dFKK33??@
F  ~((*f((77?f  d +f&&=%*;*;*=L""(bG(/81qwwy!|8G82243C3CTJE!(0GO'+'<'<g#$"L&FT&99 9s   E	c                V    | j                   }t        d|| j                  |      |      S )a  Lists all files from the service.

    Args:
      config (ListFilesConfig): Optional, configuration for the list method.

    Returns:
      A Pager object that contains one page of files. When iterating over
      the pager, it automatically fetches the next page if there are more.

    Usage:

    .. code-block:: python

      for file in client.files.list(config={'page_size': 10}):
        print(file.name)
    rC   rK   )rt   r   rl   r>   list_requests      r   listz
Files.list   s1    ( ::L

&
!	 r   ))__name__
__module____qualname__r   r   ListFilesConfigOrDictrf   rt   
FileOrDictCreateFileConfigOrDictr|   r~   strGetFileConfigOrDictr   rP   DeleteFileConfigOrDictr   r   r   RegisterFilesConfigOrDictr   r   r   r   PathLiker   r   UploadFileConfigOrDictr   r   r   DownloadFileConfigOrDictbytesr   r   r   r   r   r   r   r   r   r   rJ   rJ      s\    @DB ; ;<BBP 8<	M M u334	M
 M` IMOO"*5+D+D"EOzzOd LPUU"*5+G+G"HUUv ;?	M IM u667	M
 ""Mf 8<	K #r{{3'23K u334	K
 zzKb :>	O #uzz5;;0D0DDEO u556	O
 Ol ;?: KK##//: I	:
 u667: "":D @D ; ;<UZZr   rJ   c            	       6   e Zd Zdddeej
                     dej                  fdZdddej                  deej                     dej                  fdZdddedeej                     dej                  fd	Zdddedeej                      dej"                  fd
Zdddee   deej(                     dej*                  fdZdddeeej2                  e   ej6                  f   deej8                     dej                  fdZdddeeej                  f   deej<                     defdZ ddde!jD                  jF                  jH                  dee   deej(                     dej*                  fdZ%dddeej
                     de&ej                     fdZy)
AsyncFilesNrK   r>   r   c                j  K   t        j                  |      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd        d }|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d|||       d {   }|j                   si nt#        j$                  |j                         }	| j                  j                  st'        |	      }	t         j(                  j+                  |	t-        |dd       rGdt-        |j                  d	d       t-        |j                  d
d       t-        |j                  dd       dini       }
t        j.                  |j0                        |
_        | j                  j5                  |
       |
S 7 
wrM   )r   rZ   r   r[   r\   r?   rP   r]   r   r^   r>   r_   r
   r`   ra   async_requestrc   rd   re   rF   rf   rg   rh   ri   rY   r#   rj   rk   s              r   rt   zAsyncFiles._list  s     00O
   4 
 3?Cl%))&1	!!"23##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL%%33t\< H 'mmBHMM1JM$$3MBm**99 ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! : L$ &+%7%7  &L" 	%%l3?s   D$H3&H0'D
H3r   c                  K   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd        d }|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d|||       d {   }	|@t!        |d	d       r3t        j"                  |	
      }
| j                  j%                  |
       |
S |	j&                  si nt)        j*                  |	j&                        }| j                  j                  st-        |      }t         j"                  j/                  |t!        |dd       rGdt!        |j                  dd       t!        |j                  dd       t!        |j                  dd       dini       }
| j                  j%                  |
       |
S 7 'wrv   )r   r{   r   r[   r\   r   rP   r]   r   r^   r>   r_   r
   r`   ra   r   rh   r|   rj   rc   rd   re   r$   rg   r}   s               r   r~   zAsyncFiles._createe  sF     11O   4 
 4ODl%))&1	$//0@A$##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL%%33lL H g-t --Il
''5&mmBHMM1JM$$4]Cm++:: ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! ; L& 	%%l3I   D%I'I(D'Ir(   c                  K   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd       d}|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d	|||       d{   }	|	j                   si nt#        j$                  |	j                         }
t         j&                  j)                  |
t+        |dd      rGdt+        |j                  d
d      t+        |j                  dd      t+        |j                  dd      dini       }| j                  j-                  |       |S 7 íw)as  Retrieves the file information from the service.

    Args:
      name (str): The name identifier for the file to retrieve.
      config (GetFileConfig): Optional, configuration for the get method.

    Returns:
      File: The file information.

    Usage:

    .. code-block:: python

      file = await client.aio.files.get(name='files/...')
      print(file.uri)
    r   rN   r)   r   r8   rO   r>   NrP   rQ   rR   rS   rT   rU   )r   r   r   r[   r\   r2   rP   r]   r   r^   r>   r_   r
   r`   ra   r   rc   rd   re   r   rg   rh   rj   r   s               r   rP   zAsyncFiles.get  s    ( ..O   4 
 1Al%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL%%33t\< H 'mmBHMM1JM::,, ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! - L& 	%%l35s   D%G-'G+(CG-c                l  K   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd       d}|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d	|||       d{   }	|	j                   si nt#        j$                  |	j                         }
| j                  j                  st'        |
      }
t         j(                  j+                  |
t-        |dd      rGdt-        |j                  d
d      t-        |j                  dd      t-        |j                  dd      dini       }t        j.                  |	j0                        |_        | j                  j5                  |       |S 7 
w)ag  Deletes a remotely stored file.

    Args:
      name (str): The name identifier for the file to delete.
      config (DeleteFileConfig): Optional, configuration for the delete method.

    Returns:
      DeleteFileResponse: The response for the delete method

    Usage:

    .. code-block:: python

      await client.aio.files.delete(name='files/...')
    r   rN   r)   r   r8   rO   r>   Nr   rQ   rR   rS   rT   rU   rX   )r   r   r   r[   r\   r-   rP   r]   r   r^   r>   r_   r
   r`   ra   r   rc   rd   re   r0   r   rg   rh   ri   rY   r#   rj   r   s               r   r   zAsyncFiles.delete  s"    & 11O   4 
 4ODl%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL%%33$l H 'mmBHMM1JM$$4]Cm++:: ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! ; L$ &+%7%7  &L" 	%%l3?s   D%H4'H1(D
H4r4   c                  K   t        j                  ||      }| j                  j                  rt	        d      t        |      }|j                  d      }|rdj                  |      }nd}|j                  d      }|r| dt        |       }|j                  dd        d }|j                  ,|j                  j                  |j                  j                  }t        j                  |      }t        j                  |      }| j                  j                  d|||       d {   }	|@t!        |d	d       r3t        j"                  |	
      }
| j                  j%                  |
       |
S |	j&                  si nt)        j*                  |	j&                        }| j                  j                  st-        |      }t         j"                  j/                  |t!        |dd       rGdt!        |j                  dd       t!        |j                  dd       t!        |j                  dd       dini       }
| j                  j%                  |
       |
S 7 'wr   )r   r   r   r[   r\   r5   rP   r]   r   r^   r>   r_   r
   r`   ra   r   rh   r   rj   rc   rd   re   rH   rg   r   s               r   r   zAsyncFiles._register_files^  sF     <<O   4 
 ?Ol%))&1	**+;<##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL%%33lL H g-t 008Ll
''5&mmBHMM1JM$$7Fm..== ?Hd3 #*#**,=t$ )0#**,BD) '.#**,@$'

 ! > L& 	%%l3Ir   c                  K   | j                   j                  rt        d      t        j                         }|r_t        |t              rt        j                  di |}n|}t        j                  |j                  |j                  |j                        }nt        j                         }|j                  /|j                  j                  d      sd|j                   |_	        t        j                  ||j                  |j                        \  }}}||_        ||_        | j!                  |t        j"                  |d             d{   }|j$                  F|j$                  j&                  0d	|j$                  j&                  vr#d
|j$                  j&                  vrt)        d      d	|j$                  j&                  v r|j$                  j&                  d	   }	n|j$                  j&                  d
   }	t        |t*        j,                        r2| j                   j/                  ||	|j                  |       d{   }
nFt1        j2                  |      }| j                   j/                  ||	|j                  |       d{   }
t        j                  j5                  |
j6                  d   |r|j9                               S i       S 7 7 7 Nw)a  Calls the API to upload a file asynchronously using a supported file service.

    Args:
      file: A path to the file or an `IOBase` object to be uploaded. If it's an
        IOBase object, it must be opened in blocking (the default) mode and
        binary mode. In other words, do not use non-blocking mode or text mode.
        The given stream must be seekable, that is, it must be able to call
        `seek()` on 'path'.
      config: Optional parameters to set `display_name`, `mime_type`, and
        `name`.
    r   r   Nr   r   Tr   rw   r   zX-Goog-Upload-URLr   r   r   rU   r   )r   r[   r\   r   r   r   r   r   r   r(   r   r   r   r   r_   r   r~   r   r#   rY   r   r   r   async_upload_filer   r   rg   rd   r   r   s               r   r   zAsyncFiles.upload  s    "   
I  ))+L	FD	!--77 **  #00h h}} )A)A()Kx}}o.hm*6*O*O&33#--+'L*i
 %H"H\\%%%4
 "  H 	""*%%--5x'A'A'I'II#8+E+E+M+MM   
 : : B B	B--556IJj--556IJj$		"**<<

H//l =  k 		$g**<<
:x22 =  k ::$$!!&),2|&&( %  8: %  C0
s9   EKKC2KKAKKA
KKKc                  K   | j                   j                  rt        d      d}|r(t        |t              rt        j                  d
i |}n|}t        j                  |      }d| d}d}t        |dg      t        |dg      }ddi}|r| dt        |       }| j                   j                  ||	       d{   }|S 7 w)a  Downloads a file's data from the file service.

    The Gemini Enterprise Agent Platform implementation of the API does not
    include the file service.

    Files created by `upload` can't be downloaded. You can tell which files are
    downloadable by checking the `download_uri` property.

    Args:
      File (str): A file name, uri, or file object. Identifying which file to
        download.
      config (DownloadFileConfigOrDict): Optional, configuration for the get
        method.

    Returns:
      File: The file data as bytes.

    Usage:

    .. code-block:: python

      for file client.files.list():
        if file.download_uri is not None:
          break
      else:
        raise ValueError('No files found with a `download_uri`.')
      data = client.files.download(file=file)
      # data = client.files.download(file=file.name)
      # data = client.files.download(file=file.uri)
    r   Nr   r   r_   r   r   rO   r   r   )r   r[   r\   r   r   r   r   r+   r,   r   r   async_download_file)	rl   r   r>   r   r(   rp   r_   rq   r   s	            r   r   zAsyncFiles.download  s     H   
I  L	FD	!//9&9==DD6#DLL>*+7,(89l7#LvQy./0d!!55! 6  D
 Ks   B;C=C>Cr   c                  K   t        |t        j                  j                  j                        st        d      |t        j                         }n1t        j                  j                  |      }|j                  d      }|j                  xs t        j                         }|j                  xs i }|j                         D ci c]  \  }}|j                         | }}}t        j                   | j                  |       d{   }d| |d<   |j"                  r|j"                  |d<   ||_        ||_
        | j%                  ||       d{   S c c}}w 7 V7 w)	r   r   NTr   r   r   r   r   )r   r   r   r   r   r\   r   r   r   r   r_   r   rY   r   r   r    async_get_token_from_credentialsr   r   r   s	            r   r   zAsyncFiles.register_filesB  sG     dFKK33??@
F  ~((*f((77?f  d +f&&=%*;*;*=L""(bG(/81qwwy!|8G8>>$ E ")0GO'+'<'<g#$"L&F%%4%??? 9 @s1   CE%	E$&E%
E!AE%E#E%#E%c                r   K   | j                   }t        d|| j                  |       d{   |      S 7 	w)a  Lists all files from the service asynchronously.

    Args:
      config (ListFilesConfig): Optional, configuration for the list method.

    Returns:
      A Pager object that contains one page of files. When iterating over
      the pager, it automatically fetches the next page if there are more.

    Usage:

    .. code-block:: python

      async for file in await client.aio.files.list(config={'page_size': 10}):
        print(file.name)
    rC   rK   N)rt   r   r   s      r   r   zAsyncFiles.liste  s=     ( ::Ljjj''	  	(s   )75
7)'r   r   r   r   r   r   rf   rt   r   r   r|   r~   r   r   r   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     sR    @DD ; ;<DDT 8<	M M u334	M
 M` IMQQ"*5+D+D"EQzzQh LPUU"*5+G+G"HUUv ;?	M IM u667	M
 ""Mf 8<	P #r{{3'23P u334	P
 zzPl :>	A #uzz/"A u556	A
 AP ;?!@ KK##//!@ I	!@
 u667!@ ""!@H @D ; ;<%**r   r   )N)-r   rd   loggingr   typingr   r   r   urllib.parser   google.authr    r   r	   r
   r   r   r+   r   r   r   r   r   pagersr   r   	getLoggerloggerr   r   objectr   r$   r-   r0   r2   r5   r<   r?   rF   rH   
BaseModulerJ   r   r   r   r   <module>r     sd  $ 
   	 ' ' "         . . %			/	0
 /3tCH~v-.DcN+ 
#s(^ /3
tCH~v-.
DcN+
 
#s(^
 /3
tCH~v-.
DcN+
 
#s(^
 /3
tCH~v-.
DcN+
 
#s(^
 /3
tCH~v-.
DcN+
 
#s(^
 /3tCH~v-.DcN+ 
#s(^ /3tCH~v-.DcN+ 
#s(^. /3tCH~v-.DcN+ 
#s(^ /3tCH~v-.DcN+ 
#s(^* /3tCH~v-.DcN+ 
#s(^ e	K"" e	Pb	'' b	r   