
    "il                        S SK r S SKrS SKrS SKJr  S SKJr  S SKrS SK	rS SK
rS SKrS SKJrJrJrJr  S SKJrJrJrJrJr  S SK	JrJrJr  S SKJr  S SKJr  S S	KJr  S S
K J!r!  S SK"J#r#J$r$  S SK%J&r&J'r'  S SK(J)r)  S SK*J+r+J,r,  S SK-J.r.  S SK/J0r0J1r1J2r2J3r3J4r4  \ Rj                  " \65      r7Sq8S r9SSSS\'-  SS4S jr:S4S jr;S r< " S S5      r= " S S\,5      r> " S S\+5      r? " S S5      r@ " S S \@5      rA " S! S"\5      rB " S# S$5      rC " S% S&5      rD\" S'S(S)/5      rE " S* S+5      rF " S, S-5      rG " S. S/5      rH " S0 S15      rI " S2 S35      rJg)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                     [         c2  [        R                  R                  U 5      n UR	                  5         Uq [         $ ! [
         a     g f = fN)CRT_S3_PROCESS_LOCKawscrts3CrossProcessLockacquireRuntimeError)namecrt_locks     M/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/s3transfer/crt.pyacquire_crt_s3_process_lockr-   <   sS     "99--d3	 '  	 		s   A   
AA   Tc                 T   [        U5      n[        U5      n[        Xx5      n	Sn
U(       a  [        R                  O[        R
                  nUbC  [        5       nU(       a  UR                  US9  OSUl        [        U5      nUR                  5       n
[        US9n[        U	U UUUU
USS9$ )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'(89M 0@I! %,  1A1J1J  +-BB" C  +0O',_=!2!I!I!K1):K 45*	 	    c                     U c:  [         R                  R                  5       n[        R	                  SU5        Uc  SnOU S-  S-  n[        R	                  SU5        U$ )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?      s_    '/iiFFH;[	
 K 7:]J
LL:KHrK   c                     [         R                  n [        [        UR	                  S5      5      n[        U5      nX0:  $ ! [        [        4 a     gf = f)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]      sZ    ((OsO$9$9#$>?!"23 // z" s   *A   AAc                       \ rS rSr\R
                  r\R                  r\R                  rSr\R                  r	 SS jr
S rS r SS jrSS jrSS	 jrSS
 jrS rS rS rS rS rS rSS jrS rS rSrg)CRTTransferManager   TNc                     Uc  [        5       U l        Xl        [        UU R                  U5      U l        UR
                  U l        / U l        [        R                  " S5      U l
        SU l        g)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__CRTTransferManager.__init__   si    * >"9DL+ 3"LL!
 #:: 	& %'!#--c2rK   c                     U $ r#    rn   s    r,   	__enter__CRTTransferManager.__enter__   s    rK   c                 <    SnU(       a  SnU R                  U5        g )NFT	_shutdown)rn   exc_type	exc_valueargscancels        r,   __exit__CRTTransferManager.__exit__   s    FvrK   c                     Uc  0 nUc  0 nU R                  X@R                  5        U R                  U5        [        UUUUUS9nU R	                  SU5      $ )Nbucketkeyfileobj
extra_argssubscribers
get_object)_validate_all_known_argsALLOWED_DOWNLOAD_ARGS_validate_if_bucket_supportedr   _submit_transfer)rn   r   r   r   r   r   callargss          r,   downloadCRTTransferManager.download   sj     JK%%j2L2LM**62!#
 $$\8<<rK   c                     Uc  0 nUc  0 nU R                  X@R                  5        U R                  U5        U R                  U5        [	        UUUUUS9nU R                  SU5      $ )Nr   
put_object)r   ALLOWED_UPLOAD_ARGSr   &_validate_checksum_algorithm_supportedr   r   )rn   r   r   r   r   r   r   s          r,   uploadCRTTransferManager.upload  sv    JK%%j2J2JK**6233J?!#
 $$\8<<rK   c                     Uc  0 nUc  0 nU R                  X0R                  5        U R                  U5        [        UUUUS9nU R	                  SU5      $ )N)r   r   r   r   delete_object)r   ALLOWED_DELETE_ARGSr   r   r   )rn   r   r   r   r   r   s         r,   deleteCRTTransferManager.delete   se    JK%%j2J2JK**62!#	
 $$_h??rK   c                 &    U R                  U5        g r#   r{   rn   r   s     r,   shutdownCRTTransferManager.shutdown/  s    vrK   c                     U R                   (       aK  U R                  R                  5        H,  u  p#UR                  U5      nU(       d  M  [	        SU S35      e   g g )Nz'TransferManager methods do not support z+ resource. Use direct client calls instead.) VALIDATE_SUPPORTED_BUCKET_VALUES_UNSUPPORTED_BUCKET_PATTERNSitemsmatchrX   )rn   r   resourcepatternr   s        r,   r   0CRTTransferManager._validate_if_bucket_supported2  sc     00%)%F%F%L%L%N!f-5$A( LE E  &O 1rK   c           	      `    U H(  nX2;  d  M
  [        SU SSR                  U5       35      e   g )NzInvalid extra_args key 'z', must be one of: z, )rX   join)rn   actualallowedkwargs       r,   r   +CRTTransferManager._validate_all_known_args?  s?    E# .ug 6''+yy'9&:<  rK   c                     UR                  S5      nUc  g [        [        R                  R                  R
                  5      nUR                  5       U;  a  [        SU SU 35      eg )NChecksumAlgorithmzChecksumAlgorithm: z* not supported. Supported algorithms are: )getlistr%   r&   S3ChecksumAlgorithm__members__upperrX   )rn   r   checksum_algorithmsupported_algorithmss       r,   r   9CRTTransferManager._validate_checksum_algorithm_supportedG  su    '^^,?@%#FII$A$A$M$MN##%-AA%&8%9 :--A,BD  BrK   c                 x    U R                    H*  nUR                  5       (       a  M  UR                  5         M,     g r#   )ri   doner   rn   coordinators     r,   _cancel_transfers$CRTTransferManager._cancel_transfersR  s-    44K##%%""$ 5rK   c                 J    U R                    H  nUR                  5         M     g r#   )ri   resultr   s     r,   _finish_transfers$CRTTransferManager._finish_transfersW  s    44K  5rK   c                 J    U R                    H  nUR                  5         M     g r#   )ri   %wait_until_on_done_callbacks_completer   s     r,   _wait_transfers_done'CRTTransferManager._wait_transfers_done[  s    44K==? 5rK   c                     U(       a  U R                  5          U R                  5         U R	                  5         g ! [         a    U R                  5          N-[         a     N8f = f! U R	                  5         f = fr#   )r   r   KeyboardInterrupt	Exceptionr   r   s     r,   r|   CRTTransferManager._shutdown_  sg    ""$	(""$ %%' ! 	%""$ 		 %%'s-   : A"A% 	A"A% !A""A% %A7c                 8    U R                   R                  5         g r#   )rl   releasern   kwargss     r,   _release_semaphore%CRTTransferManager._release_semaphorel  s    !rK   c                    U R                   /n[        U R                  U R                  S9n[	        U R                  U5      US.n[        S	0 UD6n[        U5      nUR                  U5         U R                  R                  5         U R                  R                  US5      nU" 5         U R                  R                  UUUUU5      n	U R                  R                  " S	0 U	D6n
UR                  U
5        U R$                  R                  U5        U =R                  S-  sl        U$ ! [          a=  nUR#                  US5        U R                  R                  USUS9nU" US9   S nANtS nAff = f)
N)transfer_idexception_translator)metar   queuedTr   )after_subscribers)error   rv   )r   CRTTransferCoordinatorrm   rh   CRTTransferMetaCRTTransferFutureAfterDoneHandlerappendrl   r(   rf   get_crt_callbackget_make_request_argsrd   make_requestset_s3_requestr   set_exceptionri   )rn   request_type	call_argson_done_after_callsr   
componentsfuture	afterdone	on_queuedcrt_callargscrt_s3_requesteon_dones                r,   r   #CRTTransferManager._submit_transfero  sp   #667,((!%!?!?

 $D$4$4i@&

 #0Z0$[1	""9-	7OO##%-->>I K00FF#L "00==MMN &&~6!!((5A  	%%a.++<<2E = G !	s   -A8D( (
E/23E**E/)rh   rd   ri   rm   rc   rf   rl   NNF)__name__
__module____qualname____firstlineno__r   r   r   r   r   r   rs   rx   r   r   r   r   r   r   r   r   r   r   r   r|   r   r   __static_attributes__rv   rK   r,   r_   r_      s    +AA)==)=='+$#2#O#O  JN#J BF=$="@	%
!@("'rK   r_   c                   R    \ rS rSrSrS	S jr\S 5       r\S 5       r\S 5       r	Sr
g)
r   i  z*Holds metadata about the CRTTransferFutureNc                 *    Xl         X l        0 U l        g r#   )_transfer_id
_call_args_user_context)rn   r   r   s      r,   rs   CRTTransferMeta.__init__  s    '#rK   c                     U R                   $ r#   )r   rw   s    r,   r   CRTTransferMeta.call_args  s    rK   c                     U R                   $ r#   )r   rw   s    r,   r   CRTTransferMeta.transfer_id  s       rK   c                     U R                   $ r#   )r   rw   s    r,   user_contextCRTTransferMeta.user_context  s    !!!rK   )r   r   r   r   )r   r   r   r   __doc__rs   propertyr   r   r  r   rv   rK   r,   r   r     sF    4 
   ! ! " "rK   r   c                   J    \ rS rSrS
S jr\S 5       rS rSS jrS r	S r
S	rg)r   i  Nc                 @    Xl         Uc  [        5       U l         X l        g)a2  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)rn   r   r   s      r,   rs   CRTTransferFuture.__init__  s     
<(*DJ'rK   c                     U R                   $ r#   )r  rw   s    r,   r   CRTTransferFuture.meta  s    zzrK   c                 6    U R                   R                  5       $ r#   )r  r   rw   s    r,   r   CRTTransferFuture.done  s      %%''rK   c                 :    U R                   R                  U5        g r#   )r  r   rn   timeouts     r,   r   CRTTransferFuture.result  s      )rK   c                 8    U R                   R                  5         g r#   )r  r   rw   s    r,   r   CRTTransferFuture.cancel  s      "rK   c                 x    U R                  5       (       d  [        S5      eU R                  R                  USS9  g)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   rn   	exceptions     r,   r   CRTTransferFuture.set_exception  s:    yy{{&  	''	D'ArK   )r  r  r   r#   )r   r   r   r   rs   r  r   r   r   r   r   r   rv   rK   r,   r   r     s0    (  (*#BrK   r   c                        \ rS rSrS rS rSrg)BaseCRTRequestSerializeri  c                     [        S5      e)a4  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)rn   transfer_typer   s      r,   serialize_http_request/BaseCRTRequestSerializer.serialize_http_request  s     ""<==rK   c                     [        S5      e)Nztranslate_crt_exception()r  r  s     r,   rg   0BaseCRTRequestSerializer.translate_crt_exception  s    !"=>>rK   rv   N)r   r   r   r   r  rg   r   rv   rK   r,   r  r    s    >?rK   r  c                   `    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS rS rS rSrg)BotocoreCRTRequestSerializeri  Nc                 .   Xl         Uc  0 nU R                  X5        [        U40 UD6U l        U R                  R                  R
                  R                  SU R                  5        U R                  R                  R
                  R                  SU R                  5        U R                  R                  R
                  R                  SU R                  5        U R                  R                  R
                  R                  SU R                  5        g)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)rn   sessionclient_kwargss      r,   rs   %BotocoreCRTRequestSerializer.__init__  s       M##G;+GE}E  ))"D$>$>	
 	  ))tOO	
 	  )) = =	
 	  )) = =	
rK   c                     S nUR                  5       (       a  UR                  5       nSU;   a  US   n[        [        S9nU(       a  UR                  U5      nXBS'   SUS'   g )Nrr   )signature_versionr&   service_name)get_default_client_configr   r   merge)rn   r/  r0  user_provided_configclient_configs        r,   r'  3BotocoreCRTRequestSerializer._resolve_client_config  sh    #,,..#*#D#D#F }$#0#: :066}EM"/h(,n%rK   c                    [        UR                  5      nUR                  nUR                  (       a  U SUR                   3n/ nUR                  R                  5        HK  u  pV[        U[        5      (       a  UR                  XV45        M.  UR                  U[        US5      45        MM     [        R                  R                  U5      n[        R                  R                  UR                  UUUR                  S9nU$ )N?zutf-8)methodpathheadersbody_stream)r   urlr=  queryr>  r   
isinstancestrr   r%   httpHttpHeadersHttpRequestr<  body)	rn   aws_request	url_partscrt_pathheaders_listr*   valuecrt_headerscrt_requests	            r,   _crt_request_from_aws_request:BotocoreCRTRequestSerializer._crt_request_from_aws_request  s    [__-	>>??"1Y__$56H&..446KD%%%##TM2##T3ug+>$?@	 7 kk--l;kk--%%#((	 . 
 rK   c                 <   U R                  U5      nUR                  R                  S5      c;  [        UR                  5      nUR                  R                  SUR                  5        UR                  R                  S5      b  UR                  R                  S5        UR                  R                  S5      c)  UR                  c  UR                  R                  SS5        UR                  R                  S5      b  UR                  R                  S5        U$ )NhostzContent-MD5zContent-Length0zTransfer-Encoding)
rO  r>  r   r   r@  setnetlocremoverG  add)rn   botocore_http_requestrN  rI  s       r,   _convert_to_crt_http_request9BotocoreCRTRequestSerializer._convert_to_crt_http_request)  s    889NO""6*2 !6!:!:;I##FI,<,<=""=1=&&}5 ""#34<$))1##''(8#> ""#67C&&':;rK   c                      XR                   S'   g )Nhttp_request)contextrn   requestr   s      r,   r+  2BotocoreCRTRequestSerializer._capture_http_requestG  s    *1'rK   c                 4    US   nUR                  5       US'   g )Nr\  HTTPRequest)prepare)rn   r]  parsedr   r_  s        r,   r,  HBotocoreCRTRequestSerializer._change_response_to_serialized_http_requestJ  s     .) ' 1}rK   c                 X    [         R                  R                  S S0 [        S5      5      $ )N   rK   )botocore
awsrequestAWSResponseFakeRawResponser^  s      r,   r-  5BotocoreCRTRequestSerializer._make_fake_http_responseP  s,    ""..C 	
 	
rK   c                     [        U R                  U5      " SUR                  UR                  S.UR                  D6S   $ )N)BucketKeyrb  rv   )getattrr(  r   r   r   )rn   client_methodr   s      r,   _get_botocore_http_request7BotocoreCRTRequestSerializer._get_botocore_http_requestX  sD    t||]3 
##
:C:N:N

 	rK   c                 r    U R                  XR                  R                  5      nU R                  U5      nU$ r#   )rr  r   r   rY  )rn   r  r   rX  rN  s        r,   r  3BotocoreCRTRequestSerializer.serialize_http_request]  s9     $ ? ?;;00!
 778MNrK   c                 x    [        U[        R                  R                  5      (       a  U R	                  U5      $ g r#   )rB  r%   r&   S3ResponseError _translate_crt_s3_response_errorr  s     r,   rg   4BotocoreCRTRequestSerializer.translate_crt_exceptiond  s-    i!:!:;;88CCrK   c                 F   UR                   nUS:  a  g UR                   VVs0 s H  u  p4X4_M	     nnnUR                  nUb<  U R                  R                  R
                  nUR                  U5      R                  nOS n[        R                  R                  U5      UUR                  S.n	U R                  R                  R                  XS9n
U
R                  S0 5      R                  S5      nU R                  R                  R!                  U5      nU" XS9$ s  snnf )Ni-  )r>  status_coderG  )shapeErrorCode)operation_name)r{  r>  r  r(  r   service_modeloperation_modeloutput_shaperh  ri  HeadersDictrG  _response_parserparser   
exceptions	from_code)rn   s3_response_errorr{  kvr>  r  r  r|  response_dictparsed_response
error_codeerror_classs                r,   rx  =BotocoreCRTRequestSerializer._translate_crt_s3_response_errorj  s   '33 $5$=$=>$=DA14$=>*99% LL--;;M!11.ANNEE  **66w?&%**

 ,,77== > 
 %(("599&A
ll--77
C?JJ' ?s   Dc                 <    UR                  S0 5      nSU;   a  US	 g g )Nr]  checksum)r   )rn   paramsr   request_contexts       r,   r.  5BotocoreCRTRequestSerializer._remove_checksum_context  s'     **Y3(
+ )rK   )r(  r&  r#   )r   r   r   r   rs   r'  rO  rY  r+  r,  r-  rr  r  rg   rx  r.  r   rv   rK   r,   r$  r$    s?    
<-,<22

K8,rK   r$  c                       \ rS rSrSS jrSrg)rk  i  Nc              #   J   #     U R                  U5      nU(       d  g Uv   M  7fr#   )read)rn   amtdecode_contentchunks       r,   streamFakeRawResponse.stream  s%     IIcNEK	 s   !#rv   )i   N)r   r   r   r   r  r   rv   rK   r,   rk  rk    s    rK   rk  c                   ,    \ rS rSrS rS rS rS rSrg)BotocoreCRTCredentialsWrapperi  c                     Xl         g r#   _resolved_credentials)rn   resolved_botocore_credentialss     r,   rs   &BotocoreCRTCredentialsWrapper.__init__  s    %B"rK   c                     U R                  5       R                  5       n[        UR                  UR                  UR
                  5      $ r#   )_get_credentialsget_frozen_credentialsr   
access_key
secret_keytoken)rn   credentialss     r,   __call__&BotocoreCRTCredentialsWrapper.__call__  s?    ++-DDF""K$:$:K<M<M
 	
rK   c                 .    [         R                  " U 5      $ r#   )r   new_delegaterw   s    r,   to_crt_credentials_provider9BotocoreCRTCredentialsWrapper.to_crt_credentials_provider  s    %22488rK   c                 H    U R                   c
  [        5       eU R                   $ r#   )r  r   rw   s    r,   r  .BotocoreCRTCredentialsWrapper._get_credentials  s#    %%-$&&)))rK   r  N)	r   r   r   r   rs   r  r  r  r   rv   rK   r,   r  r    s    C
9*rK   r  c                   p    \ rS rSrSr SS jr\S 5       rS rSS jr	SS jr
S	 rSS
 jrS rS rS rSrg)r   i  z-A helper class for managing CRTTransferFutureNc                     Xl         X0l        X l        [        R                  " 5       U l        S U l        S U l        [        R                  " 5       U l	        g r#   )
r   _exception_translator_s3_requestrj   Lock_lock
_exception_crt_futureEvent_done_event)rn   r   
s3_requestr   s       r,   rs   CRTTransferCoordinator.__init__  sB     '%9"%^^%
$??,rK   c                     U R                   $ r#   )r  rw   s    r,   r  !CRTTransferCoordinator.s3_request  s    rK   c                 8    U R                   R                  5         g r#   )r  rT  rw   s    r,   set_done_callbacks_complete2CRTTransferCoordinator.set_done_callbacks_complete  s    rK   c                 :    U R                   R                  U5        g r#   )r  waitr  s     r,   r   <CRTTransferCoordinator.wait_until_on_done_callbacks_complete  s    g&rK   c                     U R                      U R                  5       (       a  U(       a  Xl        S S S 5        g ! , (       d  f       g = fr#   )r  r   r  )rn   r  r  s      r,   r   $CRTTransferCoordinator.set_exception  s%    ZZ99;;("+ ZZs	   #9
Ac                 \    U R                   (       a  U R                   R                  5         g g r#   )r  r   rw   s    r,   r   CRTTransferCoordinator.cancel  s"    ##% rK   c                    U R                   (       a  U R                   e U R                  R                  U5        U R                  (       a  S U l        g g ! [         a-    U R	                  5         U R                  R                  U5        e [
         a  nU R                  U5         S nANoS nAff = f! U R                  (       a  S U l        f f = fr#   )r  r  r   r   r   r   handle_exceptionr  )rn   r  r   s      r,   r   CRTTransferCoordinator.result  s    ??//!
	(##G, #'    ! 	KKM##G, 	%!!!$$	% #'   s)   A ?B.B)$B1 )B..B1 1Cc                     S nU R                   (       a   U R                  U5      nUb  X!eUe! [         a  n[        R                  SUS9   S nAN*S nAff = f)NzUnable to translate exception.)exc_info)r  r   rN   rO   )rn   exctranslated_excr   s       r,   r  'CRTTransferCoordinator.handle_exception  s`    %%!%!;!;C!@ % )I   =J	s   - 
AAAc                 R    U R                   c  gU R                   R                  5       $ )NF)r  r   rw   s    r,   r   CRTTransferCoordinator.done  s&    #$$&&rK   c                 F    Xl         U R                   R                  U l        g r#   )r  finished_futurer  )rn   r  s     r,   r   %CRTTransferCoordinator.set_s3_request  s    %++;;rK   )r  r  r  r  r  r  r   )NNNr#   r   )r   r   r   r   r  rs   r  r  r  r   r   r   r   r  r   r   r   rv   rK   r,   r   r     sM    7 GK	-    ',
&('
<rK   r   CRTConfigParameterr*   min_versionc                   l    \ rS rSrS\" SS5      0rSS jrS rS rS	 r	S
 r
  SS jrS rS rS rSrg)re   i  max_active_connections_overridemax_request_concurrency)r      r   Nc                 (    Xl         X l        X0l        g r#   )_request_serializer	_os_utils_config)rn   rp   os_utilsrr   s       r,   rs   S3ClientArgsCreator.__init__  s    #9 !rK   c                    U R                   R                  U R                   R                  S.nU R                   R                  S5      U R                   R                  L a  S US'   U R                   R                  S5      U R                   R                  L a  S US'   [        U SU 35      (       a#  UR                  [        U SU 35      " 5       5        U R                  U5        U$ )N)r5   r  multipart_chunksizer5   r  r  _get_crt_options_)	r  r  r  get_deep_attrUNSET_DEFAULThasattrupdaterp  $_remove_param_if_not_min_crt_version)rn   r   
crt_configs      r,    _get_crt_transfer_config_options4S3ClientArgsCreator._get_crt_transfer_config_options   s    99/3||/S/S

 LL&&'<=||))* '+J{#LL&&'@A||))* =AJ894,\N;<< 1,@AC 	11*=rK   c                 2    SU R                   R                  0$ )Nmultipart_upload_threshold)r  multipart_thresholdrw   s    r,   _get_crt_options_put_object/S3ClientArgsCreator._get_crt_options_put_object  s    ,dll.N.NOOrK   c           
         / nU H  nX0R                   ;  a  M  U R                   U   n[        UR                  5      (       a  M?  U R                  R	                  UR
                  5      U R                  R                  LaU  SR                  S UR                   5       5      n[        R                  SUR
                   SU SUR
                   S35        UR                  U5        M     U H  nX	 M     g )NrQ   c              3   8   #    U  H  n[        U5      v   M     g 7fr#   )rC  ).0is     r,   	<genexpr>KS3ClientArgsCreator._remove_param_if_not_min_crt_version.<locals>.<genexpr>*  s     &I7H!s1vv7Hs   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   )rn   r  	to_removerequest_argparammin_ver_strs         r,   r  8S3ClientArgsCreator._remove_param_if_not_min_crt_version  s    	%K"?"??11+>E'(9(9:: **5::6||112 "hh&Iu7H7H&II0 =55@Mzzl"CE
 [)% && %K' %rK   c           	      L    [        U SU 3U R                  5      nU" UUUU/ US9$ )N_get_make_request_args_r   r   r   r   on_done_before_callsr   )rp  _default_get_make_request_args)rn   r   r   r   r   r   request_args_handlers          r,   r   )S3ClientArgsCreator.get_make_request_args4  sF      '%l^4// 

 $%#!# 3
 	
rK   c                     ^^^^ UUUU4S jnU$ )Nc                     > / nTb  UT-  nU[        TT5      -  nTb  UT-  nU H  nTS:X  a  U" U S   S9  M  U" U 0 UD6  M     g )Nprogressr   )bytes_transferred)r    )r   r   callbacks_listcallbackr   before_subscriberscallback_typer   s       r,   invoke_all_callbacksBS3ClientArgsCreator.get_crt_callback.<locals>.invoke_all_callbacksL  sh    N!-"44mFMBBN ,"33* !J.tAw7d-f- +rK   rv   )rn   r   r  r  r   r  s    ```` r,   r   $S3ClientArgsCreator.get_crt_callbackE  s    	. 	.  $#rK   c           	        ^ S n[        TR                  [        5      (       a7  TR                  nU R                  R	                  U5      nUTR
                  S'   OTR                  TR
                  S'   S n	[        U4S j[         5       5      (       d  TR
                  R                  SS5      R                  5       n
[        R                  R                  [        R                  R                  U
   [        R                  R                  R                  S9n	STR
                  S'   U R!                  UTUUUUS	9nX{S
'   XS'   U R"                  b   UR%                  U R'                  U5      5        U$ )NContentLengthBodyc              3   B   >#    U  H  nUTR                   ;   v   M     g 7fr#   )r   )r  checksum_argr   s     r,   r  HS3ClientArgsCreator._get_make_request_args_put_object.<locals>.<genexpr>p  s#      
 9 I000 9s   r   CRC32)	algorithmlocationzoverride-to-be-removed
ContentMD5r  send_filepathchecksum_config)rB  r   rC  r  get_file_sizer   anyr   popr   r%   r&   S3ChecksumConfigr   S3ChecksumLocationTRAILERr  r  r  r  )rn   r   r   r   r   r  r   r  data_lenr  r   make_request_argss     `         r,   !_get_make_request_args_put_object5S3ClientArgsCreator._get_make_request_args_put_object^  sf    i''--%--M~~33MBH4<I  1+4+<+<I  ( 
 9
 
 
 "+!5!5!9!9#W"eg  %ii88 ))778JK55== 9 O .F	\* ??%#!5 3 @ 
 .;/*/>+,<<#$$55lC ! rK   c           	         S nS n[         R                  R                  SS9n	[        UR                  [
        5      (       aM  UR                  n
U R                  R                  U
5      nUR                  [        X:XpR                  5      5        O[        UR                  5      nU R                  UUUUUUS9nX{S'   XS'   XS'   U R                  b   UR                  U R                  U5      5        U$ )NT)validate_responser  recv_filepathon_bodyr  )r%   r&   r"  rB  r   rC  r  get_temp_filenamer   RenameTempFileHandlerOnBodyFileObjWriterr  r  r  r  )rn   r   r   r   r   r  r   r+  r,  r  final_filepathr&  s               r,   !_get_make_request_args_get_object5S3ClientArgsCreator._get_make_request_args_get_object  s      ))44t4Li''--&..N NN<<^LM ''% *)*;*;<G ??%#!5 3 @ 
 .;/*'.)$/>+,<<#$$55lC ! rK   c                    U R                   R                  X5      [        [        UR	                  5       [        R
                  5      U R                  USXV5      U R                  US5      S.nUS   [        R
                  :X  a*  SR                  S UR                  S5       5       5      US'   [        5       nUR                  UR                  5      =n	(       a2  U	S	   S:X  a)  [        [        R                  S
SSS9US'   U	S   Ul        U$ [        UR                  5      (       a  [        [        R                   SSS9US'   U$ )Nr   r
  )r_  typer   on_progressr4   c              3   @   #    U  H  oR                  5       v   M     g 7fr#   )title)r  xs     r,   r  ES3ClientArgsCreator._default_get_make_request_args.<locals>.<genexpr>  s      :#:a		#:s   _r  r3   *F)r  r3   use_double_uri_encodeshould_normalize_uri_pathsigning_configresource_name)r  r=  r>  )r  r  rp  r   r   DEFAULTr   r   rU   _S3ArnParamHandler
handle_arnr   r   r   V4_ASYMMETRICr!   V4_S3EXPRESS)
rn   r   r   r   r   r  r   r&  arn_handleraccesspoint_arn_detailss
             r,   r  2S3ClientArgsCreator._default_get_make_request_args  s^    //FF |113]5J5J ,, 4  00D
 V$(=(==24'' :#/#5#5c#:: 3./ )*'2'='=i>N>N'OO#O%h/25
 3C-;;&+*/	3./  7GI !  !!1!122 3C-::&+*/3./
 ! rK   )r  r  r  r#   r   )r   r   r   r   r  r  rs   r  r  r  r   r   r'  r1  r  r   rv   rK   r,   re   re     sR    )+=%z,
 
2P(0
*  $21!f&!P4!rK   re   c                        \ rS rSrS rS rSrg)r.  i  c                 4    Xl         X l        X0l        X@l        g r#   )r  _final_filename_temp_filenamerc   )rn   r   final_filenametemp_filenamerq   s        r,   rs   RenameTempFileHandler.__init__  s    '-+rK   c                 x   US   nU(       a&  U R                   R                  U R                  5        g  U R                   R                  U R                  U R                  5        g ! [
         aJ  nU R                   R                  U R                  5        U R                  R                  U5         S nAg S nAff = f)Nr   )rc   remove_filerL  rename_filerK  r   r  r   )rn   r   r   r   s       r,   r  RenameTempFileHandler.__call__  s    wLL$$T%8%893(('')=)=  3(()<)<=!!//223s   0A% %
B9/A B44B9)r  rK  rc   rL  Nr   r   r   r   rs   r  r   rv   rK   r,   r.  r.    s    3rK   r.  c                        \ rS rSrS rS rSrg)r   i  c                     Xl         g r#   r  r   s     r,   rs   AfterDoneHandler.__init__  s    'rK   c                 8    U R                   R                  5         g r#   )r  r  r   s     r,   r  AfterDoneHandler.__call__
  s    557rK   rW  NrT  rv   rK   r,   r   r     s    (8rK   r   c                        \ rS rSrS rS rSrg)r/  i  c                     Xl         g r#   _fileobj)rn   r   s     r,   rs   OnBodyFileObjWriter.__init__  s    rK   c                 :    U R                   R                  U5        g r#   )r^  write)rn   r  r   s      r,   r  OnBodyFileObjWriter.__call__  s    E"rK   r]  NrT  rv   rK   r,   r/  r/    s     #rK   r/  c                   T    \ rS rSrSr\R                  " S5      rS rS r	S r
S rSrg	)
rB  i  zPartial 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                 "    [        5       U l        g r#   )r   _arn_parserrw   s    r,   rs   _S3ArnParamHandler.__init__"  s    $;rK   c                 D    U R                  U5      nUc  g US   S:X  a  U$ g )Nresource_typeaccesspoint)_get_arn_details_from_bucketrn   r   arn_detailss      r,   rC  _S3ArnParamHandler.handle_arn%  s3    77?'=8 9rK   c                      U R                   R                  U5      nU R                  U5        U$ ! [         a     g f = fr#   )re  	parse_arn_add_resource_type_and_namer   rk  s      r,   rj  /_S3ArnParamHandler._get_arn_details_from_bucket,  sF    	**44V<K,,[9" 		s   -0 
==c                     U R                   R                  US   5      nU(       a)  UR                  S5      US'   UR                  S5      US'   g g )Nr   rh  r@  )_RESOURCE_REGEXr   group)rn   rl  r   s      r,   rp  ._S3ArnParamHandler._add_resource_type_and_name5  sK    $$**;z+BC+0;;+GK(+0;;+GK( rK   )re  N)r   r   r   r   r  recompilers  rs   rC  rj  rp  r   rv   rK   r,   rB  rB    s/     jjLO'HrK   rB  r#   )Kloggingrv  rj   collectionsr   ior   awscrt.httpr%   	awscrt.s3botocore.awsrequestrh  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$  rk  r  r   r  re   r.  r   r/  rB  rv   rK   r,   <module>r     s]    	  "        @ ?  $ " 2 9 > 6 C .  
		8	$ 6 ""fRj$0P Pf"& "*#B* #BL? ?&b,#; b,Jg * *&F< F<R   4v}6MN y! y!x3 3,8 8# ##H #HrK   