
    tnil                        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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#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4  e j5        e6          Z7da8d Z9dddde'z  ddfdZ:d4dZ;d Z< G d d          Z= G d de,          Z> G d de+          Z? G d d          Z@ G d d e@          ZA G d! d"e          ZB G d# d$          ZC G d% d&          ZD ed'd(d)g          ZE G d* d+          ZF G d, d-          ZG G d. d/          ZH G d0 d1          ZI G d2 d3          ZJdS )5    N)
namedtuple)BytesIO)AwsCredentialsAwsCredentialsProviderAwsSigningAlgorithmAwsSigningConfig)ClientBootstrapClientTlsContextDefaultHostResolverEventLoopGroupTlsContextOptions)S3ClientS3RequestTlsModeS3RequestType)UNSIGNED)urlsplit)Config)NoCredentialsError)	ArnParserInvalidArnException)FULL_OBJECT_CHECKSUM_ARGSMB)TransferNotDoneError)BaseTransferFutureBaseTransferMeta)TransferManager)CallArgsOSUtilscreate_nested_client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     K/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/s3transfer/crt.pyacquire_crt_s3_process_lockr-   <   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   )r3   crt_credentials_providernum_threadstarget_throughputr5   use_sslverifyevent_loop_grouphost_resolverr2   r7   r6   tls_ctx_optionsclient_tls_optiontarget_gbpss                  r,   create_s3_crt_clientrJ   U   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)r1   rI   s     r,   r?   r?      sp    '/iFFHH;[	
 	
 	
 K 7:]J
LL:KHHHrK   c                     t           j        }	 t          t          |                    d                    }t          |          }n# t          t          f$ r Y dS w xY w|| k    S )N.F)r%   __version__mapintsplittuple	TypeError
ValueError)minimum_versioncrt_version_strcrt_version_intscrt_version_tuples       r,   _has_minimum_crt_versionr]      sq    (OsO$9$9#$>$>??!"233z"   uu//s   7A AAc                       e Zd Zej        Zej        Zej        ZdZej        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 Zd ZddZd Zd ZdS )CRTTransferManagerTNc                     |t                      | _        || _        t          || j        |          | _        |j        | _        g | _        t          j	        d          | _
        d| _        dS )a  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.

        :type config: s3transfer.manager.TransferConfig
        :param config: The transfer configuration to be used when
            making CRT S3 client requests.
        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osutilconfigs        r,   __init__zCRTTransferManager.__init__   ss    * >"99DL+ 3"L!
 !
 #: 	& %'!#-c22rK   c                     | S r#    rm   s    r,   	__enter__zCRTTransferManager.__enter__   s    rK   c                 <    d}|rd}|                      |           d S )NFT	_shutdown)rm   exc_type	exc_valueargscancels        r,   __exit__zCRTTransferManager.__exit__   s,     	FvrK   c                     |i }|i }|                      || j                   |                     |           t          |||||          }|                     d|          S )Nbucketkeyfileobj
extra_argssubscribers
get_object)_validate_all_known_argsALLOWED_DOWNLOAD_ARGS_validate_if_bucket_supportedr   _submit_transfer)rm   r   r   r   r   r   callargss          r,   downloadzCRTTransferManager.download   s     JK%%j$2LMMM**6222!#
 
 
 $$\8<<<rK   c                     |i }|i }|                      || j                   |                     |           |                     |           t	          |||||          }|                     d|          S )Nr   
put_object)r   ALLOWED_UPLOAD_ARGSr   &_validate_checksum_algorithm_supportedr   r   )rm   r   r   r   r   r   r   s          r,   uploadzCRTTransferManager.upload  s    JK%%j$2JKKK**622233J???!#
 
 
 $$\8<<<rK   c                     |i }|i }|                      || j                   |                     |           t          ||||          }|                     d|          S )N)r   r   r   r   delete_object)r   ALLOWED_DELETE_ARGSr   r   r   )rm   r   r   r   r   r   s         r,   deletezCRTTransferManager.delete   s}    JK%%j$2JKKK**6222!#	
 
 
 $$_h???rK   Fc                 0    |                      |           d S r#   rx   rm   r}   s     r,   shutdownzCRTTransferManager.shutdown/  s    vrK   c                     | j         rI| j                                        D ]1\  }}|                    |          }|rt	          d| d          0d S d S )Nz'TransferManager methods do not support z+ resource. Use direct client calls instead.) VALIDATE_SUPPORTED_BUCKET_VALUES_UNSUPPORTED_BUCKET_PATTERNSitemsmatchrX   )rm   r   resourcepatternr   s        r,   r   z0CRTTransferManager._validate_if_bucket_supported2  s     0 	%)%F%L%L%N%N  !'f-- $E( E E E  	 	 rK   c           	      h    |D ].}||vr(t          d| dd                    |                     /d S )NzInvalid extra_args key 'z', must be one of: z, )rX   join)rm   actualallowedkwargs       r,   r   z+CRTTransferManager._validate_all_known_args?  sg     	 	EG## <u < <'+yy'9'9< <   $	 	rK   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__upperrX   )rm   r   checksum_algorithmsupported_algorithmss       r,   r   z9CRTTransferManager._validate_checksum_algorithm_supportedG  s    '^^,?@@%F#FI$A$MNN##%%-AAAD&8 D D-AD D   BArK   c                 j    | j         D ]*}|                                s|                                 +d S r#   )rh   doner}   rm   coordinators     r,   _cancel_transfersz$CRTTransferManager._cancel_transfersR  sE    4 	% 	%K##%% %""$$$	% 	%rK   c                 B    | j         D ]}|                                 d S r#   )rh   resultr   s     r,   _finish_transfersz$CRTTransferManager._finish_transfersW  s3    4 	! 	!K    	! 	!rK   c                 B    | j         D ]}|                                 d S r#   )rh   %wait_until_on_done_callbacks_completer   s     r,   _wait_transfers_donez'CRTTransferManager._wait_transfers_done[  s7    4 	@ 	@K==????	@ 	@rK   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,   ry   zCRTTransferManager._shutdown_  s     	%""$$$	(""$$$$  	% 	% 	%""$$$$$ 	 	 	D	 %%'''''D%%''''s2   - A2 AA2 	AA2 AA2 2Bc                 8    | j                                          d S r#   )rk   releaserm   kwargss     r,   _release_semaphorez%CRTTransferManager._release_semaphorel  s    !!!!!rK   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   rt   )r   CRTTransferCoordinatorrl   rg   CRTTransferMetaCRTTransferFutureAfterDoneHandlerappendrk   r(   re   get_crt_callbackget_make_request_argsrc   make_requestset_s3_requestr   set_exceptionrh   )rm   request_type	call_argson_done_after_callsr   
componentsfuture	afterdone	on_queuedcrt_callargscrt_s3_requesteon_dones                r,   r   z#CRTTransferManager._submit_transfero  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NNF)__name__
__module____qualname__r   r   r   r   r   r   rr   rv   r~   r   r   r   r   r   r   r   r   r   r   ry   r   r   rt   rK   r,   r_   r_      sb       +A)=)='+$#2#O  JN# # # #J     BF= = = =$= = = ="@ @ @ @       	 	 	% % %
! ! !@ @ @( ( ( (" " "' ' ' ' 'rK   r_   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)rm   r   r   s      r,   rr   zCRTTransferMeta.__init__  s    '#rK   c                     | j         S r#   )r   ru   s    r,   r   zCRTTransferMeta.call_args  s
    rK   c                     | j         S r#   )r   ru   s    r,   r   zCRTTransferMeta.transfer_id  s      rK   c                     | j         S r#   )r   ru   s    r,   user_contextzCRTTransferMeta.user_context  s    !!rK   r   )	r   r   r   __doc__rr   propertyr   r   r   rt   rK   r,   r   r     s        44       
   X ! ! X! " " X" " "rK   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)rm   r   r   s      r,   rr   zCRTTransferFuture.__init__  s+     
<(**DJ'rK   c                     | j         S r#   )r   ru   s    r,   r   zCRTTransferFuture.meta  s
    zrK   c                 4    | j                                         S r#   )r   r   ru   s    r,   r   zCRTTransferFuture.done  s     %%'''rK   c                 :    | j                             |           d S r#   )r   r   rm   timeouts     r,   r   zCRTTransferFuture.result  s      )))))rK   c                 8    | j                                          d S r#   )r   r}   ru   s    r,   r}   zCRTTransferFuture.cancel  s      """""rK   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   rm   	exceptions     r,   r   zCRTTransferFuture.set_exception  sM    yy{{ 	&   	''	D'AAAAArK   r   r#   )
r   r   r   rr   r   r   r   r   r}   r   rt   rK   r,   r   r     s        ( ( ( (   X( ( (* * * *# # #B B B B BrK   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)rm   transfer_typer   s      r,   serialize_http_requestz/BaseCRTRequestSerializer.serialize_http_request  s     ""<===rK   c                      t          d          )Nztranslate_crt_exception()r   r   s     r,   rf   z0BaseCRTRequestSerializer.translate_crt_exception  s    !"=>>>rK   N)r   r   r   r  rf   rt   rK   r,   r   r     s2        > > >? ? ? ? ?rK   r   c                   X    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 ZdS )BotocoreCRTRequestSerializerNc                    || _         |i }|                     ||           t          |fi || _        | j        j        j                            d| j                   | 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.*zbefore-call.s3.*)_session_resolve_client_configr   _clientr   eventsregister_capture_http_request+_change_response_to_serialized_http_request_make_fake_http_response_remove_checksum_context)rm   sessionclient_kwargss      r,   rr   z%BotocoreCRTRequestSerializer.__init__  s       M##G];;;+GEE}EE ))"D$>	
 	
 	
 	 ))tO	
 	
 	
 	 )) =	
 	
 	
 	 )) =	
 	
 	
 	
 	
rK   c                     d }|                                 r|                                 }d|v r|d         }t          t                    }|r|                    |          }||d<   d|d<   d S )Nrq   )signature_versionr&   service_name)get_default_client_configr   r   merge)rm   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%%%rK   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  r   
isinstancestrr   r%   httpHttpHeadersHttpRequestr  body)	rm   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--%#(	 . 
 
 rK   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)rm   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&&':;;;rK   c                     ||j         d<   d S )Nhttp_request)contextrm   requestr   s      r,   r  z2BotocoreCRTRequestSerializer._capture_http_requestG  s    *1'''rK   c                 D    |d         }|                                 |d<   d S )Nr9  HTTPRequest)prepare)rm   r:  parsedr   r<  s        r,   r  zHBotocoreCRTRequestSerializer._change_response_to_serialized_http_requestJ  s(     .) ' 1 1}rK   c                 `    t           j                            d di t          d                    S )N   rK   )botocore
awsrequestAWSResponseFakeRawResponser;  s      r,   r  z5BotocoreCRTRequestSerializer._make_fake_http_responseP  s1    "..C  	
 
 	
rK   c                 h     t          | j        |          d|j        |j        d|j        d         S )N)BucketKeyr>  rt   )getattrr	  r   r   r   )rm   client_methodr   s      r,   _get_botocore_http_requestz7BotocoreCRTRequestSerializer._get_botocore_http_requestX  sI    3wt|]33 
#
 
:C:N
 

 	rK   c                 p    |                      ||j        j                  }|                     |          }|S r#   )rL  r   r   r7  )rm   r  r   r6  r-  s        r,   r  z3BotocoreCRTRequestSerializer.serialize_http_request]  s>     $ ? ?6;0!
 !
 778MNNrK   c                 n    t          |t          j        j                  r|                     |          S d S r#   )r!  r%   r&   S3ResponseError _translate_crt_s3_response_errorr   s     r,   rf   z4BotocoreCRTRequestSerializer.translate_crt_exceptiond  s2    i!:;; 	88CCC4rK   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 rt   rt   ).0kvs      r,   
<dictcomp>zQBotocoreCRTRequestSerializer._translate_crt_s3_response_error.<locals>.<dictcomp>q  s    >>>DAq1a>>>rK   )r  status_coder&  )shapeErrorCode)operation_name)rW  r  r[  r	  r   service_modeloperation_modeloutput_shaperC  rD  HeadersDictr&  _response_parserparser   
exceptions	from_code)rm   s3_response_errorrW  r  r[  r\  rX  response_dictparsed_response
error_codeerror_classs              r,   rP  z=BotocoreCRTRequestSerializer._translate_crt_s3_response_errorj  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JrK   c                 D    |                     di           }d|v r|d= d S d S )Nr:  checksum)r   )rm   paramsr   request_contexts       r,   r  z5BotocoreCRTRequestSerializer._remove_checksum_context  s6     **Y33((
+++ )(rK   r#   )r   r   r   rr   r  r.  r7  r  r  r  rL  r  rf   rP  r  rt   rK   r,   r  r    s        
 
 
 
<- - -  ,  <2 2 22 2 2
 
 
  
    K K K8, , , , ,rK   r  c                       e Zd ZddZdS )rF     Nc              #   D   K   	 |                      |          }|sd S |V  r#   )read)rm   amtdecode_contentchunks       r,   streamzFakeRawResponse.stream  s5      	IIcNNE KKK		rK   )rn  N)r   r   r   rt  rt   rK   r,   rF  rF    s(             rK   rF  c                   &    e Zd Zd Zd Zd Zd ZdS )BotocoreCRTCredentialsWrapperc                     || _         d S r#   )_resolved_credentials)rm   resolved_botocore_credentialss     r,   rr   z&BotocoreCRTCredentialsWrapper.__init__  s    %B"""rK   c                     |                                                                  }t          |j        |j        |j                  S r#   )_get_credentialsget_frozen_credentialsr   
access_key
secret_keytoken)rm   credentialss     r,   __call__z&BotocoreCRTCredentialsWrapper.__call__  sA    ++--DDFF"K$:K<M
 
 	
rK   c                 *    t          j        |           S r#   )r   new_delegateru   s    r,   to_crt_credentials_providerz9BotocoreCRTCredentialsWrapper.to_crt_credentials_provider  s    %24888rK   c                 :    | j         t                      | j         S r#   )rx  r   ru   s    r,   r{  z.BotocoreCRTCredentialsWrapper._get_credentials  s     %-$&&&))rK   N)r   r   r   rr   r  r  r{  rt   rK   r,   rv  rv    sS        C C C
 
 
9 9 9* * * * *rK   rv  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_requestri   Lock_lock
_exception_crt_futureEvent_done_event)rm   r   
s3_requestr   s       r,   rr   zCRTTransferCoordinator.__init__  sP     '%9"%^%%
$?,,rK   c                     | j         S r#   )r  ru   s    r,   r  z!CRTTransferCoordinator.s3_request  s    rK   c                 8    | j                                          d S r#   )r  r2  ru   s    r,   set_done_callbacks_completez2CRTTransferCoordinator.set_done_callbacks_complete  s    rK   c                 :    | j                             |           d S r#   )r  waitr   s     r,   r   z<CRTTransferCoordinator.wait_until_on_done_callbacks_complete  s    g&&&&&rK   Fc                     | j         5  |                                 r|r|| _        d d d            d S # 1 swxY w Y   d S r#   )r  r   r  )rm   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#   )r  r}   ru   s    r,   r}   zCRTTransferCoordinator.cancel  s2     	&##%%%%%	& 	&rK   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#   )r  r  r   r   r}   r   handle_exceptionr  )rm   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)r  r   rN   rO   )rm   exctranslated_excr   s       r,   r  z'CRTTransferCoordinator.handle_exception  s    % 	!%!;!;C!@!@    =JJJ	
 % c)Is   ! 
AAAc                 F    | j         dS | j                                         S )NF)r  r   ru   s    r,   r   zCRTTransferCoordinator.done  s%    #5$$&&&rK   c                 6    || _         | j         j        | _        d S r#   )r  finished_futurer  )rm   r  s     r,   r   z%CRTTransferCoordinator.set_s3_request  s    %+;rK   )NNNr#   r   )r   r   r   r   rr   r   r  r  r   r   r}   r   r  r   r   rt   rK   r,   r   r     s        77 GK	- 	- 	- 	-     X   ' ' ' ', , , ,
& & &( ( ( (  ' ' '
< < < < <rK   r   CRTConfigParameterr*   min_versionc                   h    e Zd Zd edd          iZddZd Zd Zd Zd	 Z		 	 dd
Z
d Zd Zd ZdS )rd   max_active_connections_overridemax_request_concurrency)r      r   Nc                 0    || _         || _        || _        d S r#   )_request_serializer	_os_utils_config)rm   ro   os_utilsrq   s       r,   rr   zS3ClientArgsCreator.__init__  s    #9 !rK   c                    | j         j        | j         j        d}| j                             d          | j         j        u rd |d<   | j                             d          | j         j        u rd |d<   t          | d|           r.|                     t          | d|                                  |                     |           |S )N)r5   r  multipart_chunksizer5   r  r  _get_crt_options_)	r  r  r  get_deep_attrUNSET_DEFAULThasattrupdaterJ  $_remove_param_if_not_min_crt_version)rm   r   
crt_configs      r,    _get_crt_transfer_config_optionsz4S3ClientArgsCreator._get_crt_transfer_config_options   s    9/3|/S
 

 L&&'<==|)* * '+J{#L&&'@AA|)* * =AJ894;\;;<< 	A@,@@AACC   	11*===rK   c                     d| j         j        iS )Nmultipart_upload_threshold)r  multipart_thresholdru   s    r,   _get_crt_options_put_objectz/S3ClientArgsCreator._get_crt_options_put_object  s    ,dl.NOOrK   c           
         g }|D ]}|| j         vr| j         |         }t          |j                  r.| j                            |j                  | j        j        urRd                    d |j        D                       }t          	                    d|j         d| d|j         d           |
                    |           |D ]}||= d S )NrQ   c              3   4   K   | ]}t          |          V  d S r#   )r"  )rS  is     r,   	<genexpr>zKS3ClientArgsCreator._remove_param_if_not_min_crt_version.<locals>.<genexpr>*  s(      &I&I!s1vv&I&I&I&I&I&IrK   zTransfer config parameter z requires minimum CRT version: z. z! will not be used in the request.)_CRT_ARG_TO_CONFIG_PARAMr]   r  r  r  r*   r  r   rN   warningr   )rm   r  	to_removerequest_argparammin_ver_strs         r,   r  z8S3ClientArgsCreator._remove_param_if_not_min_crt_version  s'   	% 	* 	*K$"???1+>E'(9::  **5:66|12 2 "hh&I&Iu7H&I&I&IIIE E E5@E EzE E E  
 [))))$ 	( 	(K;''	( 	(rK   c                 V    t          | d| | j                  } |||||g |          S )N_get_make_request_args_r   r   r   r   on_done_before_callsr   )rJ  _default_get_make_request_args)rm   r   r   r   r   r   request_args_handlers          r,   r   z)S3ClientArgsCreator.get_make_request_args4  sV      '4l44/ 
  

 $#%#!# 3
 
 
 	
rK   c                     fd}|S )Nc                      g }|z  }|t                    z  }|z  }|D ]#}dk    r || d                     || i | $d S )Nprogressr   )bytes_transferred)r    )r|   r   callbacks_listcallbackr   before_subscriberscallback_typer   s       r,   invoke_all_callbackszBS3ClientArgsCreator.get_crt_callback.<locals>.invoke_all_callbacksL  s    N!-"44mFMBBBN ,"33* . . !J..HtAw77777Hd-f----. .rK   rt   )rm   r   r  r  r   r  s    ```` r,   r   z$S3ClientArgsCreator.get_crt_callbackE  s6    	. 	. 	. 	. 	. 	. 	. 	.  $#rK   c                    d }t          j        t                    r,j        }| j                            |          }|j        d<   nj        j        d<   d }	t          fdt          D                       swj                            dd          	                                }
t          j                            t          j        j        |
         t          j        j        j                  }	dj        d<   |                     |||||	          }||d
<   |	|d<   | j        (|                    |                     |                     |S )NContentLengthBodyc              3   *   K   | ]}|j         v V  d S r#   )r   )rS  checksum_argr   s     r,   r  zHS3ClientArgsCreator._get_make_request_args_put_object.<locals>.<genexpr>p  s?       
 
 I00
 
 
 
 
 
rK   r   CRC32)	algorithmlocationzoverride-to-be-removed
ContentMD5r  send_filepathchecksum_config)r!  r   r"  r  get_file_sizer   anyr   popr   r%   r&   S3ChecksumConfigr   S3ChecksumLocationTRAILERr  r  r  r  )rm   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 ( 
 
 
 
 9
 
 
 
 
 
	 "+!5!9!9#W" "egg  %i88 )78JK5= 9  O .F	\* ??%#!5 3 @ 
 
 .;/*/>+,<#$$55lCC   ! rK   c                    d }d }t           j                            d          }	t          |j        t
                    rL|j        }
| j                            |
          }|                    t          ||
|| j                             nt          |j                  }|                     ||||||          }||d<   ||d<   |	|d<   | j        (|                    |                     |                     |S )NT)validate_responser  recv_filepathon_bodyr  )r%   r&   r  r!  r   r"  r  get_temp_filenamer   RenameTempFileHandlerOnBodyFileObjWriterr  r  r  r  )rm   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 @ 
 
 .;/*'.)$/>+,<#$$55lCC   ! rK   c                    | j                             ||          t          t          |                                t          j                  |                     |d||          |                     |d          d}|d         t          j        k    r5d                    d |                    d          D                       |d<   t                      }|
                    |j                  x}	r:|	d	         dk    r.t          t          j        d
dd          |d<   |	d         |_        n3t          |j                  rt          t          j        dd          |d<   |S )Nr   r  )r<  typer   on_progressr   c              3   >   K   | ]}|                                 V  d S r#   )title)rS  xs     r,   r  zES3ClientArgsCreator._default_get_make_request_args.<locals>.<genexpr>  s;       : :		: : : : : :rK   _r[  r3   *F)r  r3   use_double_uri_encodeshould_normalize_uri_pathsigning_configresource_name)r  r  r  )r  r  rJ  r   r   DEFAULTr   r   rU   _S3ArnParamHandler
handle_arnr   r   r   V4_ASYMMETRICr!   V4_S3EXPRESS)
rm   r   r   r   r   r  r   r  arn_handleraccesspoint_arn_detailss
             r,   r  z2S3ClientArgsCreator._default_get_make_request_args  s    /FFf  |1133]5J  ,, 46I   00DD
 
 V$(===24'' : :#/#5#5c#:#:: : : 3 3./ )**'2'='=i>N'O'OO#	%h/255
 3C-;&+*/	3 3 3./  7GI !122 	 3C-:&+*/3 3 3./
 ! rK   r#   r   )r   r   r   r  r  rr   r  r  r  r   r   r  r  r  rt   rK   r,   rd   rd     s        )+=+=%z,
 ,
    
  2P P P( ( (0
 
 
*  $ $ $ $21! 1! 1!f&! &! &!P4! 4! 4! 4! 4!rK   rd   c                       e Zd Zd Zd ZdS )r  c                 >    || _         || _        || _        || _        d S r#   )r   _final_filename_temp_filenamerb   )rm   r   final_filenametemp_filenamerp   s        r,   rr   zRenameTempFileHandler.__init__  s%    '-+rK   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   )rb   remove_filer  rename_filer  r   r   r   )rm   r   r   r   s       r,   r  zRenameTempFileHandler.__call__  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   rr   r  rt   rK   r,   r  r    s2          3 3 3 3 3rK   r  c                       e Zd Zd Zd ZdS )r   c                     || _         d S r#   )r   r   s     r,   rr   zAfterDoneHandler.__init__  s    'rK   c                 8    | j                                          d S r#   )r   r  r   s     r,   r  zAfterDoneHandler.__call__
  s    5577777rK   Nr  rt   rK   r,   r   r     s2        ( ( (8 8 8 8 8rK   r   c                       e Zd Zd Zd ZdS )r  c                     || _         d S r#   )_fileobj)rm   r   s     r,   rr   zOnBodyFileObjWriter.__init__  s    rK   c                 :    | j                             |           d S r#   )r  write)rm   rs  r   s      r,   r  zOnBodyFileObjWriter.__call__  s    E"""""rK   Nr  rt   rK   r,   r  r    s2             # # # # #rK   r  c                   J    e Zd ZdZ ej        d          Zd Zd Zd Z	d Z
dS )r  a  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>.+)$c                 ,    t                      | _        d S r#   )r   _arn_parserru   s    r,   rr   z_S3ArnParamHandler.__init__"  s    $;;rK   c                 T    |                      |          }|d S |d         dk    r|S d S )Nresource_typeaccesspoint)_get_arn_details_from_bucketrm   r   arn_detailss      r,   r  z_S3ArnParamHandler.handle_arn%  s>    77??F'=88 98rK   c                     	 | j                             |          }|                     |           |S # t          $ r Y nw xY wd S r#   )r  	parse_arn_add_resource_type_and_namer   r  s      r,   r  z/_S3ArnParamHandler._get_arn_details_from_bucket,  s\    	*44V<<K,,[999" 	 	 	D	ts   03 
A A c                     | j                             |d                   }|r2|                    d          |d<   |                    d          |d<   d S d S )Nr   r  r  )_RESOURCE_REGEXr   group)rm   r  r   s      r,   r!  z._S3ArnParamHandler._add_resource_type_and_name5  sd    $**;z+BCC 	H+0;;+G+GK(+0;;+G+GK(((	H 	HrK   N)r   r   r   r   recompiler#  rr   r  r  r!  rt   rK   r,   r  r    sw          !bjL O' ' '    H H H H HrK   r  r#   )Kloggingr%  ri   collectionsr   ior   awscrt.httpr%   	awscrt.s3botocore.awsrequestrC  botocore.sessionawscrt.authr   r   r   r   	awscrt.ior	   r
   r   r   r   r   r   r   r   botocore.compatr   botocore.configr   botocore.exceptionsr   botocore.utilsr   r   s3transfer.constantsr   r   s3transfer.exceptionsr   s3transfer.futuresr   r   s3transfer.managerr   s3transfer.utilsr   r   r   r    r!   	getLoggerr   rN   r$   r-   rJ   r?   r]   r_   r   r   r   r  rF  rv  r   r  rd   r  r   r  r  rt   rK   r,   <module>r:     s    				     " " " " " "                                               @ ? ? ? ? ? ? ? ? ?       $ $ $ $ $ $ " " " " " " 2 2 2 2 2 2 9 9 9 9 9 9 9 9 > > > > > > > > 6 6 6 6 6 6 C C C C C C C C . . . . . .              
	8	$	$   6 ""fR R R Rj   $0 0 0P P P P P P P Pf" " " " "& " " "*#B #B #B #B #B* #B #B #BL? ? ? ? ? ? ? ?&b, b, b, b, b,#; b, b, b,J    g   * * * * * * * *&F< F< F< F< F< F< F< F<R  Z 4v}6MNN y! y! y! y! y! y! y! y!x3 3 3 3 3 3 3 3,8 8 8 8 8 8 8 8# # # # # # # ##H #H #H #H #H #H #H #H #H #HrK   