
    [Th              	       d   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 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j0                  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&	 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jR                        Z* G d dejR                        Z+y)!    N)AnyOptionalUnion)	urlencode   )_api_module)_common)_transformers)types)get_value_by_path)set_value_by_path)
AsyncPagerPagerzgoogle_genai.filesfrom_objectparent_objectreturnc                     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	pageTokengetvsetvr   r   	to_objects      W/home/www/backend.miabetepe.com/venv/lib/python3.12/site-packages/google/genai/files.py_ListFilesConfig_to_mldevr   &   sm     !)	+}%1*-tK+/O 
+~&2	;[<.) 
    c           
      j    i }t        | dg      #t        |dgt        t        | dg      |             |S )Nconfig)r   r   r   r   s      r   _ListFilesParameters_to_mldevr#   ;   sC     !)	+z".	
!${XJ"?K 
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             |S Ndetailsmessagecoder   r   s      r   _FileStatus_to_mldevr)   J        !)	+	{#/YKkI;!?@	+	{#/YKkI;!?@	+x ,VHd;9:	r    c           
      F   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             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             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             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             t        | dg      t        |dgt        | dg             t        | dg      #t        |dgt        t        | dg      |             |S )Nnamedisplay_namedisplayName	mime_typemimeType
size_bytes	sizeBytescreate_time
createTimeexpiration_timeexpirationTimeupdate_time
updateTimesha256_hash
sha256Hashuridownload_uridownloadUristatesourcevideo_metadatavideoMetadataerror)r   r   r)   r   s      r   _File_to_mldevrC   [   s@    !)	+x ,VHd;9:	+'(4]OT+7G%HI	+}%1ZL${[M"BC	+~&2[M4l^#DE	+'3\ND}o$FG	+)*+7%&[;L:M(NO	+'3\ND}o$FG	+'3\ND}o$FG	+w+UGT+w78	+'(4]OT+7G%HI	+y!-WItK';<	+z".XJ[8* =>	+()*6_%tK:J9K'LM	+y!-		T+y99E 
r    c           
          i }t        | dg      #t        |dgt        t        | dg      |             t        | dg      t        |dgt        | dg             |S )Nfiler"   )r   r   rC   r   s      r   _CreateFileParameters_to_mldevrF      si     !)	+x ,	tK&2I> 
+z".XJ[8* =>	r    c           
          i }t        | dg      -t        |ddgt        j                  t        | dg                   t        | dg      t        |dgt        | dg             |S Nr,   _urlrE   r"   r   r   tt_file_namer   s      r   _GetFileParameters_to_mldevrM      l     !)	+x ,FF#Q]]4fX3N%O 
+z".XJ[8* =>	r    c           
          i }t        | dg      -t        |ddgt        j                  t        | dg                   t        | dg      t        |dgt        | dg             |S rH   rJ   r   s      r   _DeleteFileParameters_to_mldevrP      rN   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             |S r%   r   r   s      r   _FileStatus_from_mldevrR      r*   r    c           
      F   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             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             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             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             t        | dg      t        |dgt        | dg             t        | dg      #t        |dgt        t        | dg      |             |S )Nr,   r.   r-   r0   r/   r2   r1   r4   r3   r6   r5   r8   r7   r:   r9   r;   r=   r<   r>   r?   rA   r@   rB   )r   r   rR   r   s      r   _File_from_mldevrT      s=    !)	+x ,VHd;9:	+'3^$d;&HI	+
|$0[M4j\#BC	+}%1\ND{m$DE	+~&2]OT+~%FG	+()*6&'k<L;M)NO	+~&2]OT+~%FG	+~&2]OT+~%FG	+w+UGT+w78	+'3^$d;&HI	+y!-WItK';<	+z".XJ[8* =>	+()5%&[?:K(LM	+y!-		tK';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      1t        |dgt        | dg      D cg c]  }t        ||       c}       |S c c}w )NsdkHttpResponsesdk_http_responsenextPageTokennext_page_tokenfiles)r   r   rT   )r   r   r   items       r   _ListFilesResponse_from_mldevr\   
  s     !)	+)*+7'(${=N<O*P 
+()5&'kO;L)MN	+y!-		 [7)4	
 T9-	
 
	
s   3Bc                 V    i }t        | dg      t        |dgt        | dg             |S NrV   rW   r   r   s      r   _CreateFileResponse_from_mldevr_   $  @     !)	+)*+7'(${=N<O*P 
r    c                 V    i }t        | dg      t        |dgt        | dg             |S r^   r   r   s      r   _DeleteFileResponse_from_mldevrb   1  r`   r    c                      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ej*                  e   ej.                  f   deej0                     dej                  fdZdddeej
                     deej                     fdZdddeeej                  ej8                  ej:                  f   deej<                     defdZ y)FilesNr"   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d
nt#        j$                  |j                         }	| j                  j                  st'        |	      }	t         j(                  j+                  |	|j-                               }
t        j.                  |j0                        |
_        | j                  j5                  |
       |
S )aa  Lists all files from the service.

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

    Returns:
      ListFilesResponse: The response for the list method.

    Usage:

    .. code-block:: python

      pager = client.files.list(config={'page_size': 10})
      for file in pager.page:
        print(file.name)
    re   =This method is only supported in the Gemini Developer client.rI   rZ   r   ?r"   Nget responsekwargsheaders)r   _ListFilesParameters_api_clientvertexai
ValueErrorr#   ri   
format_mapr   popr"   http_optionsr	   convert_to_dictencode_unserializable_typesrequestbodyjsonloadsr\   ListFilesResponse_from_response
model_dumpHttpResponsero   rW   _verify_responseselfr"   parameter_modelrequest_dictrequest_url_dictpathquery_paramsrv   rl   response_dictreturn_values              r   _listzFiles._list@  s   ( 00O
   
I  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'A'A'C : L &+%7%7  &L" 	%%l3r    rE   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dnt)        j*                  |	j&                        }| j                  j                  st-        |      }t         j"                  j/                  ||j1                               }
| j                  j%                  |
       |
S NrE   r"   rg   rI   zupload/v1beta/filesr   rh   r"   postshould_return_http_response)rW   rj   rk   )r   _CreateFileParametersrq   rr   rs   rF   ri   rt   r   ru   r"   rv   r	   rw   rx   ry   getattrCreateFileResponser   rz   r{   r|   r_   r~   r   r   rE   r"   r   r   r   r   r   rv   rl   r   r   s               r   _createzFiles._create  s    11O   
I  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++::'A'A'C ; L 	%%l3r    r,   c                x   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d
nt#        j$                  |	j                         }
| j                  j                  st'        |
      }
t         j(                  j+                  |
|j-                               }| 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"   rg   rI   files/{file}r   rh   r"   Nri   rj   rk   )r   _GetFileParametersrq   rr   rs   rM   ri   rt   r   ru   r"   rv   r	   rw   rx   ry   rz   r{   r|   rT   Filer~   r   r   r   r,   r"   r   r   r   r   r   rv   rl   r   r   s               r   ri   z	Files.get  s   ( ..O   
I  1Al%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL''t\<PH&mmBHMM1JM$$&}5m::,,'A'A'C - L 	%%l3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d
nt#        j$                  |	j                         }
| j                  j                  st'        |
      }
t         j(                  j+                  |
|j-                               }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   rg   rI   r   r   rh   r"   Ndeleterj   rk   rn   )r   _DeleteFileParametersrq   rr   rs   rP   ri   rt   r   ru   r"   rv   r	   rw   rx   ry   rz   r{   r|   rb   DeleteFileResponser~   r   r   ro   rW   r   r   s               r   r   zFiles.delete  s   & 11O   
I  4ODl%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL''$lH 'mmBHMM1JM$$4]Cm++::'A'A'C ; L &+%7%7  &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        |t        j                        r|j                  t        d      t        |d      rd|j                  vrt        d      |j!                         }|j#                  dt$        j&                         |j!                         |z
  |_        |j#                  |t$        j*                         nt%        j,                  |      }|rt$        j.                  j1                  |      st3        | d	      t$        j.                  j5                  |      |_        |j                  t7        j8                  |      \  |_        }|j                  t        d
      |rC|j:                  r7|j:                  }d|_        ddd|j(                   |j                   d|_        n3t        j@                  dddd|j(                   |j                   d      }| jC                  |t        jD                  |d            }	|	jF                  .|	jF                  j>                  d|	jF                  j>                  vrtI        d      |	jF                  j>                  d   }
t        |t        j                        r*| j                   jK                  ||
|j(                  |      }n)| j                   jK                  |
|j(                  |      }t        j                  jM                  tO        |jP                  d         |r|jS                               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 `diplay_name`, `mime_type`, and `name`.
    rg   r/   r,   r-   files/zfUnknown mime type: Could not determine the mimetype for your file
 please set the `mime_type` argumentmodeb'The file must be opened in binary mode.r    is not a valid file path.iUnknown mime type: Could not determine the mimetype for your file
    please set the `mime_type` argumentrj   application/json	resumablestartzContent-TypezX-Goog-Upload-ProtocolzX-Goog-Upload-Commandz#X-Goog-Upload-Header-Content-Lengthz!X-Goog-Upload-Header-Content-Typeapi_versionro   Trv   r   r   x-goog-upload-urlPFailed to create file. Upload URL did not returned from the create file request.rv   rE   rk    )*rq   rr   rs   r   UploadFileConfig
isinstancedictr   r/   r,   r-   
startswithioIOBasehasattrr   tellseekosSEEK_ENDr1   SEEK_SETfspathr   isfileFileNotFoundErrorgetsize	mimetypes
guess_typerv   r   ro   HttpOptionsr   CreateFileConfigrW   KeyErrorupload_filer~   rT   r{   r   r   rE   r"   config_modelfile_objoffsetfs_path_rv   rl   
upload_urlreturn_files               r   uploadzFiles.uploadO  s       
I  ))+L	FD	!--77 **  #00h h}} )A)A()Kx}}o.hm$		"				#:
 	
 
v	diiDE
Eyy{f
ii2;; IIK&0h
ii$		$gBGGNN734&(B CDDGGOOG4h				# ) 4 4W =A				#=
 	
 11!..l!#l,$/#*4<4G4G3H2:2D2D1El &&0(3'.8@8K8K7L6>6H6H5I	l ||%%%4
  H 	""*%%--5h&@&@&H&HH  ++334GHJ$		"$$00

H//l 1 k $$00
:x22 1 k ::$$!+"2"26":;,2|&&( %  8: %  r    c                R    t        d| j                  | j                  |      |      S NrZ   re   )r   r   r   r"   s     r   listz
Files.list  s,     



&
!	 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
    rg   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mediarh   rv   r   r   )rq   rr   rs   r   r   r   DownloadFileConfigr   r<   rK   rL   r   r   download_fileVideovideo_bytesGeneratedVideovideo)	r   rE   r"   r   r,   r   r   rv   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    )!__name__
__module____qualname__r   r   ListFilesConfigOrDictr}   r   
FileOrDictCreateFileConfigOrDictr   r   strGetFileConfigOrDictr   ri   DeleteFileConfigOrDictr   r   r   r   PathLiker   r   UploadFileConfigOrDictr   r   r   r   r   DownloadFileConfigOrDictbytesr   r   r    r   rd   rd   >  s    @DC ; ;<CCR 8<	= = u334	=
 =@ IMBB"*5+D+D"EBzzBJ LPEE"*5+G+G"HEEV 8<	r #r{{3'23r u334	r
 zzrj @D ; ;<UZZ :>	O #uzz5;;0D0DDEO u556	O
 Or    rd   c                   Z   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ej*                  e   ej.                  f   deej0                     dej                  fdZdddeej
                     deej                     fdZdddeeej                  f   deej8                     defdZy)
AsyncFilesNre   r"   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d
nt#        j$                  |j                         }	| j                  j                  st'        |	      }	t         j(                  j+                  |	|j-                               }
t        j.                  |j0                        |
_        | j                  j5                  |
       |
S 7 íw)ak  Lists all files from the service.

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

    Returns:
      ListFilesResponse: The response for the list method.

    Usage:

    .. code-block:: python

      pager = await client.aio.files.list(config={'page_size': 10})
      for file in pager.page:
        print(file.name)
    re   rg   rI   rZ   r   rh   r"   Nri   rj   rk   rn   )r   rp   rq   rr   rs   r#   ri   rt   r   ru   r"   rv   r	   rw   rx   async_requestrz   r{   r|   r\   r}   r~   r   r   ro   rW   r   r   s              r   r   zAsyncFiles._list!  s    ( 00O
   
I  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'A'A'C : L &+%7%7  &L" 	%%l3!s   D$G,&G*'CG,rE   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dnt)        j*                  |	j&                        }| j                  j                  st-        |      }t         j"                  j/                  ||j1                               }
| j                  j%                  |
       |
S 7 wr   )r   r   rq   rr   rs   rF   ri   rt   r   ru   r"   rv   r	   rw   rx   r   r   r   r   rz   r{   r|   r_   r~   r   r   s               r   r   zAsyncFiles._createh  s     11O   
I  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++::'A'A'C ; L 	%%l3+s   D%H
'H(C!H
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d
nt#        j$                  |	j                         }
| j                  j                  st'        |
      }
t         j(                  j+                  |
|j-                               }| 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   rg   rI   r   r   rh   r"   Nri   rj   rk   )r   r   rq   rr   rs   rM   ri   rt   r   ru   r"   rv   r	   rw   rx   r   rz   r{   r|   rT   r   r~   r   r   r   s               r   ri   zAsyncFiles.get  s    ( ..O   
I  1Al%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL%%33t\< H 'mmBHMM1JM$$&}5m::,,'A'A'C - L 	%%l3s   D%G'G(BG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d
nt#        j$                  |	j                         }
| j                  j                  st'        |
      }
t         j(                  j+                  |
|j-                               }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   rg   rI   r   r   rh   r"   Nr   rj   rk   rn   )r   r   rq   rr   rs   rP   ri   rt   r   ru   r"   rv   r	   rw   rx   r   rz   r{   r|   rb   r   r~   r   r   ro   rW   r   r   s               r   r   zAsyncFiles.delete  s    & 11O   
I  4ODl%))&1	(()9:##H-LvQy./0dXt$04L*""//;$++88l**<8L66|DL%%33$l H 'mmBHMM1JM$$4]Cm++::'A'A'C ; L &+%7%7  &L" 	%%l3!s   D%G-'G+(CG-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        |t        j                        r|j                  t        d      t        |d      rd|j                  vrt        d      |j!                         }|j#                  d	t$        j&                         |j!                         |z
  |_        |j#                  |t$        j*                         nt%        j,                  |      }|rt$        j.                  j1                  |      st3        | d
      t$        j.                  j5                  |      |_        |j                  t7        j8                  |      \  |_        }|j                  t        d      |rC|j:                  r7|j:                  }d|_        ddd|j(                   |j                   d|_        n3t        j@                  dddd|j(                   |j                   d      }| jC                  |t        jD                  |d             d{   }	|	jF                  F|	jF                  j>                  0d|	jF                  j>                  vr#d|	jF                  j>                  vrtI        d      d|	jF                  j>                  v r|	jF                  j>                  d   }
n|	jF                  j>                  d   }
t        |t        j                        r2| j                   jK                  ||
|j(                  |       d{   }n1| j                   jK                  |
|j(                  |       d{   }t        j                  jM                  tO        |jP                  d         |r|jS                               S i       S 7 x7 7 W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 `diplay_name`, `mime_type`, and `name`.
    rg   r   Nr   r   r   r   r   r   r   rj   r   r   r   r   r   Tr   r   r   zX-Goog-Upload-URLr   r   rE   rk   r   )*rq   rr   rs   r   r   r   r   r   r/   r,   r-   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   r   r   r   r   rv   r   ro   r   r   r   rW   r   async_upload_filer~   rT   r{   r   r   s               r   r   zAsyncFiles.upload4  s        
I  ))+L	FD	!--77 **  #00h h}} )A)A()Kx}}o.hm$		"				#=
 	
 
v	diiDE
Eyy{f
ii2;; IIK&0h
ii$		$gBGGNN734&(B CDDGGOOG4h				# ) 4 4W =A				#=
 	
 11!..l!#l,$/#*4<4G4G3H2:2D2D1El &&0(3'.8@8K8K7L6>6H6H5I	l \\%%%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 **<<
:x22 =  k ::$$!+"2"26":;,2|&&( %  8: %  A0s8   K0Q12Q*3C2Q1%Q-&1Q1Q/AQ1-Q1/Q1c                n   K   t        d| j                  | j                  |       d {   |      S 7 	wr   )r   r   r   s     r   r   zAsyncFiles.list  s8      

jjj''	  	(s   '53
5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)at  Downloads a file's data from the file service.

    The Vertex-AI implementation of the API foes 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)
    rg   Nr   r   rv   r   r   rh   r   r   )rq   rr   rs   r   r   r   r   rK   rL   r   r   async_download_file)	r   rE   r"   r   r,   r   rv   r   r   s	            r   r   zAsyncFiles.download  s     F   
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   r   r   r   r   r   r}   r   r   r   r   r   r   r   r   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r     s    @DE ; ;<EEV 8<	= = u334	=
 =@ IMDD"*5+D+D"EDzzDN LPEE"*5+G+G"HEEV 8<	w #r{{3'23w u334	w
 zzwt @D ; ;<%** :>	@ #uzz/"@ u556	@
 @r    r   )N),r   r{   loggingr   r   typingr   r   r   urllib.parser   rj   r   r	   r
   rK   r   r   r   r   r   pagersr   r   	getLoggerloggerr   r   objectr   r#   r)   rC   rF   rM   rP   rR   rT   r\   r_   rb   
BaseModulerd   r   r   r    r   <module>r     s  $ 
    	 ' ' "      . . % 
		/	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3tCH~v-.3DcN+3 
#s(^3p /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3tCH~v-.3DcN+3 
#s(^3p /3tCH~v-.DcN+ 
#s(^8 /3
tCH~v-.
DcN+
 
#s(^
 /3
tCH~v-.
DcN+
 
#s(^
^K"" ^BX'' Xr    