o
    .&ßaé  ã                   @   sˆ   d dl 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m	Z	 d dl
mZ G dd„ de	ƒZdd„ Zd	d
„ ZG dd„ deƒZdS )é    N)Ú
S3Transfer)ÚBasicCommand)Úhuman_readable_sizec                   @   sH   e Zd ZdZdZddddœddddœd	dd
dœddddœgZdd„ ZdS )ÚUploadBuildCommandzupload-buildz#Upload a new build to AWS GameLift.ÚnameTzThe name of the build)r   ÚrequiredÚ	help_textzbuild-versionzThe version of the buildz
build-rootz8The path to the directory containing the build to uploadzoperating-systemFz&The operating system the build runs onc              	   C   sh  | j jd|j|j|jd�}t|jƒstj 	d|j ¡ dS |j
|jdœ}|jr,|j|d< |jdi |¤Ž}|d d }|j|d	�}|d
 }|d d }|d d }	|d }
|d }|d }| j jd|
|||j|jd�}t|ƒ}z-t d| ¡\}}t||jƒ |j|||	t|d|j d d�d� W t |¡ t |¡ nt |¡ t |¡ w tj 	d|j|f ¡ dS )NÚgamelift)Úregion_nameÚendpoint_urlÚverifyzHFail to upload %s. The build root directory is empty or does not exist.
éÿ   )ÚNameÚVersionÚOperatingSystemÚBuildÚBuildId)r   ÚUploadCredentialsÚStorageLocationÚBucketÚKeyÚAccessKeyIdÚSecretAccessKeyÚSessionTokenÚs3)Úaws_access_key_idÚaws_secret_access_keyÚaws_session_tokenr
   r   z%s.zipz
Uploading ú:)Úlabel)Úcallbackz6Successfully uploaded %s to AWS GameLift
Build ID: %s
r   © )Ú_sessionÚcreate_clientÚregionr   Ú
verify_sslÚvalidate_directoryÚ
build_rootÚsysÚstderrÚwriter   Úbuild_versionÚoperating_systemÚcreate_buildÚrequest_upload_credentialsr   ÚtempfileÚmkstempÚzip_directoryÚupload_fileÚProgressPercentageÚosÚcloseÚremoveÚstdout)ÚselfÚargsÚparsed_globalsÚgamelift_clientÚcreate_build_kwargsÚresponseÚbuild_idÚupload_credentialsÚbucketÚkeyÚ
access_keyÚ
secret_keyÚsession_tokenÚ	s3_clientÚs3_transfer_mgrÚfdÚtemporary_zipfiler!   r!   úL/usr/lib/python3/dist-packages/awscli/customizations/gamelift/uploadbuild.pyÚ	_run_main)   sp   ý
þÿþ
ÿûþþ

ÿÿÿzUploadBuildCommand._run_mainN)Ú__name__Ú
__module__Ú__qualname__ÚNAMEÚDESCRIPTIONÚ	ARG_TABLErJ   r!   r!   r!   rI   r      s"    ÿÿþÿør   c              	   C   sÐ   t j |¡}t| dƒ�S}t |dtjd¡}t |¡�,}t  	|¡D ]\}}}|D ]}t j 
||¡}	t j |	|¡}
| |	|
¡ q'q W d   ƒ n1 sIw   Y  W d   ƒ d S W d   ƒ d S 1 saw   Y  d S )NÚwbÚwT)r4   ÚpathÚabspathÚopenÚzipfileÚZipFileÚZIP_DEFLATEDÚ
contextlibÚclosingÚwalkÚjoinÚrelpathr*   )Úzipfile_nameÚsource_rootÚfÚzip_fileÚzfÚrootÚdirsÚfilesÚfilenameÚ	full_pathÚrelative_pathr!   r!   rI   r1   n   s"   ÿüÿÿþ"þr1   c                 C   s,   | sdS t  | ¡D ]
\}}}|r dS q	dS )NFT)r4   r[   )r_   rS   rd   re   r!   r!   rI   r&   {   s   ÿr&   c                   @   s   e Zd Zddd„Zdd„ ZdS )r3   Nc                 C   sD   || _ || _| jd u r| j | _ttj |¡ƒ| _d| _t 	¡ | _
d S )Nr   )Ú	_filenameÚ_labelÚfloatr4   rS   ÚgetsizeÚ_sizeÚ_seen_so_farÚ	threadingÚLockÚ_lock)r8   rf   r   r!   r!   rI   Ú__init__‹   s   
zProgressPercentage.__init__c                 C   s”   | j �= |  j|7  _| jdkr8| j| j d }tj d| jt| jƒt| jƒ|f ¡ tj ¡  W d   ƒ d S W d   ƒ d S 1 sCw   Y  d S )Nr   éd   z%s  %s / %s  (%.2f%%))	rq   rn   rm   r(   r7   r*   rj   r   Úflush)r8   Úbytes_amountÚ
percentager!   r!   rI   Ú__call__”   s   

þÿö"þzProgressPercentage.__call__)N)rK   rL   rM   rr   rw   r!   r!   r!   rI   r3   Š   s    
	r3   )ro   rY   r4   r/   r(   rV   Ú
s3transferr   Úawscli.customizations.commandsr   Úawscli.customizations.s3.utilsr   r   r1   r&   Úobjectr3   r!   r!   r!   rI   Ú<module>   s   T