
    /Jfy                        d dl Z d dlZd dlmZ d dlZd dlZd dlZd dl	Zd dl
mZmZmZmZ d dlmZmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*  e j+        e,          Z-da.d Z/dddde z  ddfdZ0d+dZ1 G d d          Z2 G d de%          Z3 G d de$          Z4 G d d          Z5 G d de5          Z6 G d de          Z7 G d d           Z8 G d! d"          Z9 G d# d$          Z: G d% d&          Z; G d' d(          Z< G d) d*          Z=dS ),    N)BytesIO)AwsCredentialsAwsCredentialsProviderAwsSigningAlgorithmAwsSigningConfig)ClientBootstrapClientTlsContextDefaultHostResolverEventLoopGroupTlsContextOptions)S3ClientS3RequestTlsModeS3RequestType)UNSIGNED)urlsplit)Config)NoCredentialsError)MB)TransferNotDoneError)BaseTransferFutureBaseTransferMeta)CallArgsOSUtilsget_callbacksis_s3express_bucketc                     t           Ht          j                            |           }	 |                                 n# t
          $ r Y d S w xY w|a t           S N)CRT_S3_PROCESS_LOCKawscrts3CrossProcessLockacquireRuntimeError)namecrt_locks     Q/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/s3transfer/crt.pyacquire_crt_s3_process_lockr'   7   sk     "9--d33	 	 	 	 44		
 's   = 
A
A   Tc           
         t          |          }t          |          }t          ||          }	d}
|rt          j        nt          j        }|Qt                      }|r|                    |           nd|_        t          |          }|
                                }
t          |          }t          |	| ||||
|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.
    N)ca_filepathF) provided_throughput_target_bytesT)	bootstrapregioncredential_provider	part_sizetls_modetls_connection_optionsthroughput_target_gbpsenable_s3express)r   r
   r   r   ENABLEDDISABLEDr   &override_default_trust_store_from_pathverify_peerr	   new_connection_options_get_crt_throughput_target_gbpsr   )r-   crt_credentials_providernum_threadstarget_throughputr/   use_sslverifyevent_loop_grouphost_resolverr,   r1   r0   tls_ctx_optionsclient_tls_optiontarget_gbpss                  r&   create_s3_crt_clientrD   P   s   h &k22'(899M 0-@@I! %,J  1A1J  +-- 	0BB" C     +0O',_==!2!I!I!K!K1):  K 45*	 	 	 	    c                     | >t           j                                        }t                              d|           |d}n| dz  dz  }t                              d|           |S )Nz-Recommended CRT throughput target in gbps: %sg      $@r(   i ʚ;z'Using CRT throughput target in gbps: %s)r   r    &get_recommended_throughput_target_gbpsloggerdebug)r+   rC   s     r&   r9   r9      sp    '/iFFHH;[	
 	
 	
 K 7:]J
LL:KHHHrE   c                   p    e Zd ZddZd Zd Z	 ddZddZddZdd	Z	d
 Z
d Zd Zd ZddZd Zd ZdS )CRTTransferManagerNc                     |t                      | _        || _        t          || j                  | _        |j        | _        g | _        t          j	        d          | _
        d| _        dS )aF  A 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	threading	Semaphore
_semaphore_id_counter)selfcrt_s3_clientcrt_request_serializerosutils       r&   __init__zCRTTransferManager.__init__   so     >"99DL+ 3"DL!
 !
 #: 	& %'!#-c22rE   c                     | S r    rY   s    r&   	__enter__zCRTTransferManager.__enter__   s    rE   c                 <    d}|rd}|                      |           d S )NFT	_shutdown)rY   exc_type	exc_valueargscancels        r&   __exit__zCRTTransferManager.__exit__   s,     	FvrE   c                 f    |i }|i }t          |||||          }|                     d|          S )Nbucketkeyfileobj
extra_argssubscribers
get_objectr   _submit_transfer)rY   rl   rm   rn   ro   rp   callargss          r&   downloadzCRTTransferManager.download   sU     JK!#
 
 
 $$\8<<<rE   c                     |i }|i }|                      |           t          |||||          }|                     d|          S )Nrk   
put_object)&_validate_checksum_algorithm_supportedr   rs   )rY   rn   rl   rm   ro   rp   rt   s          r&   uploadzCRTTransferManager.upload   sg    JK33J???!#
 
 
 $$\8<<<rE   c                 d    |i }|i }t          ||||          }|                     d|          S )N)rl   rm   ro   rp   delete_objectrr   )rY   rl   rm   ro   rp   rt   s         r&   deletezCRTTransferManager.delete   sP    JK!#	
 
 
 $$_h???rE   Fc                 0    |                      |           d S r   rc   rY   rh   s     r&   shutdownzCRTTransferManager.shutdown
  s    vrE   c                     |                     d          }|d S t          t          j        j        j                  }|                                |vrt          d| d|           d S )NChecksumAlgorithmzChecksumAlgorithm: z* not supported. Supported algorithms are: )getlistr   r    S3ChecksumAlgorithm__members__upper
ValueError)rY   ro   checksum_algorithmsupported_algorithmss       r&   rx   z9CRTTransferManager._validate_checksum_algorithm_supported  s    '^^,?@@%F#FI$A$MNN##%%-AAAD&8 D D-AD D   BArE   c                 j    | j         D ]*}|                                s|                                 +d S r   )rT   donerh   rY   coordinators     r&   _cancel_transfersz$CRTTransferManager._cancel_transfers  sE    4 	% 	%K##%% %""$$$	% 	%rE   c                 B    | j         D ]}|                                 d S r   )rT   resultr   s     r&   _finish_transfersz$CRTTransferManager._finish_transfers  s3    4 	! 	!K    	! 	!rE   c                 B    | j         D ]}|                                 d S r   )rT   %wait_until_on_done_callbacks_completer   s     r&   _wait_transfers_donez'CRTTransferManager._wait_transfers_done!  s7    4 	@ 	@K==????	@ 	@rE   c                    |r|                                   	 |                                  n/# t          $ r |                                   Y nt          $ r Y nw xY w|                                  d S # |                                  w xY wr   )r   r   KeyboardInterrupt	Exceptionr   r~   s     r&   rd   zCRTTransferManager._shutdown%  s     	%""$$$	(""$$$$  	% 	% 	%""$$$$$ 	 	 	D	 %%'''''D%%''''s2   - A2 AA2 	AA2 AA2 2Bc                 8    | j                                          d S r   )rW   releaserY   kwargss     r&   _release_semaphorez%CRTTransferManager._release_semaphore2  s    !!!!!rE   c                    | j         g}t          | j        | j                  }t	          | j        |          |d}t          d	i |}t          |          }|                    |           	 | j        	                                 | j
                            |d          } |             | j
                            |||||          }	 | j        j        d	i |	}
|                    |
           nV# t           $ rI}|                    |d           | j
                            |d|          } ||           Y d }~nd }~ww xY w| j                            |           | xj        dz  c_        |S )
N)transfer_idexception_translator)metar   queuedTr   )after_subscribers)error   r_   )r   CRTTransferCoordinatorrX   rS   CRTTransferMetaCRTTransferFutureAfterDoneHandlerappendrW   r"   rQ   get_crt_callbackget_make_request_argsrO   make_requestset_s3_requestr   set_exceptionrT   )rY   request_type	call_argson_done_after_callsr   
componentsfuture	afterdone	on_queuedcrt_callargscrt_s3_requesteon_dones                r&   rs   z#CRTTransferManager._submit_transfer5  s   #67,(!%!?
 
 

 $D$4i@@&
 

 #00Z00$[11	""9---	7O##%%%->> I IKKK0FF# L >T0=MMMMN &&~6666  	 	 	%%a...+<<2E =  G G!	 	!((555As   -A.C1 1
E;?D??Er   NNF)__name__
__module____qualname__r]   ra   ri   ru   ry   r|   r   rx   r   r   r   rd   r   rs   r_   rE   r&   rK   rK      s          :     BF= = = = = = = =@ @ @ @   	 	 	% % %
! ! !@ @ @( ( ( (" " "' ' ' ' 'rE   rK   c                   \    e Zd ZdZddZed             Zed             Zed             ZdS )r   z*Holds metadata about the CRTTransferFutureNc                 0    || _         || _        i | _        d S r   )_transfer_id
_call_args_user_context)rY   r   r   s      r&   r]   zCRTTransferMeta.__init__b  s    '#rE   c                     | j         S r   )r   r`   s    r&   r   zCRTTransferMeta.call_argsg  s
    rE   c                     | j         S r   )r   r`   s    r&   r   zCRTTransferMeta.transfer_idk  s      rE   c                     | j         S r   )r   r`   s    r&   user_contextzCRTTransferMeta.user_contexto  s    !!rE   r   )	r   r   r   __doc__r]   propertyr   r   r   r_   rE   r&   r   r   _  s        44       
   X ! ! X! " " X" " "rE   r   c                   F    e Zd ZddZed             Zd Zd	dZd Zd Z	dS )
r   Nc                 L    || _         |t                      | _         || _        dS )aZ  The 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)rY   r   r   s      r&   r]   zCRTTransferFuture.__init__u  s+     
<(**DJ'rE   c                     | j         S r   )r   r`   s    r&   r   zCRTTransferFuture.meta  s
    zrE   c                 4    | j                                         S r   )r   r   r`   s    r&   r   zCRTTransferFuture.done  s     %%'''rE   c                 :    | j                             |           d S r   )r   r   rY   timeouts     r&   r   zCRTTransferFuture.result  s      )))))rE   c                 8    | j                                          d S r   )r   rh   r`   s    r&   rh   zCRTTransferFuture.cancel  s      """""rE   c                     |                                  st          d          | j                            |d           dS )z!Sets the exception on the future.z?set_exception can only be called once the transfer is complete.T)overrideN)r   r   r   r   rY   	exceptions     r&   r   zCRTTransferFuture.set_exception  sM    yy{{ 	&   	''	D'AAAAArE   r   r   )
r   r   r   r]   r   r   r   r   rh   r   r_   rE   r&   r   r   t  s        ( ( ( (   X( ( (* * * *# # #B B B B BrE   r   c                       e Zd Zd Zd ZdS )BaseCRTRequestSerializerc                      t          d          )al  Serialize 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
        zserialize_http_request()NotImplementedError)rY   transfer_typer   s      r&   serialize_http_requestz/BaseCRTRequestSerializer.serialize_http_request  s     ""<===rE   c                      t          d          )Nztranslate_crt_exception()r   r   s     r&   rR   z0BaseCRTRequestSerializer.translate_crt_exception  s    !"=>>>rE   N)r   r   r   r   rR   r_   rE   r&   r   r     s2        > > >? ? ? ? ?rE   r   c                   R    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZdS )BotocoreCRTRequestSerializerNc                 h   || _         |i }|                     ||            |j        di || _        | j        j        j                            d| j                   | j        j        j                            d| j                   | j        j        j                            d| j	                   dS )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.
        Nzrequest-created.s3.*zafter-call.s3.*zbefore-send.s3.*r_   )
_session_resolve_client_configcreate_client_clientr   eventsregister_capture_http_request+_change_response_to_serialized_http_request_make_fake_http_response)rY   sessionclient_kwargss      r&   r]   z%BotocoreCRTRequestSerializer.__init__  s       M##G];;;,w,==}== ))"D$>	
 	
 	
 	 ))tO	
 	
 	
 	 )) =	
 	
 	
 	
 	
rE   c                     d }|                                 r|                                 }d|v r|d         }t          t                    }|r|                    |          }||d<   d|d<   d S )Nconfig)signature_versionr    service_name)get_default_client_configr   r   merge)rY   r   r   user_provided_configclient_configs        r&   r   z3BotocoreCRTRequestSerializer._resolve_client_config  s    #,,.. 	G#*#D#D#F#F }$$#0#: ::: 	F066}EEM"/h(,n%%%rE   c                    t          |j                  }|j        }|j        r| d|j         }g }|j                                        D ]W\  }}t          |t                    r|                    ||f           2|                    |t          |d          f           Xt          j
                            |          }t          j
                            |j        |||j                  }|S )N?zutf-8)methodpathheadersbody_stream)r   urlr   queryr   items
isinstancestrr   r   httpHttpHeadersHttpRequestr   body)	rY   aws_request	url_partscrt_pathheaders_listr$   valuecrt_headerscrt_requests	            r&   _crt_request_from_aws_requestz:BotocoreCRTRequestSerializer._crt_request_from_aws_request  s    [_--	>? 	7"66Y_66H&.4466 	A 	AKD%%%% A##T5M2222##T3ug+>+>$?@@@@k--l;;k--%#(	 . 
 
 rE   c                    |                      |          }|j                            d          4t          |j                  }|j                            d|j                   |j                            d          |j                            d           |j                            d          "|j        |j        	                    dd           |j                            d          |j                            d           |S )NhostzContent-MD5zContent-Length0zTransfer-Encoding)
r  r   r   r   r   setnetlocremover  add)rY   botocore_http_requestr  r  s       r&   _convert_to_crt_http_requestz9BotocoreCRTRequestSerializer._convert_to_crt_http_request  s    889NOO""6**2 !6!:;;I##FI,<===""=11=&&}555 ""#344<$)1#''(8#>>> ""#677C&&':;;;rE   c                     ||j         d<   d S )Nhttp_request)contextrY   requestr   s      r&   r   z2BotocoreCRTRequestSerializer._capture_http_request
  s    *1'''rE   c                 D    |d         }|                                 |d<   d S )Nr  HTTPRequest)prepare)rY   r  parsedr   r  s        r&   r   zHBotocoreCRTRequestSerializer._change_response_to_serialized_http_request  s(     .) ' 1 1}rE   c                 `    t           j                            d di t          d                    S )N   rE   )botocore
awsrequestAWSResponseFakeRawResponser  s      r&   r   z5BotocoreCRTRequestSerializer._make_fake_http_response  s1    "..C  	
 
 	
rE   c                 h     t          | j        |          d|j        |j        d|j        d         S )N)BucketKeyr  r_   )getattrr   rl   rm   ro   )rY   client_methodr   s      r&   _get_botocore_http_requestz7BotocoreCRTRequestSerializer._get_botocore_http_request  sI    3wt|]33 
#
 
:C:N
 

 	rE   c                 p    |                      ||j        j                  }|                     |          }|S r   )r*  r   r   r  )rY   r   r   r  r  s        r&   r   z3BotocoreCRTRequestSerializer.serialize_http_request   s>     $ ? ?6;0!
 !
 778MNNrE   c                 n    t          |t          j        j                  r|                     |          S d S r   )r   r   r    S3ResponseError _translate_crt_s3_response_errorr   s     r&   rR   z4BotocoreCRTRequestSerializer.translate_crt_exception'  s2    i!:;; 	88CCC4rE   c                    |j         }|dk     rd S d |j        D             }|j        }|,| j        j        j        }|                    |          j        }nd }t          j	        
                    |          ||j        d}| j        j                            ||          }|                    di                               d          }	| j        j                            |	          }
 |
||          S )Ni-  c                     i | ]\  }}||	S r_   r_   ).0kvs      r&   
<dictcomp>zQBotocoreCRTRequestSerializer._translate_crt_s3_response_error.<locals>.<dictcomp>4  s    >>>DAq1a>>>rE   )r   status_coder  )shapeErrorCode)operation_name)r5  r   r9  r   r   service_modeloperation_modeloutput_shaper!  r"  HeadersDictr  _response_parserparser   
exceptions	from_code)rY   s3_response_errorr5  r   r9  r:  r6  response_dictparsed_response
error_codeerror_classs              r&   r.  z=BotocoreCRTRequestSerializer._translate_crt_s3_response_error-  s   '3 4>>$5$=>>>*9% L-;M!11.AANEEE  *66w??&%*
 

 ,7== > 
 
 %(("5599&AA
l-77
CC{?>JJJJrE   r   )r   r   r   r]   r   r  r  r   r   r   r*  r   rR   r.  r_   rE   r&   r   r     s        
 
 
 
6- - -  ,  <2 2 22 2 2
 
 
  
    K K K K KrE   r   c                       e Zd ZddZdS )r$     Nc              #   D   K   	 |                      |          }|sd S |V  r   )read)rY   amtdecode_contentchunks       r&   streamzFakeRawResponse.streamK  s5      	IIcNNE KKK		rE   )rH  N)r   r   r   rN  r_   rE   r&   r$  r$  J  s(             rE   r$  c                   &    e Zd Zd Zd Zd Zd ZdS )BotocoreCRTCredentialsWrapperc                     || _         d S r   )_resolved_credentials)rY   resolved_botocore_credentialss     r&   r]   z&BotocoreCRTCredentialsWrapper.__init__T  s    %B"""rE   c                     |                                                                  }t          |j        |j        |j                  S r   )_get_credentialsget_frozen_credentialsr   
access_key
secret_keytoken)rY   credentialss     r&   __call__z&BotocoreCRTCredentialsWrapper.__call__W  sA    ++--DDFF"K$:K<M
 
 	
rE   c                 *    t          j        |           S r   )r   new_delegater`   s    r&   to_crt_credentials_providerz9BotocoreCRTCredentialsWrapper.to_crt_credentials_provider]  s    %24888rE   c                 :    | j         t                      | j         S r   )rR  r   r`   s    r&   rU  z.BotocoreCRTCredentialsWrapper._get_credentials`  s     %-$&&&))rE   N)r   r   r   r]   r[  r^  rU  r_   rE   r&   rP  rP  S  sS        C C C
 
 
9 9 9* * * * *rE   rP  c                   h    e Zd ZdZ	 ddZed             Zd ZddZddZ	d	 Z
dd
Zd Zd Zd ZdS )r   z-A helper class for managing CRTTransferFutureNc                     || _         || _        || _        t          j                    | _        d | _        d | _        t          j                    | _	        d S r   )
r   _exception_translator_s3_requestrU   Lock_lock
_exception_crt_futureEvent_done_event)rY   r   
s3_requestr   s       r&   r]   zCRTTransferCoordinator.__init__i  sP     '%9"%^%%
$?,,rE   c                     | j         S r   )rc  r`   s    r&   rj  z!CRTTransferCoordinator.s3_requestt  s    rE   c                 8    | j                                          d S r   )ri  r  r`   s    r&   set_done_callbacks_completez2CRTTransferCoordinator.set_done_callbacks_completex  s    rE   c                 :    | j                             |           d S r   )ri  waitr   s     r&   r   z<CRTTransferCoordinator.wait_until_on_done_callbacks_complete{  s    g&&&&&rE   Fc                     | j         5  |                                 r|r|| _        d d d            d S # 1 swxY w Y   d S r   )re  r   rf  )rY   r   r   s      r&   r   z$CRTTransferCoordinator.set_exception~  s    Z 	, 	,99;; ,( ,"+	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   377c                 J    | j         r| j                                          d S d S r   )rc  rh   r`   s    r&   rh   zCRTTransferCoordinator.cancel  s2     	&##%%%%%	& 	&rE   c                 h   | j         r| j         	 | j                            |           nd# t          $ r0 |                                  | j                            |            t
          $ r}|                     |           Y d }~nd }~ww xY w| j        r	d | _        d S d S # | j        rd | _        w xY wr   )rf  rg  r   r   rh   r   handle_exceptionrc  )rY   r   r   s      r&   r   zCRTTransferCoordinator.result  s    ? 	"/!
	(##G,,,,  	 	 	KKMMM##G,,, 	% 	% 	%!!!$$$$$$$$	%  (#'   ( (t (#' ''''s-   + B! AB-BB! BB! !B1c                     d }| j         rJ	 |                      |          }n3# t          $ r&}t                              d|           Y d }~nd }~ww xY w||||)NzUnable to translate exception.)exc_info)rb  r   rH   rI   )rY   exctranslated_excr   s       r&   rs  z'CRTTransferCoordinator.handle_exception  s    % 	!%!;!;C!@!@    =JJJ	
 % c)Is   ! 
AAAc                 F    | j         dS | j                                         S )NF)rg  r   r`   s    r&   r   zCRTTransferCoordinator.done  s%    #5$$&&&rE   c                 6    || _         | j         j        | _        d S r   )rc  finished_futurerg  )rY   rj  s     r&   r   z%CRTTransferCoordinator.set_s3_request  s    %+;rE   )NNNr   r   )r   r   r   r   r]   r   rj  rm  r   r   rh   r   rs  r   r   r_   rE   r&   r   r   f  s        77 GK	- 	- 	- 	-     X   ' ' ' ', , , ,
& & &( ( ( (  ' ' '
< < < < <rE   r   c                   8    e Zd Zd Zd Z	 	 ddZd Zd Zd ZdS )	rP   c                 "    || _         || _        d S r   )_request_serializer	_os_utils)rY   r[   os_utilss      r&   r]   zS3ClientArgsCreator.__init__  s    #9 !rE   c                 V    t          | d| | j                  } |||||g |          S )N_get_make_request_args_r   r   r   r   on_done_before_callsr   )r(  _default_get_make_request_args)rY   r   r   r   r   r   request_args_handlers          r&   r   z)S3ClientArgsCreator.get_make_request_args  sV      '4l44/ 
  

 $#%#!# 3
 
 
 	
rE   Nc                     fd}|S )Nc                      g }|z  }|t                    z  }|z  }|D ]#}dk    r || d                     || i | $d S )Nprogressr   )bytes_transferred)r   )rg   r   callbacks_listcallbackr   before_subscriberscallback_typer   s       r&   invoke_all_callbackszBS3ClientArgsCreator.get_crt_callback.<locals>.invoke_all_callbacks  s    N!-"44mFMBBBN ,"33* . . !J..HtAw77777Hd-f----. .rE   r_   )rY   r   r  r  r   r  s    ```` r&   r   z$S3ClientArgsCreator.get_crt_callback  s6    	. 	. 	. 	. 	. 	. 	. 	.  $#rE   c                     d }t          |j        t                    r,|j        }| j                            |          }||j        d<   n|j        |j        d<   |j                            dd                                          }	t          j	        
                    t          j	        j        |	         t          j	        j        j                  }
d|j        d<   |                     ||||||          }||d	<   |
|d
<   |S )NContentLengthBodyr   CRC32)	algorithmlocationzoverride-to-be-removed
ContentMD5r  send_filepathchecksum_config)r   rn   r   r~  get_file_sizero   popr   r   r    S3ChecksumConfigr   S3ChecksumLocationTRAILERr  )rY   r   r   r   r   r  r   r  data_lenr   r  make_request_argss               r&   !_get_make_request_args_put_objectz5S3ClientArgsCreator._get_make_request_args_put_object  s    i'-- 	=%-M~33MBBH4<I 11+4+<I (&155
 

%'' 	 !)44i34FGY19 5 
 
 .F	\* ??%#!5 3 @ 
 
 .;/*/>+,  rE   c                    d }d }t           j                            d          }	t          |j        t
                    rL|j        }
| j                            |
          }|                    t          ||
|| j                             nt          |j                  }|                     ||||||          }||d<   ||d<   |	|d<   |S )NT)validate_responser  recv_filepathon_bodyr  )r   r    r  r   rn   r   r~  get_temp_filenamer   RenameTempFileHandlerOnBodyFileObjWriterr  )rY   r   r   r   r   r  r   r  r  r  final_filepathr  s               r&   !_get_make_request_args_get_objectz5S3ClientArgsCreator._get_make_request_args_get_object  s      )44t4LLi'-- 		=&.N N<<^LLM ''%     *)*;<<G ??%#!5 3 @ 
 
 .;/*'.)$/>+,  rE   c                 \   | j                             ||          t          t          |                                t          j                  |                     |d||          |                     |d          d}t          |j                  rt          t          j                  |d<   |S )Nr   r  )r  typer   on_progress)r  signing_config)r}  r   r(  r   r   DEFAULTr   r   rl   r   r   V4_S3EXPRESS)rY   r   r   r   r   r  r   r  s           r&   r  z2S3ClientArgsCreator._default_get_make_request_args,  s     /FFf  |1133]5J  ,, 46I   00DD
 
 y/00 	2B-:3 3 3./ ! rE   r   )	r   r   r   r]   r   r   r  r  r  r_   rE   r&   rP   rP     s}        " " "
 
 
*  $ $ $ $2(! (! (!T"! "! "!H! ! ! ! !rE   rP   c                       e Zd Zd Zd ZdS )r  c                 >    || _         || _        || _        || _        d S r   )r   _final_filename_temp_filenamerN   )rY   r   final_filenametemp_filenamer\   s        r&   r]   zRenameTempFileHandler.__init__I  s%    '-+rE   c                 J   |d         }|r!| j                             | j                   d S 	 | j                             | j        | j                   d S # t
          $ rD}| j                             | j                   | j                            |           Y d }~d S d }~ww xY w)Nr   )rN   remove_filer  rename_filer  r   r   r   )rY   r   r   r   s       r&   r[  zRenameTempFileHandler.__call__O  s    w 
	3L$$T%8999993((')=      3 3 3(()<===!//2222222223s   %A 
B"9BB"Nr   r   r   r]   r[  r_   rE   r&   r  r  H  s2          3 3 3 3 3rE   r  c                       e Zd Zd Zd ZdS )r   c                     || _         d S r   )r   r   s     r&   r]   zAfterDoneHandler.__init___  s    'rE   c                 8    | j                                          d S r   )r   rm  r   s     r&   r[  zAfterDoneHandler.__call__b  s    5577777rE   Nr  r_   rE   r&   r   r   ^  s2        ( ( (8 8 8 8 8rE   r   c                       e Zd Zd Zd ZdS )r  c                     || _         d S r   )_fileobj)rY   rn   s     r&   r]   zOnBodyFileObjWriter.__init__g  s    rE   c                 :    | j                             |           d S r   )r  write)rY   rM  r   s      r&   r[  zOnBodyFileObjWriter.__call__j  s    E"""""rE   Nr  r_   rE   r&   r  r  f  s2             # # # # #rE   r  r   )>loggingrU   ior   awscrt.httpr   	awscrt.s3botocore.awsrequestr!  botocore.sessionawscrt.authr   r   r   r   	awscrt.ior   r	   r
   r   r   r   r   r   r   botocore.compatr   botocore.configr   botocore.exceptionsr   s3transfer.constantsr   s3transfer.exceptionsr   s3transfer.futuresr   r   s3transfer.utilsr   r   r   r   	getLoggerr   rH   r   r'   rD   r9   rK   r   r   r   r   r$  rP  r   rP   r  r   r  r_   rE   r&   <module>r     sY                                                      @ ? ? ? ? ? ? ? ? ?       $ $ $ $ $ $ " " " " " " 2 2 2 2 2 2 # # # # # # 6 6 6 6 6 6 C C C C C C C C            
	8	$	$   6 ""fR R R Rj   $e e e e e e e eP" " " " "& " " "*#B #B #B #B #B* #B #B #BL? ? ? ? ? ? ? ?&ZK ZK ZK ZK ZK#; ZK ZK ZKz    g   * * * * * * * *&F< F< F< F< F< F< F< F<RV! V! V! V! V! V! V! V!r3 3 3 3 3 3 3 3,8 8 8 8 8 8 8 8# # # # # # # # # #rE   