
                             S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJr   SS
\S\S\S\S\S\SS4S jjrS r " S S\5      rg)z.Download utils for Artifact Registry commands.    )futuresN)transfer)requests)log)
console_io)
transports)files	dest_pathfile_res_name	file_nameallow_overwrite
chunk_sizeparallelismreturnc                 j   [         R                  " 5       n[        R                  R	                  U 5      n [        R                  R                  U 5      (       a7  U(       d0  [        R                  " SU  S35        [        R                  " S5        [         R                  " 5       nUR                  US9nUR                  R                  U5      n	U S-   n
 [        R                  " U
5       nUR!                  U	R"                  5        SSS5        UR&                   S	U S
3nU	R"                  U:  a  SnU	R"                  U-  n/ n[)        SU5       HM  nXS-
  :  a   UR+                  X-  US-   U-  S-
  45        M+  UR+                  X-  U	R"                  S-
  45        MO     [-        SU 3UU	R"                  S9 n[.        R0                  " US9 n[3        U5       VVVs/ s H&  u  nu  nnUR5                  [6        UU
UUUUUU5	      PM(     nnnn[.        R8                  " U5       H  n UR;                  5         M     SSS5        SSS5        U(       a:  [        R                  R                  U 5      (       a  [        R>                  " U 5        [        R@                  " X5        g! , (       d  f       GN= f! [$         a4    [        R                  " SU
 S35        [        R                  " S5         GNf = fs  snnnf ! [<         a  nUeSnAff = f! , (       d  f       N= f! , (       d  f       N= f)z!Downloads a file to a local path.zFile z already exists.   )namez.tmpNzTemporary file za already exists (likely from a previous failed download attempt). Please remove it and try again.zv1/z:download?alt=mediar   zDownloading )labelr   total)max_workers)!r   	GetClientospath
expanduserexistsr   errorsysexitGetMessages<ArtifactregistryProjectsLocationsRepositoriesFilesGetRequest%projects_locations_repositories_filesGetr	   BinaryFileWritertruncate	sizeBytesFileExistsErrorurlrangeappendSharedProgressBarr   ThreadPoolExecutor	enumeratesubmit_DownloadRangeas_completedresult	Exceptionremoverename)r
   r   r   r   r   r   clientmfile_reqfile_restemp_dest_pathfdownload_url
range_sizerangesiprogress_barexecutorstartendfsfutureexcs                          9lib/googlecloudsdk/command_lib/artifacts/download_util.pyDownloadrF       s    & gg  +) WW^^IIIi[ 012HHQK!KK L ( 99==hG( v%.				/1jj##$ 
0 JJ<s=/1DE, +%K!![0*&K a?mmQ^a!ez%9A%=>?mmQ^X%7%7!%;<=	 ! 9+& 		#	#	< "+6!2 "3oa% //
 "3 	  ((,&	
--/ -! 
=6 	22IIi))N&q 
0	/	 II
.) *N 	N HHQK<$  	)	' 
=	< s   J7 +J%J7 9L$L-K8L)K?9L=L$%
J4/J7 4J7 7:K54K58L?
L		L	L	L
L!	L$$
L2c                   ^ ^^ SUS-   TUS.n[         R                  " U5      n	[        R                  " U5       n
U
R	                  T5        [
        R                  R                  U
U	UUS9n[        R                  " SS9Ul
         UR                  UUU 4S jS9  UR                  R                  5          SSS5        g! UR                  R                  5         f = f! , (       d  f       g= f)	z3Downloads a range of bytes to the placeholder file.Tr   )auto_transfer
total_sizeprogressr'   )	chunksizer4   N)response_encodingc                 B   > TR                  TUR                  T-
  5      $ N)SetProgressrJ   )_dlr>   r@   thread_indexs     rE   <lambda> _DownloadRange.<locals>.<lambda>   s    !9!9kkE!"    )callback)jsondumpsr	   r#   seekr   rF   FromDatar   GetApitoolsTransport
bytes_httpStreamMediastreamclose)rR   r8   r:   r@   rA   r   r>   r4   ser_dict	json_datar9   ds   `  `  `     rE   r.   r.   w   s     !G	( jj")n-FF5M""		 	# 	A 22TJALmm   hhnn# .-" hhnn# .-s$   ACB?C?CC
C,c                   0    \ rS rSrSrS rS rS rS rSr	g)	r*      zDA thread safe progress bar that allows adding increamental progress.c                     S/U-  U l         X l        [        R                  " U0 UD6U l        [
        R                  " 5       U l        g )Nr   )completed_per_threadr   r   ProgressBar_progress_bar	threadingLock_lock)selfr   r   argskwargss        rE   __init__SharedProgressBar.__init__   s<    !"k 1DJ#//@@D!DJrU   c                 :    U R                   R                  5         U $ rN   )rh   	__enter__)rl   s    rE   rr   SharedProgressBar.__enter__   s      "KrU   c                 <    U R                   R                  XU5        g rN   )rh   __exit__)rl   exc_type	exc_value	tracebacks       rE   ru   SharedProgressBar.__exit__   s    Y?rU   c                     U R                      X R                  U'   U R                  R                  [	        U R                  5      U R
                  -  5        S S S 5        g ! , (       d  f       g = frN   )rk   rf   rh   rO   sumr   )rl   rR   ps      rE   rO   SharedProgressBar.SetProgress   sL    	01-
$$
d''
(4::
5 
s   A
A  
A.)rk   rh   rf   r   N)
__name__
__module____qualname____firstlineno____doc__ro   rr   ru   rO   __static_attributes__ rU   rE   r*   r*      s    L"@rU   r*   )r   )r   
concurrentr   rW   r   r   ri   apitools.base.pyr   $googlecloudsdk.command_lib.artifactsr   googlecloudsdk.corer   googlecloudsdk.core.consoler   googlecloudsdk.core.credentialsr   googlecloudsdk.core.utilr	   strboolintrF   r.   objectr*   r   rU   rE   <module>r      s    5   	 
  % 9 # 2 6 * T'T'T' T' 	T'
 T' T' 
T'n%P rU   