403Webshell
Server IP : 3.96.16.70  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux ip-172-31-26-103.ca-central-1.compute.internal 6.1.163-186.299.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Feb 24 16:35:42 UTC 2026 x86_64
User : ec2-user ( 1000)
PHP Version : 8.4.18
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3.9/site-packages/awscli/s3transfer/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3.9/site-packages/awscli/s3transfer/__pycache__/crt.cpython-39.pyc
a

yA�i���@sddlZddlZddlZddlmZddlZddlZddl	Zddl
mZmZm
Z
mZddlmZmZmZmZmZddlmZmZmZmZmZmZddlmZddlmZddlm Z dd	l!m"Z"dd
l#m$Z$ddl%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+dd
l,m-Z-ddl.m/Z/m0Z0ddl1m2Z2m3Z3m4Z4e�5e6�Z7da8dd�Z9dddde+dddfdd�Z:d2dd�Z;Gdd�d�Z<Gdd�de0�Z=Gdd�de/�Z>Gdd�d�Z?Gd d!�d!e?�Z@Gd"d#�d#e�ZAGd$d%�d%�ZBGd&d'�d'�ZCGd(d)�d)�ZDGd*d+�d+�ZEGd,d-�d-�ZFGd.d/�d/�ZGGd0d1�d1�ZHdS)3�N)�BytesIO)�AwsCredentials�AwsCredentialsProvider�AwsSigningAlgorithm�AwsSigningConfig)�ClientBootstrap�ClientTlsContext�DefaultHostResolver�EventLoopGroup�TlsContextOptions)�S3Client�S3FileIoOptions�S3RequestTlsMode�
S3RequestType�S3ResponseError�&get_recommended_throughput_target_gbps)�UNSIGNED)�urlsplit)�Config)�NoCredentialsError)�register_feature_id)�	ArnParser�InvalidArnException�is_s3express_bucket)�FULL_OBJECT_CHECKSUM_ARGS�MB)�TransferNotDoneError)�BaseTransferFuture�BaseTransferMeta)�CallArgs�OSUtils�
get_callbackscCs>tdur:tj�|�}z|��Wnty4YdS0|atS�N)�CRT_S3_PROCESS_LOCK�awscrt�s3ZCrossProcessLock�acquire�RuntimeError)�nameZcrt_lock�r)�9/usr/lib/python3.9/site-packages/awscli/s3transfer/crt.py�acquire_crt_s3_process_lock:sr+�TcCs�t|�}t|�}	t||	�}
d}|r(tjntj}|durdt�}
|rN|
j|d�nd|
_t	|
�}|�
�}t|d�}d}|r�tfi|��}t
|
||||||d|d�	S)a
    :type region: str
    :param region: The region used for signing

    :type crt_credentials_provider:
        Optional[awscrt.auth.AwsCredentialsProvider]
    :param crt_credentials_provider: CRT AWS credentials provider
        to use to sign requests. If not set, requests will not be signed.

    :type num_threads: Optional[int]
    :param num_threads: Number of worker threads generated. Default
        is the number of processors in the machine.

    :type target_throughput: Optional[int]
    :param target_throughput: Throughput target in bytes per second.
        By default, CRT will automatically attempt to choose a target
        throughput that matches the system's maximum network throughput.
        Currently, if CRT is unable to determine the maximum network
        throughput, a fallback target throughput of ``1_250_000_000`` bytes
        per second (which translates to 10 gigabits per second, or 1.16
        gibibytes per second) is used. To set a specific target
        throughput, set a value for this parameter.

    :type part_size: Optional[int]
    :param part_size: Size, in Bytes, of parts that files will be downloaded
        or uploaded in.

    :type use_ssl: boolean
    :param use_ssl: Whether or not to use SSL.  By default, SSL is used.
        Note that not all services support non-ssl connections.

    :type verify: Optional[boolean/string]
    :param verify: Whether or not to verify SSL certificates.
        By default SSL certificates are verified.  You can provide the
        following values:

        * False - do not validate SSL certificates.  SSL will still be
            used (unless use_ssl is False), but SSL certificates
            will not be verified.
        * path/to/cert/bundle.pem - A filename of the CA cert bundle to
            use. Specify this argument if you want to use a custom CA cert
            bundle instead of the default one on your system.

    :type fio_options: Optional[dict]
    :param fio_options: Kwargs to use to build an `awscrt.s3.S3FileIoOptions`.
    N)Zca_filepathF)� provided_throughput_target_bytesT)	�	bootstrap�regionZcredential_provider�	part_size�tls_mode�tls_connection_optionsZthroughput_target_gbpsZenable_s3express�fio_options)r
r	rrZENABLEDZDISABLEDrZ&override_default_trust_store_from_pathZverify_peerrZnew_connection_options�_get_crt_throughput_target_gbpsr
r)r/Zcrt_credentials_providerZnum_threadsZtarget_throughputr0Zuse_sslZverifyr3Zevent_loop_groupZ
host_resolverr.r2r1Ztls_ctx_optionsZclient_tls_option�target_gbpsZcrt_fio_optionsr)r)r*�create_s3_crt_clientSs@9
����r6cCsD|dur(t�}t�d|�|dur4d}n|dd}t�d|�|S)Nz-Recommended CRT throughput target in gbps: %sg$@r,iʚ;z'Using CRT throughput target in gbps: %s)r�logger�debug)r-r5r)r)r*r4�s�r4c@s�eZdZddd�Zdd�Zdd�Zd dd	�Zd!d
d�Zd"dd
�Zd#dd�Z	dd�Z
dd�Zdd�Zdd�Z
d$dd�Zdd�Zdd�ZdS)%�CRTTransferManagerNcCsH|durt�|_||_t||j�|_|j|_g|_t�	d�|_
d|_dS)aFA transfer manager interface for Amazon S3 on CRT s3 client.

        :type crt_s3_client: awscrt.s3.S3Client
        :param crt_s3_client: The CRT s3 client, handling all the
            HTTP requests and functions under then hood

        :type crt_request_serializer: s3transfer.crt.BaseCRTRequestSerializer
        :param crt_request_serializer: Serializer, generates unsigned crt HTTP
            request.

        :type osutil: s3transfer.utils.OSUtils
        :param osutil: OSUtils object to use for os-related behavior when
            using with transfer manager.
        N�r)r �_osutil�_crt_s3_client�S3ClientArgsCreator�_s3_args_creator�translate_crt_exception�_crt_exception_translator�_future_coordinators�	threadingZ	Semaphore�
_semaphore�_id_counter)�selfZ
crt_s3_client�crt_request_serializer�osutilr)r)r*�__init__�s��zCRTTransferManager.__init__cCs|Sr"r)�rEr)r)r*�	__enter__�szCRTTransferManager.__enter__cGsd}|rd}|�|�dS)NFT��	_shutdown)rE�exc_type�	exc_value�args�cancelr)r)r*�__exit__�szCRTTransferManager.__exit__cCs6|duri}|duri}t|||||d�}|�d|�S)N��bucket�key�fileobj�
extra_args�subscribersZ
get_object�r�_submit_transfer)rErSrTrUrVrW�callargsr)r)r*�download�s�zCRTTransferManager.downloadcCs@|duri}|duri}|�|�t|||||d�}|�d|�S)NrRZ
put_object)�&_validate_checksum_algorithm_supportedrrY)rErUrSrTrVrWrZr)r)r*�upload�s
�zCRTTransferManager.uploadcCs4|duri}|duri}t||||d�}|�d|�S)N)rSrTrVrWZ
delete_objectrX)rErSrTrVrWrZr)r)r*�delete	s�zCRTTransferManager.deleteFcCs|�|�dSr"rK�rErPr)r)r*�shutdownszCRTTransferManager.shutdowncCsH|�d�}|durdSttjjj�}|��|vrDtd|�d|����dS)N�ChecksumAlgorithmzChecksumAlgorithm: z* not supported. Supported algorithms are: )�get�listr$r%�S3ChecksumAlgorithm�__members__�upper�
ValueError)rErV�checksum_algorithmZsupported_algorithmsr)r)r*r\s
��z9CRTTransferManager._validate_checksum_algorithm_supportedcCs |jD]}|��s|��qdSr")rA�donerP�rE�coordinatorr)r)r*�_cancel_transfers$s
z$CRTTransferManager._cancel_transferscCs|jD]}|��qdSr")rA�resultrjr)r)r*�_finish_transfers)s
z$CRTTransferManager._finish_transferscCs|jD]}|��qdSr")rA�%wait_until_on_done_callbacks_completerjr)r)r*�_wait_transfers_done-s
z'CRTTransferManager._wait_transfers_donecCs`|r|��zDz|��Wn*ty4|��YntyDYn0W|��n
|��0dSr")rlrn�KeyboardInterrupt�	Exceptionrpr_r)r)r*rL1szCRTTransferManager._shutdowncKs|j��dSr")rC�release�rE�kwargsr)r)r*�_release_semaphore>sz%CRTTransferManager._release_semaphorec

Cstd�|jg}t|j|jd�}t|j|�|d�}tfi|��}t|�}|�|�zH|j	�
�|j�|d�}|�|j�
|||||�}	|jjfi|	��}
WnLty�}z4|�|d�|jj|d|d�}||d�WYd}~nd}~00|�|
�|j�|�|jd	7_|S)
NZS3_TRANSFER)�transfer_id�exception_translator)�metarkZqueuedTri)�after_subscribers)�error�)rrv�CRTTransferCoordinatorrDr@�CRTTransferMeta�CRTTransferFuture�AfterDoneHandler�appendrCr&r>�get_crt_callback�get_make_request_argsr<Zmake_requestrr�
set_exception�set_s3_requestrA)
rE�request_type�	call_args�on_done_after_callsrk�
components�futureZ	afterdoneZ	on_queuedZcrt_callargsZcrt_s3_request�e�on_doner)r)r*rYAsH�
�

��� 
z#CRTTransferManager._submit_transfer)N)NN)NN)NN)F)F)�__name__�
__module__�__qualname__rHrJrQr[r]r^r`r\rlrnrprLrvrYr)r)r)r*r9�s
�





r9c@s>eZdZdZddd�Zedd��Zedd��Zed	d
��ZdS)r~z*Holds metadata about the CRTTransferFutureNcCs||_||_i|_dSr")�_transfer_id�
_call_args�
_user_context)rErwr�r)r)r*rHoszCRTTransferMeta.__init__cCs|jSr")r�rIr)r)r*r�tszCRTTransferMeta.call_argscCs|jSr")r�rIr)r)r*rwxszCRTTransferMeta.transfer_idcCs|jSr")r�rIr)r)r*�user_context|szCRTTransferMeta.user_context)NN)	r�r�r��__doc__rH�propertyr�rwr�r)r)r)r*r~ls


r~c@sDeZdZddd�Zedd��Zdd�Zddd	�Zd
d�Zdd
�Z	dS)rNcCs ||_|durt�|_||_dS)aZThe future associated to a submitted transfer request via CRT S3 client

        :type meta: s3transfer.crt.CRTTransferMeta
        :param meta: The metadata associated to the transfer future.

        :type coordinator: s3transfer.crt.CRTTransferCoordinator
        :param coordinator: The coordinator associated to the transfer future.
        N)�_metar~�_coordinator)rEryrkr)r)r*rH�s	zCRTTransferFuture.__init__cCs|jSr")r�rIr)r)r*ry�szCRTTransferFuture.metacCs
|j��Sr")r�rirIr)r)r*ri�szCRTTransferFuture.donecCs|j�|�dSr")r�rm�rE�timeoutr)r)r*rm�szCRTTransferFuture.resultcCs|j��dSr")r�rPrIr)r)r*rP�szCRTTransferFuture.cancelcCs$|��std��|jj|dd�dS)z!Sets the exception on the future.z?set_exception can only be called once the transfer is complete.T)�overrideN)rirr�r��rE�	exceptionr)r)r*r��s
�zCRTTransferFuture.set_exception)NN)N)
r�r�r�rHr�ryrirmrPr�r)r)r)r*r�s


rc@seZdZdd�Zdd�ZdS)�BaseCRTRequestSerializercCstd��dS)alSerialize CRT HTTP requests.

        :type transfer_type: string
        :param transfer_type: the type of transfer made,
            e.g 'put_object', 'get_object', 'delete_object'

        :type future: s3transfer.crt.CRTTransferFuture

        :rtype: awscrt.http.HttpRequest
        :returns: An unsigned HTTP request to be used for the CRT S3 client
        zserialize_http_request()N��NotImplementedError)rE�
transfer_typer�r)r)r*�serialize_http_request�sz/BaseCRTRequestSerializer.serialize_http_requestcCstd��dS)Nztranslate_crt_exception()r�r�r)r)r*r?�sz0BaseCRTRequestSerializer.translate_crt_exceptionN)r�r�r�r�r?r)r)r)r*r��sr�c@sneZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�BotocoreCRTRequestSerializerNcCs�||_|duri}|�||�|jfi|��|_|jjj�d|j�|jjj�d|j�|jjj�d|j	�|jjj�d|j
�dS)a�Serialize CRT HTTP request using botocore logic
        It also takes into account configuration from both the session
        and any keyword arguments that could be passed to
        `Session.create_client()` when serializing the request.

        :type session: botocore.session.Session

        :type client_kwargs: Optional[Dict[str, str]])
        :param client_kwargs: The kwargs for the botocore
            s3 client initialization.
        Nzrequest-created.s3.*zafter-call.s3.*zbefore-send.s3.*zbefore-call.s3.*)Z_session�_resolve_client_configZ
create_client�_clientryZevents�register�_capture_http_request�+_change_response_to_serialized_http_request�_make_fake_http_response�_remove_checksum_context)rE�session�
client_kwargsr)r)r*rH�s"
�
�
�
�z%BotocoreCRTRequestSerializer.__init__cCsPd}|��r|��}d|vr$|d}ttd�}|r<|�|�}||d<d|d<dS)NZconfig)Zsignature_versionr%Zservice_name)Zget_default_client_configrr�merge)rEr�r�Zuser_provided_configZ
client_configr)r)r*r��s

z3BotocoreCRTRequestSerializer._resolve_client_configc	Cs�t|j�}|j}|jr&|�d|j��}g}|j��D]6\}}t|t�rV|�||f�q4|�|t|d�f�q4t	j
�|�}t	j
j|j
|||jd�}|S)N�?zutf-8)�method�path�headersZbody_stream)r�urlr��queryr��items�
isinstance�strr�r$�httpZHttpHeadersZHttpRequestr��body)	rEZaws_request�	url_partsZcrt_pathZheaders_listr(�valueZcrt_headers�crt_requestr)r)r*�_crt_request_from_aws_request�s"

�z:BotocoreCRTRequestSerializer._crt_request_from_aws_requestcCs�|�|�}|j�d�dur4t|j�}|j�d|j�|j�d�durP|j�d�|j�d�durx|jdurx|j�	dd�|j�d�dur�|j�d�|S)N�hostzContent-MD5zContent-Length�0zTransfer-Encoding)
r�r�rbrr��set�netloc�remover��add)rE�botocore_http_requestr�r�r)r)r*�_convert_to_crt_http_request�s


z9BotocoreCRTRequestSerializer._convert_to_crt_http_requestcKs||jd<dS)N�http_request)�context�rE�requestrur)r)r*r�sz2BotocoreCRTRequestSerializer._capture_http_requestcKs|d}|��|d<dS)Nr��HTTPRequest)Zprepare)rEr��parsedrur�r)r)r*r�szHBotocoreCRTRequestSerializer._change_response_to_serialized_http_requestcKstj�dditd��S)N���)�botocore�
awsrequestZAWSResponse�FakeRawResponser�r)r)r*r�#s�z5BotocoreCRTRequestSerializer._make_fake_http_responsecCs&t|j|�f|j|jd�|j��dS)N)ZBucketZKeyr�)�getattrr�rSrTrV)rEZ
client_methodr�r)r)r*�_get_botocore_http_request+s���z7BotocoreCRTRequestSerializer._get_botocore_http_requestcCs|�||jj�}|�|�}|Sr")r�ryr�r�)rEr�r�r�r�r)r)r*r�0s
�
z3BotocoreCRTRequestSerializer.serialize_http_requestcCst|t�r|�|�SdSdSr")r�r� _translate_crt_s3_response_errorr�r)r)r*r?7s

z4BotocoreCRTRequestSerializer.translate_crt_exceptioncCs�|j}|dkrdSdd�|jD�}|j}|durH|jjj}|�|�j}nd}tj	�
|�||jd�}|jjj
||d�}|�di��d�}	|jj�|	�}
|
||d�S)	Ni-cSsi|]\}}||�qSr)r))�.0�k�vr)r)r*�
<dictcomp>Dr�zQBotocoreCRTRequestSerializer._translate_crt_s3_response_error.<locals>.<dictcomp>)r��status_coder�)�shape�ErrorZCode)�operation_name)r�r�r�r�ry�
service_modelZoperation_modelZoutput_shaper�r�ZHeadersDictr�Z_response_parser�parserb�
exceptionsZ	from_code)rEZs3_response_errorr�r�r�r�r�Z
response_dictZparsed_responseZ
error_codeZerror_classr)r)r*r�=s&

��z=BotocoreCRTRequestSerializer._translate_crt_s3_response_errorcKs|�di�}d|vr|d=dS)Nr�Zchecksum)rb)rE�paramsruZrequest_contextr)r)r*r�Ysz5BotocoreCRTRequestSerializer._remove_checksum_context)N)r�r�r�rHr�r�r�r�r�r�r�r�r?r�r�r)r)r)r*r��s

r�c@seZdZddd�ZdS)r��Nccs|�|�}|sq|VqdSr")�read)rEZamtZdecode_content�chunkr)r)r*�stream`s
zFakeRawResponse.stream)r�N)r�r�r�r�r)r)r)r*r�_sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BotocoreCRTCredentialsWrappercCs
||_dSr")�_resolved_credentials)rEZresolved_botocore_credentialsr)r)r*rHisz&BotocoreCRTCredentialsWrapper.__init__cCs|����}t|j|j|j�Sr")�_get_credentialsZget_frozen_credentialsrZ
access_keyZ
secret_key�token)rEZcredentialsr)r)r*�__call__ls�z&BotocoreCRTCredentialsWrapper.__call__cCs
t�|�Sr")rZnew_delegaterIr)r)r*�to_crt_credentials_providerrsz9BotocoreCRTCredentialsWrapper.to_crt_credentials_providercCs|jdurt��|jSr")r�rrIr)r)r*r�us
z.BotocoreCRTCredentialsWrapper._get_credentialsN)r�r�r�rHr�r�r�r)r)r)r*r�hsr�c@sleZdZdZddd�Zedd��Zdd�Zdd	d
�Zddd
�Z	dd�Z
ddd�Zdd�Zdd�Z
dd�ZdS)r}z-A helper class for managing CRTTransferFutureNcCs6||_||_||_t��|_d|_d|_t��|_	dSr")
rw�_exception_translator�_s3_requestrBZLock�_lock�
_exception�_crt_futureZEvent�_done_event)rErw�
s3_requestrxr)r)r*rH~s
zCRTTransferCoordinator.__init__cCs|jSr")r�rIr)r)r*r��sz!CRTTransferCoordinator.s3_requestcCs|j��dSr")r�r�rIr)r)r*�set_done_callbacks_complete�sz2CRTTransferCoordinator.set_done_callbacks_completecCs|j�|�dSr")r��waitr�r)r)r*ro�sz<CRTTransferCoordinator.wait_until_on_done_callbacks_completeFcCs<|j�"|��r|r||_Wd�n1s.0YdSr")r�rir�)rEr�r�r)r)r*r��sz$CRTTransferCoordinator.set_exceptioncCs|jr|j��dSr")r�rPrIr)r)r*rP�szCRTTransferCoordinator.cancelc
Cs�|jr|j�zvz|j�|�WnTtyF|��|j�|��Yn.tyr}z|�|�WYd}~n
d}~00W|jr�d|_n|jr�d|_0dSr")r�r�rmrqrPrr�handle_exceptionr�)rEr�r�r)r)r*rm�s"�zCRTTransferCoordinator.resultc
Csdd}|jrLz|�|�}Wn2tyJ}ztjd|d�WYd}~n
d}~00|dur\||�n|�dS)NzUnable to translate exception.)�exc_info)r�rrr7r8)rE�excZtranslated_excr�r)r)r*r��sz'CRTTransferCoordinator.handle_exceptioncCs|jdurdS|j��S)NF)r�rirIr)r)r*ri�s
zCRTTransferCoordinator.donecCs||_|jj|_dSr")r�Zfinished_futurer�)rEr�r)r)r*r��sz%CRTTransferCoordinator.set_s3_request)NNN)N)F)N)r�r�r�r�rHr�r�r�ror�rPrmr�rir�r)r)r)r*r}{s�




r}c@s>eZdZdd�Zdd�Zddd�Zdd	�Zd
d�Zdd
�ZdS)r=cCs||_||_dSr")�_request_serializer�	_os_utils)rErFZos_utilsr)r)r*rH�szS3ClientArgsCreator.__init__cCs(t|d|��|j�}|||||g|d�S)NZ_get_make_request_args_�r�r�rkr��on_done_before_callsr�)r��_default_get_make_request_args)rEr�r�rkr�r�Zrequest_args_handlerr)r)r*r��s��z)S3ClientArgsCreator.get_make_request_argsNcs����fdd�}|S)Ncsfg}�dur|�7}|t���7}�dur2|�7}|D]*}�dkrR||dd�q6||i|��q6dS)N�progressr)Zbytes_transferred)r!)rOruZcallbacks_list�callback�rz�before_subscribers�
callback_typer�r)r*�invoke_all_callbacks�szBS3ClientArgsCreator.get_crt_callback.<locals>.invoke_all_callbacksr))rEr�r�r�rzr�r)r�r*r��sz$S3ClientArgsCreator.get_crt_callbackcs�d}t�jt�r.�j}|j�|�}|�jd<n�j�jd<d}	t�fdd�tD��s��j�dd��	�}
t
jjt
jj
|
t
jjjd�}	d�jd	<|j|�||||d
�}||d<|	|d<|S)
NZ
ContentLengthZBodyc3s|]}|�jvVqdSr")rV)r�Zchecksum_arg�r�r)r*�	<genexpr>s�zHS3ClientArgsCreator._get_make_request_args_put_object.<locals>.<genexpr>raZ	CRC64NVME)�	algorithm�locationzoverride-to-be-removedZ
ContentMD5r��
send_filepath�checksum_config)r�rUr�r�Z
get_file_sizerV�anyr�poprfr$r%�S3ChecksumConfigrdZS3ChecksumLocationZTRAILERr�)rEr�r�rkr�r�r�rZdata_lenrrh�make_request_argsr)r�r*�!_get_make_request_args_put_object�s:	��
�
�z5S3ClientArgsCreator._get_make_request_args_put_objectcCs�d}d}tjjdd�}	t|jt�rL|j}
|j�|
�}|�t	||
||j��n
t
|j�}|j||||||d�}||d<||d<|	|d<|S)NT)Zvalidate_responser��
recv_filepath�on_bodyr)r$r%rr�rUr�r�Zget_temp_filenamer��RenameTempFileHandler�OnBodyFileObjWriterr�)rEr�r�rkr�r�r�r
rrZfinal_filepathrr)r)r*�!_get_make_request_args_get_object"s0	
��
�z5S3ClientArgsCreator._get_make_request_args_get_objectc
Cs�|j�||�tt|��tj�|�|d||�|�|d�d�}|dtjkrfd�dd�|�d�D��|d	<t	�}|�
|j�}	r�|	d
dkr�tt
jdddd
�|d<|	d|_nt|j�r�tt
jddd�|d<|S)Nrir�)r��typer�Zon_progressr�css|]}|��VqdSr")�title)r��xr)r)r*r_szES3ClientArgsCreator._default_get_make_request_args.<locals>.<genexpr>�_r�r/�*F)rr/�use_double_uri_encode�should_normalize_uri_pathZsigning_config�
resource_name)rrr)r�r�r�rrfZDEFAULTr��join�split�_S3ArnParamHandler�
handle_arnrSrrZ
V4_ASYMMETRICrZV4_S3EXPRESS)
rEr�r�rkr�r�r�rZarn_handlerZaccesspoint_arn_detailsr)r)r*r�FsD
���
�
��
��

�
z2S3ClientArgsCreator._default_get_make_request_args)NN)	r�r�r�rHr�r�r	rr�r)r)r)r*r=�s�
/$r=c@seZdZdd�Zdd�ZdS)rcCs||_||_||_||_dSr")r��_final_filename�_temp_filenamer;)rErkZfinal_filenameZ
temp_filenamerGr)r)r*rH~szRenameTempFileHandler.__init__c
Ksv|d}|r|j�|j�nVz|j�|j|j�Wn>typ}z&|j�|j�|j�|�WYd}~n
d}~00dS)Nr{)r;Zremove_filerZrename_filerrrr�r�)rErur{r�r)r)r*r��s�zRenameTempFileHandler.__call__N�r�r�r�rHr�r)r)r)r*r}src@seZdZdd�Zdd�ZdS)r�cCs
||_dSr")r�rjr)r)r*rH�szAfterDoneHandler.__init__cKs|j��dSr")r�r�rtr)r)r*r��szAfterDoneHandler.__call__Nrr)r)r)r*r��sr�c@seZdZdd�Zdd�ZdS)r
cCs
||_dSr")�_fileobj)rErUr)r)r*rH�szOnBodyFileObjWriter.__init__cKs|j�|�dSr")r�write)rEr�rur)r)r*r��szOnBodyFileObjWriter.__call__Nrr)r)r)r*r
�sr
c@s:eZdZdZe�d�Zdd�Zdd�Zdd�Z	d	d
�Z
dS)raPartial port of S3ArnParamHandler from botocore.

    This is used to make a determination on MRAP accesspoints for signing
    purposes. This should be safe to remove once we properly integrate auth
    resolution from Botocore into the CRT transfer integration.
    zA^(?P<resource_type>accesspoint|outpost)[/:](?P<resource_name>.+)$cCst�|_dSr")r�_arn_parserrIr)r)r*rH�sz_S3ArnParamHandler.__init__cCs*|�|�}|durdS|ddkr&|SdS)N�
resource_typeZaccesspoint)�_get_arn_details_from_bucket�rErS�arn_detailsr)r)r*r�s

z_S3ArnParamHandler.handle_arncCs4z|j�|�}|�|�|WSty.Yn0dSr")r!Z	parse_arn�_add_resource_type_and_namerr$r)r)r*r#�s
z/_S3ArnParamHandler._get_arn_details_from_bucketcCs4|j�|d�}|r0|�d�|d<|�d�|d<dS)N�resourcer"r)�_RESOURCE_REGEX�match�group)rEr%r)r)r)r*r&�sz._S3ArnParamHandler._add_resource_type_and_nameN)r�r�r�r��re�compiler(rHrr#r&r)r)r)r*r�s�	r)N)IZloggingr+rB�iorZawscrt.httpr$Zbotocore.awsrequestr�Zbotocore.sessionZawscrt.authrrrrZ	awscrt.iorrr	r
rZ	awscrt.s3rr
rrrrrZbotocore.compatrZbotocore.configrZbotocore.exceptionsrZbotocore.useragentrZbotocore.utilsrrrZs3transfer.constantsrrZs3transfer.exceptionsrZs3transfer.futuresrrZs3transfer.utilsrr r!Z	getLoggerr�r7r#r+r6r4r9r~rr�r�r�r�r}r=rr�r
rr)r)r)r*�<module>
s^ 
�
^
*&&	I:

Youez - 2016 - github.com/yon3zu
LinuXploit