
    e                         S r SSKJr  SSKJr  SSKJ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.    )absolute_import)division)unicode_literals)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DownloadrI   #   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*   )	chunksizer7   N)response_encodingc                 B   > TR                  TUR                  T-
  5      $ N)SetProgressrM   )_dlrA   rC   thread_indexs     rH   <lambda> _DownloadRange.<locals>.<lambda>   s    !9!9kkE!"    )callback)jsondumpsr   r&   seekr   rI   FromDatar   GetApitoolsTransport
bytes_httpStreamMediastreamclose)rU   r;   r=   rC   rD   r   rA   r7   ser_dict	json_datar<   ds   `  `  `     rH   r1   r1   z   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        rH   __init__SharedProgressBar.__init__   s<    !"k 1DJ#//@@D!DJrX   c                 :    U R                   R                  5         U $ rQ   )rk   	__enter__)ro   s    rH   ru   SharedProgressBar.__enter__   s      "KrX   c                 <    U R                   R                  XU5        g rQ   )rk   __exit__)ro   exc_type	exc_value	tracebacks       rH   rx   SharedProgressBar.__exit__   s    Y?rX   c                     U R                      X R                  U'   U R                  R                  [	        U R                  5      U R
                  -  5        S S S 5        g ! , (       d  f       g = frQ   )rn   ri   rk   rR   sumr   )ro   rU   ps      rH   rR   SharedProgressBar.SetProgress   sL    	01-
$$
d''
(4::
5 
s   A
A  
A.)rn   rk   ri   r   N)
__name__
__module____qualname____firstlineno____doc__rr   ru   rx   rR   __static_attributes__ rX   rH   r-   r-      s    L"@rX   r-   )r   )r   
__future__r   r   r   
concurrentr   rZ   r   r    rl   apitools.base.pyr   $googlecloudsdk.command_lib.artifactsr   googlecloudsdk.corer	   googlecloudsdk.core.consoler
   googlecloudsdk.core.credentialsr   googlecloudsdk.core.utilr   strboolintrI   r1   objectr-   r   rX   rH   <module>r      s    5 &  '   	 
  % 9 # 2 6 * T'T'T' T' 	T'
 T' T' 
T'n%P rX   