
    c4(                         d Z ddlmZmZ ddlZddlZddlZddlZddlZddl	m	Z	 ddl
Z
ddlmZ ddlmZ ddlmZmZ ddlmZ d Z G d d	e          Z G d
 de          Z G d de          Z	 	 	 	 	 ddZddZdS )zTalking to the Anaconda server.    )absolute_importprint_functionN)tqdm)BinstarErrorUnauthorized)SimpleStatusc                     t           j                            |           \  }}|dk    r|S |dv r$t           j                            |          \  }}|S t          d                    |                     )N.zip)z.gzz.bz2z.{} does not appear to be a compressed archive.)ospathsplitext
ValueErrorformat)fnamebase1ext1base2s       7lib/python3.11/site-packages/anaconda_project/client.py	_basenamer      sw    '""5))KE4v~ Y		  Yg&&u--tIPPQVWWXXX    c                   X    e Zd ZddZd ZddZddZd Zd Zd	 Z	d
 Z
d Zd ZddZdS )_ClientNc                     t          t          d          s
J d            |t          j        }t          j        |||          | _        d | _        || _        d S )Nget_server_apizPlease upgrade anaconda-client)sitetoken	log_level)hasattrbinstar_utilsloggingINFOr   _api
_user_info_force_username)selfr   usernamer   r   s        r   __init__z_Client.__init__&   s`    }&677YY9YYYY 	%I!0d%S\]]]	'r   c                     | j         %| j                            | j                  | _         | j         J | j                             dd          }|t                      |S )zEGet username to upload to; raise Unauthorized if we aren't logged in.N)loginr)   )r#   r"   userr$   getr   )r%   r&   s     r   	_usernamez_Client._username.   sc    ? 	I"inn43GnHHDO***?&&w55 	.. Or         c                 X    | j                             |t          |                     d S )N)allowed)r"   _check_responselist)r%   resr1   s      r   r2   z_Client._check_response9   s)    	!!#tG}}!=====r   c                    |r"d                     | j        j        ||          }n3d                     | j        j        |                                 |          }| j        j                            |          }|j        dk    S )Nz{}/apps/{}/projects/{}r.   )r   r"   domainr,   sessionr+   status_code)r%   project_namer&   urlr4   s        r   _existsz_Client._exists?   su     	d*11$)2BHl[[CC*11$)2BDNNDTDTVbccCi##C((#%%r   c                 <   d                     | j        j        |                                           }|d         dd|d         id}|rd|d<   t	          j        |          \  }}| j        j                            |||          }|                     |           |S )	Nz{}/apps/{}/projectsnamepublicdescription)r=   accessprofileprivater@   dataheaders	r   r"   r6   r,   r   jencoder7   postr2   )r%   project_inforB   r:   jsonrD   rE   r4   s           r   createz_Client.createG   s    #**49+;T^^=M=MNN (|M:
 
  	'&DN%-d33gi$$StW$EES!!!
r   c                    dD ]y}|                                                     |          rPt          j        |d          5 }t	          |                                          cd d d            c S # 1 swxY w Y   z|                                                     d          rNt          j        |d          5 }t	          |                                          cd d d            S # 1 swxY w Y   J d|z              )N)z.tarz.tar.gzz.tar.bz2rr
   Fzunsupported archive filename %s)	lowerendswithtarfileopenlengetnameszipfileZipFilenamelist)r%   archive_filenamesuffixtfzfs        r   _file_countz_Client._file_countW   so   5 	. 	.F%%''0088 .\"2C88 .Br{{}}--. . . . . . . . . . . . . . . . . .!!##,,V44 	*!1377 *22;;==))* * * * * * * * * * * * * * * *L8;KKLLLs$   !A11A5	8A5	9!C''C+.C+c                    d                     | j        j        |                                 |d                   }|                                }t
          j                            |          |d<   |rd|d<   |                     |          }|||d<   ||d}t          j
        |          \  }	}
| j        j                            ||	|
          }|                     |           |S )	Nz{}/apps/{}/projects/{}/stager=   sizerB   r@   num_of_files)basenameconfigurationrC   )r   r"   r6   r,   copyr   r   getsizer[   r   rG   r7   rH   r2   )r%   rI   rW   uploaded_basenamerB   r:   config
file_countrJ   rD   rE   r4   s               r   stagez_Client.stagea   s    ,33DI4DdnnFVFVXdekXlmm""$$)9::v 	)(F8%%&677
 	0%/F>"-GG%-d33gi$$StW$EES!!!
r   c                 
   d                     | j        j        |                                 ||          }t	          j        i           \  }}| j        j                            |||          }|                     |           |S )Nz {}/apps/{}/projects/{}/commit/{}rC   rF   )r%   r9   dist_idr:   rD   rE   r4   s          r   commitz_Client.commitp   sx    077	8H$..JZJZ\hjqrr%-b11gi$$StW$EES!!!
r   c                    t          |d          5 }t          j        |t          j                            |                    \  }}}d d d            n# 1 swxY w Y   |                                }||d<   ||d<   t          |d          5 }	t          j        |d||	fi          \  }
}t          j
        ||
| j        j        j        d|          }|                     |           d d d            n# 1 swxY w Y   |S )	Nrb)r]   Content-LengthzContent-MD5file)filesi  )rD   verifytimeoutrE   )rQ   r   compute_hashr   r   rb   ra   binstar_requests_extstream_multipartrequestsrH   r"   r7   ro   r2   )r%   rW   rc   r:   s3dataf_hexmd5b64md5r]   archive_file_objectdata_streamrE   r4   s                r   
_put_on_s3z_Client._put_on_s3x   s   "D)) 	jQ$1$>qrwWgGhGh$i$i$i!GVT	j 	j 	j 	j 	j 	j 	j 	j 	j 	j 	j 	j 	j 	j 	j #'  &}"D)) 		&-@#7#Hv(9;N'OP$R $R $R K -%0'+y'8'?(4(/	1 1 1C
   %%%		& 		& 		& 		& 		& 		& 		& 		& 		& 		& 		& 		& 		& 		& 		& 
s$   8AAAAC55C9<C9c                    |                      |d                   s"|                     ||          }|j        dv sJ |                     ||||          }|j        dv sJ |                                }d|v sJ d|v sJ d|v sJ |                     |||d         |d                   }|j        dv sJ |                     |d         |d                   }|j        dv sJ |                                S )	zDUpload archive_filename created from project, throwing BinstarError.r=   )rI   rB   r-   )rI   rW   rc   rB   post_url	form_datarh   )r:   ru   )r;   rK   r8   rf   rJ   r{   ri   )r%   rI   rW   rc   rB   r4   
stage_infos          r   uploadz_Client.upload   s<   ||L011 	1++<+IIC?j0000jjl*:+<!(  * * *,,,,XXZZ
Z''''j((((J&&&&oo./",Z"8%/%<  > > *,,,,kk,v.
90EFF*,,,,xxzzr   c           
      l   d|v r|                     d          \  }}n|                                 }|}|                     ||          st          d          d                    | j        j        ||          }t          j        i           \  }}| j        j	        
                    |||d          5 }	|	                                 t          t          j        d|	j        d                   d                   }
|r t           j                            ||
          }
t'          d	t)          |	j        
                    d
d                    dz  dd          }t+          |
d          5 }|	                    d          D ]>}|r:|                    t1          |          dz             |                    |           ?|                                 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                     |	           t           j                            |
          S )z%Download project archive and extract./404z{}/apps/{}/projects/{}/downloadT)rD   rE   streamzfilename=(.+);zContent-Dispositionr   KiBrl   Ni   Download)unittotal
unit_scaledescwb)
chunk_size)splitr,   r;   r   r   r"   r6   r   rG   r7   r+   raise_for_statusevalrefindallrE   r   r   joinr   intrQ   iter_contentupdaterR   writecloser2   abspath)r%   projectproject_dir
parent_dirownerr9   r:   rD   rE   r4   filenameprogressrv   chunks                 r   downloadz_Client.download   s   '> 	#")--"4"4E<<NN$$E"L||L%00 	&u%%%/66ty7GP\]]%-b11gY""3T74"PP 	!TW  """BJ'7EZ9[\\]^_``H >7<<
H=="%ckoo6F&M&M"N"NQU"U'+!+- - -H h%% ! --->> ' 'E ' E

T(9:::   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	S!!!wx(((s8   4B6G7*A*G G7 G$	$G7'G$	(G77G;>G;)NNNN)r-   )N)NN)__name__
__module____qualname__r'   r,   r2   r;   rK   r[   rf   ri   r{   r   r    r   r   r   r   %   s        ( ( ( (	 	 	> > > >& & & &   M M M      (  8) ) ) ) ) )r   r   c                        e Zd Z fdZ xZS )_UploadedStatusc                     |                     dd           | _        d| j        dn	d| j        z   z   }t          t          |                               d|           d S )Nr:   zUpload successful.: Tsuccessr?   )r+   r:   superr   r'   )r%   rJ   msg	__class__s      r   r'   z_UploadedStatus.__init__   s\    88E4((!DH%QSS$/Rot$$--d-LLLLLr   r   r   r   r'   __classcell__r   s   @r   r   r      sA        M M M M M M M M Mr   r   c                        e Zd Z fdZ xZS )_DownloadedStatusc                     || _         d|dnd|z   z   }t          t          |                               d|           d S )NzDownload successfulr   r   Tr   )r   r   r   r'   )r%   r   r   r   s      r   r'   z_DownloadedStatus.__init__   sK     #h'SssD8OT&&//#/NNNNNr   r   r   s   @r   r   r      sA        O O O O O O O O Or   r   c                 X   | j         rJ t          ||||          }	 |                    |                                 |||          }	t	          |	          S # t
          $ r t          dddg          cY S t          $ r*}
t          ddt          |
          g          cY d }
~
S d }
~
ww xY w)Nr   r&   r   r   Fz0Please log in with the "anaconda login" command.zNot logged in.r   r?   errorszUpload failed.)	problemsr   r   publication_infor   r   r   r   str)r   rW   rc   rB   r   r&   r   r   clientrJ   es              r   _uploadr      s     $)TTTFZ}}W55779IK\^efft$$$ 7 7 7E(Z$4#57 7 7 	7 	7 	7  Z Z ZE7GQTUVQWQWPXYYYYYYYYYZs#   8A B)6	B)?B$B)$B)c                 
   t          ||||          }	 |                    | ||          }t          |          S # t          $ r=}	t	          dd                    |           t          |	          g          cY d }	~	S d }	~	ww xY w)Nr   Fz{} was not found.r   )r   r   r   r   r   r   r   )
r   r   r   r   r&   r   r   r   fnr   s
             r   	_downloadr      s    $)TTTFm__Wk:>> $$$ m m mE7J7Q7QRY7Z7Zdghidjdjcklllllllllms   %; 
B2A=7B=B)NNNNN)NNNNNN)__doc__
__future__r   r   r    r   r   rP   rT   r   rt   binstar_client.utilsutilsr   binstar_client.requests_extrequests_extrr   binstar_client.errorsr   r   'anaconda_project.internal.simple_statusr   r   objectr   r   r   r   r   r   r   r   <module>r      s   & % 6 6 6 6 6 6 6 6  				 				          , , , , , , : : : : : : < < < < < < < < @ @ @ @ @ @Y Y Y`) `) `) `) `)f `) `) `)FM M M M Ml M M MO O O O O O O O Z Z Z Z,m m m m m mr   