HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/awscli/customizations/__pycache__/s3uploader.cpython-310.pyc
o

.&�aj�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZe�
e�ZGdd�de�ZGdd�de�ZGd	d
�d
e
�ZdS)�N)�TransferManager)�BaseSubscriber)�collections_abcc@seZdZdd�ZdZdS)�NoSuchBucketErrorcKs(|jjdi|��}t�||�||_dS)N�)�fmt�format�	Exception�__init__�kwargs)�selfr�msgrr�B/usr/lib/python3/dist-packages/awscli/customizations/s3uploader.pyr
s
zNoSuchBucketError.__init__zaS3 Bucket does not exist. Execute the command to create a new bucket
aws s3 mb s3://{bucket_name}N)�__name__�
__module__�__qualname__r
rrrrrrsrc@speZdZdZedd��Zejdd��Z				ddd�Zd	d
�Zddd�Z	d
d�Z
dd�Zdd�Zddd�Z
dS)�
S3Uploaderz�
    Class to upload objects to S3 bucket that use versioning. If bucket
    does not already use versioning, this class will turn on versioning.
    cCs|jS)zO
        Metadata to attach to the object(s) uploaded by the uploader.
        )�_artifact_metadata)rrrr�artifact_metadata1szS3Uploader.artifact_metadatacCs&|durt|tj�std��||_dS)Nz(Artifact metadata should be in dict type)�
isinstancer�Mapping�	TypeErrorr)r�valrrrr8s
NFcCsB||_||_|p	d|_||_||_||_|st|j�|_d|_dS�N)�bucket_name�prefix�
kms_key_id�force_upload�s3�transfer_managerrr)r�	s3_clientrrrrrrrrr
>s

zS3Uploader.__init__c
Cs�|jrt|j�dkrd�|j|�}|js&|�|�r&t�d�|��|�|�Sz3ddi}|jr7d|d<|j|d<|j	r?|j	|d<t
||�}|j�||j
|||g�}|��|�|�WStjjyz}z|jd	d
}|dkrtt|j
d��|�d
}~ww)z�
        Uploads given file to S3
        :param file_name: Path to the file that will be uploaded
        :param remote_path:  be uploaded
        :return: VersionId of the latest upload
        rz{0}/{1}z:File with same data already exists at {0}. Skipping upload�ServerSideEncryption�AES256zaws:kms�SSEKMSKeyId�Metadata�Error�Code�NoSuchBucket)rN)r�lenrr�file_exists�LOG�debug�make_urlrr�ProgressPercentager�uploadr�result�botocore�
exceptions�ClientError�responser)r�	file_name�remote_path�additional_args�print_progress_callback�future�ex�
error_coderrrr.Ps@�
�

����zS3Uploader.uploadcCs*|�|�}|}|r|d|}|�||�S)z�
        Makes and returns name of the S3 object based on the file's MD5 sum

        :param file_name: file to upload
        :param extension: String of file extension to append to the object
        :return: S3 URL of the uploaded object
        �.)�
file_checksumr.)rr4�	extension�filemd5r5rrr�upload_with_dedup�s

zS3Uploader.upload_with_dedupcCs2z|jj|j|d�WdStjjyYdSw)z�
        Check if the file we are trying to upload already exists in S3

        :param remote_path:
        :return: True, if file exists. False, otherwise
        )�Bucket�KeyTF)r�head_objectrr0r1r2)rr5rrrr)�s��zS3Uploader.file_existscCsd�|j|�S)Nzs3://{0}/{1})rr)r�obj_pathrrrr,�s�zS3Uploader.make_urlcCs�t|d��;}t��}d}|��}|�d�|�|�}t|�dkr0|�|�|�|�}t|�dks |�|�|��Wd�S1sCwYdS)N�rbir)	�open�hashlib�md5�tell�seek�readr(�update�	hexdigest)rr4�file_handlerG�
block_size�curpos�bufrrrr<�s



�
$�zS3Uploader.file_checksumcCs.|jjj}d�||j|�}|rd�||�}|S)z�
            This link describes the format of Path Style URLs
            http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro
        z{0}/{1}/{2}z{0}?versionId={1})r�meta�endpoint_urlrr)r�key�version�baser/rrr�to_path_style_s3_url�s

zS3Uploader.to_path_style_s3_url)NNFNr)rrr�__doc__�propertyr�setterr
r.r?r)r,r<rVrrrrr+s"


�
1rc@seZdZdd�Zdd�ZdS)r-cCs2||_||_ttj�|��|_d|_t�	�|_
dS)Nr)�	_filename�_remote_path�float�os�path�getsize�_size�_seen_so_far�	threading�Lock�_lock)r�filenamer5rrrr
�s
zProgressPercentage.__init__cKsr|j�,|j|7_|j|jd}tj�d|j|j|j|f�tj��Wd�dS1s2wYdS)N�dz#
Uploading to %s  %s / %s  (%.2f%%))rdrar`�sys�stdout�writer[�flush)rr8�bytes_transferredr�
percentagerrr�on_progress�s���"�zProgressPercentage.on_progressN)rrrr
rmrrrrr-�sr-)rF�loggingrbr]rgr0�botocore.exceptions�s3transfer.managerr�s3transfer.subscribersr�
awscli.compatr�	getLoggerrr*r	r�objectrr-rrrr�<module>s


$