+
    ,il  c                   s   ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIt^ RI	t^ RI
t^ RIt^ RIHtHtHtHt ^ RIHtHtHtHtHt ^ RI	HtHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
I H!t! ^ RI"H#t#H$t$ ^ RI%H&t&H't' ^ RI(H)t) ^ RI*H+t+H,t, ^ RI-H.t. ^ RI/H0t0H1t1H2t2H3t3H4t4 ] Pj                  ! ]64      t7Rs8R t9RRR^]',          RR3R lt:R3R lt;R t< ! R R4      t= ! R R],4      t> ! R R]+4      t? ! R R4      t@ ! R R]@4      tA ! R  R!]4      tB ! R" R#4      tC ! R$ R%4      tD]! R&R'R(.4      tE ! R) R*4      tF ! R+ R,4      tG ! R- R.4      tH ! R/ R04      tI ! R1 R24      tJR# )4    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                 s    \         f3   \        P                  P                  V 4      p VP	                  4        Ts \         #   \
         d     R # i ; iN)CRT_S3_PROCESS_LOCKawscrts3ZCrossProcessLockacquireZRuntimeError)nameZcrt_lock   & 3/usr/lib/python3.14/site-packages/s3transfer/crt.pyacquire_crt_s3_process_lockr(   <   sS     "99--d3	 '  	 		s   A AATc                sl   \        V4      p\        V4      p\        Wx4      p	Rp
V'       d   \        P                  M\        P
                  pVeH   \        4       pV'       d   VP                  VR7       MRVn        \        V4      pVP                  4       p
\        VR7      p\        V	V VVVV
VRR7      # )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)Zca_filepathF) provided_throughput_target_bytesT)	bootstrapregionZcredential_provider	part_sizetls_modetls_connection_optionsZthroughput_target_gbpsZenable_s3express)r
   r	   r   r   ZENABLEDZDISABLEDr   Z&override_default_trust_store_from_pathZverify_peerr   Znew_connection_options_get_crt_throughput_target_gbpsr   )r+   Zcrt_credentials_providerZnum_threadsZtarget_throughputr,   Zuse_sslZverifyZevent_loop_groupZhost_resolverr*   r.   r-   Ztls_ctx_optionsZclient_tls_optiontarget_gbpss   &&&&&&&        r'   create_s3_crt_clientr1   U   s    h &k2'(89M 0@I! %,  1A1J1J  +-BB" C  +0O',_=!2!I!I!K1):K 45*	 	    c                 s    V f<   \         P                  P                  4       p\        P	                  RV4       Vf   RpMV ^,          R,          p\        P	                  RV4       V# )Nz-Recommended CRT throughput target in gbps: %sg      $@i ʚ;z'Using CRT throughput target in gbps: %s)r"   r#   Z&get_recommended_throughput_target_gbpsloggerdebug)r)   r0   r&   r'   r/   r/      s_    '/iiFFH;[	
 K 7:]J
LL:KHr2   c                 s    \         P                  p \        \        VP	                  R 4      4      p\        V4      pW08  #   \        \        3 d     R# i ; i).F)r"   Z__version__ZmapZintsplitZtupleZ	TypeError
ValueError)Zminimum_versionZcrt_version_strZcrt_version_intsZcrt_version_tuples   &   r'   _has_minimum_crt_versionr8      sZ    ((OsO$9$9#$>?!"23 // z" s   *A   AAc                   s   a  ] tR t^t o ]P
                  t]P                  t]P                  tRt]P                  t	RR lt
R tR tRR ltRR ltRR ltRR	 ltR
 tR tR tR tR tR tRR ltR tR tRtV tR# )CRTTransferManagerTNc                s    Vf   \        4       V n        Wn        \        VV P                  V4      V n        VP
                  V n        . V n        \        P                  ! ^4      V n
        ^ V n        R# )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   _osutil_crt_s3_clientS3ClientArgsCreator_s3_args_creatortranslate_crt_exception_crt_exception_translator_future_coordinators	threadingZ	Semaphore
_semaphore_id_counter)selfZcrt_s3_clientcrt_request_serializerosutilconfig   &&&&&r'   __init__ZCRTTransferManager.__init__   si    * >"9DL+ 3"LL!
 #:: 	& %'!#--c2r2   c                s    V # r     rD      &r'   	__enter__ZCRTTransferManager.__enter__   s    r2   c                s@    R pV'       d   RpV P                  V4       R# )FTN	_shutdown)rD   Zexc_typeZ	exc_valueargscancels   &&&* r'   __exit__ZCRTTransferManager.__exit__   s    Fvr2   c                s    Vf   / pVf   / pV P                  W@P                  4       V P                  V4       \        VVVVVR7      pV P	                  RV4      # )Nbucketkeyfileobj
extra_argssubscribersZ
get_object)_validate_all_known_argsALLOWED_DOWNLOAD_ARGS_validate_if_bucket_supportedr   _submit_transfer)rD   rT   rU   rV   rW   rX   callargs   &&&&&& r'   downloadZCRTTransferManager.download   sj     JK%%j2L2LM**62!#
 $$\8<<r2   c                s    Vf   / pVf   / pV P                  W@P                  4       V P                  V4       V P                  V4       \	        VVVVVR7      pV P                  RV4      # )NrS   Z
put_object)rY   ALLOWED_UPLOAD_ARGSr[   &_validate_checksum_algorithm_supportedr   r\   )rD   rV   rT   rU   rW   rX   r]   r^   r'   uploadZCRTTransferManager.upload  sv    JK%%j2J2JK**6233J?!#
 $$\8<<r2   c                s    Vf   / pVf   / pV P                  W0P                  4       V P                  V4       \        VVVVR7      pV P	                  RV4      # )N)rT   rU   rW   rX   Zdelete_object)rY   ALLOWED_DELETE_ARGSr[   r   r\   )rD   rT   rU   rW   rX   r]   s   &&&&& r'   deleteZCRTTransferManager.delete   se    JK%%j2J2JK**62!#	
 $$_h??r2   c                s(    V P                  V4       R # r    rN   rD   rQ      &&r'   shutdownZCRTTransferManager.shutdown/  s    vr2   c                s    V P                   '       dN   V P                  P                  4        F-  w  r#VP                  V4      pV'       g   K   \	        R V R24      h	  R# R# )z'TransferManager methods do not support z+ resource. Use direct client calls instead.N) VALIDATE_SUPPORTED_BUCKET_VALUES_UNSUPPORTED_BUCKET_PATTERNSitemsmatchr7   )rD   rT   resourceZpatternrk   s   &&   r'   r[   Z0CRTTransferManager._validate_if_bucket_supported2  sf     000%)%F%F%L%L%N!f-5$A( LE E  &O 1r2   c           	     sd    V F)  pW29  g   K  \        R V RRP                  V4       24      h	  R# )zInvalid extra_args key 'z', must be one of: z, N)r7   join)rD   ZactualZallowedZkwarg   &&& r'   rY   Z+CRTTransferManager._validate_all_known_args?  s?    E# .ug 6''+yy'9&:<  r2   c                s    VP                  R 4      pVf   R# \        \        P                  P                  P
                  4      pVP                  4       V9  d   \        RV RV 24      hR# )ChecksumAlgorithmNzChecksumAlgorithm: z* not supported. Supported algorithms are: )getZlistr"   r#   S3ChecksumAlgorithmZ__members__upperr7   )rD   rW   checksum_algorithmZsupported_algorithms   &&  r'   ra   Z9CRTTransferManager._validate_checksum_algorithm_supportedG  su    '^^,?@%#FII$A$A$M$MN##%-AA%&8%9 :--A,BD  Br2   c                s|    V P                    F+  pVP                  4       '       d   K  VP                  4        K-  	  R # r    )r@   donerQ   rD   coordinatorr&   r'   _cancel_transfersZ$CRTTransferManager._cancel_transfersR  s-    44K##%%""$ 5r2   c                L    V P                    F  pVP                  4        K  	  R # r    )r@   resultrv   r&   r'   _finish_transfersZ$CRTTransferManager._finish_transfersW  s    44K  5r2   c                ry   r    )r@   %wait_until_on_done_callbacks_completerv   r&   r'   _wait_transfers_doneZ'CRTTransferManager._wait_transfers_done[  s    44K==? 5r2   c                s    V'       d   V P                  4         V P                  4        V P	                  4        R #   \         d    T P                  4         L/\         d     L;i ; i  T P	                  4        i ; ir    )rx   r{   KeyboardInterrupt	Exceptionr}   re   rf   r'   rO   ZCRTTransferManager._shutdown_  sg    ""$	(""$ %%' ! 	%""$ 		 %%'s3   < A&A) A&"A&#A) %A&&A) )A;c                :    V P                   P                  4        R # r    )rB   ZreleaserD   kwargs   &,r'   _release_semaphoreZ%CRTTransferManager._release_semaphorel  s    !r2   c                s   V P                   .p\        V P                  V P                  R 7      pR\	        V P                  V4      RV/p\        R	/ VB p\        V4      pVP                  V4        V P                  P                  4        V P                  P                  VR4      pV! 4        V P                  P                  VVVVV4      p	V P                  P                  ! R	/ V	B p
VP                  V
4       V P$                  P                  V4       V ;P                  ^,          un        V#   \          dD   pTP#                  TR4       T P                  P                  TRTR7      pT! TR7        Rp?LRp?ii ; i)
)transfer_idexception_translatormetarw   ZqueuedTru   )after_subscribers)errorNrJ   )r   CRTTransferCoordinatorrC   r?   CRTTransferMetaCRTTransferFutureAfterDoneHandlerappendrB   r$   r=   get_crt_callbackget_make_request_argsr;   Zmake_requestset_s3_requestr   set_exceptionr@   )rD   request_type	call_argson_done_after_callsrw   Z
componentsfutureZ	afterdoneZ	on_queuedZcrt_callargsZcrt_s3_requesteon_dones   &&&          r'   r\   Z#CRTTransferManager._submit_transfero  sw   #667,((!%!?!?

 OD$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   1A8D0 0E>;9E99E>)r?   r;   r@   rC   r:   r=   rB   NNF)__name__
__module____qualname____firstlineno__r   rZ   r`   rc   rh   ri   rI   rM   rR   r_   rb   rd   rg   r[   rY   ra   rx   r{   r}   rO   r   r\   __static_attributes____classdictcell__Z__classdict__   @r'   r9   r9      s     +AA)==)=='+$#2#O#O #J=$="@	%
!@("' 'r2   r9   c                   s^   a  ] tR tRt o RtR	R lt]R 4       t]R 4       t]R 4       t	Rt
V tR# )
r   i  z*Holds metadata about the CRTTransferFutureNc                s,    Wn         W n        / V n        R # r    )_transfer_id
_call_args_user_context)rD   r   r      &&&r'   rI   ZCRTTransferMeta.__init__  s    '#r2   c                    V P                   # r    )r   rK   rL   r'   r   ZCRTTransferMeta.call_args  s    r2   c                r   r    )r   rK   rL   r'   r   ZCRTTransferMeta.transfer_id  s       r2   c                r   r    )r   rK   rL   r'   user_contextZCRTTransferMeta.user_context  s    !!!r2   )r   r   r   r   )r   r   r   r   __doc__rI   propertyr   r   r   r   r   r   r   r'   r   r     sI     4 
   ! ! " "r2   r   c                   sV   a  ] tR tRt o R
R lt]R 4       tR tRR ltR t	R t
R	tV tR# )r   i  Nc                sD    Wn         Vf   \        4       V n         W n        R# )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)rD   r   rw   r   r'   rI   ZCRTTransferFuture.__init__  s     
<(*DJ'r2   c                r   r    )r   rK   rL   r'   r   ZCRTTransferFuture.meta  s    zzr2   c                s6    V P                   P                  4       # r    )r   ru   rK   rL   r'   ru   ZCRTTransferFuture.done  s      %%''r2   c                <    V P                   P                  V4       R # r    )r   rz   rD   timeoutrf   r'   rz   ZCRTTransferFuture.result  s      )r2   c                r   r    )r   rQ   rK   rL   r'   rQ   ZCRTTransferFuture.cancel  s      "r2   c                s    V P                  4       '       g   \        R4      hV P                  P                  VRR7       R# )z!Sets the exception on the future.z?set_exception can only be called once the transfer is complete.T)overrideN)ru   r   r   r   rD   	exceptionrf   r'   r   ZCRTTransferFuture.set_exception  s:    yy{{&  	''	D'Ar2   )r   r   r   r    )r   r   r   r   rI   r   r   ru   rz   rQ   r   r   r   r   r   r'   r   r     s9     (  (*#B Br2   r   c                   ,   a  ] tR tRt o R tR tRtV tR# )BaseCRTRequestSerializeri  c                s    \        R4      h)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()ZNotImplementedError)rD   transfer_typer   r   r'   serialize_http_requestZ/BaseCRTRequestSerializer.serialize_http_request  s     ""<==r2   c                s    \        R 4      h)ztranslate_crt_exception()r   r   rf   r'   r>   Z0BaseCRTRequestSerializer.translate_crt_exception  s    !"=>>r2   rJ   N)r   r   r   r   r   r>   r   r   r   r   r'   r   r     s     >? ?r2   r   c                   sl   a  ] tR tRt o RR ltR tR tR tR tR t	R	 t
R
 tR tR tR tR tRtV tR# )BotocoreCRTRequestSerializeri  Nc                s2   Wn         Vf   / pV P                  W4       \        V3/ VB V n        V P                  P                  P
                  P                  RV P                  4       V P                  P                  P
                  P                  RV P                  4       V P                  P                  P
                  P                  RV P                  4       V P                  P                  P
                  P                  RV P                  4       R# )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   ZeventsZregister_capture_http_request+_change_response_to_serialized_http_request_make_fake_http_response_remove_checksum_context)rD   sessionclient_kwargsr   r'   rI   Z%BotocoreCRTRequestSerializer.__init__  s       M##G;+GE}E  ))"D$>$>	
 	  ))tOO	
 	  )) = =	
 	  )) = =	
r2   c                s    R pVP                  4       '       d   VP                  4       pRV9   d
   VR,          p\        \        R7      pV'       d   VP                  V4      pWBR&   RVR&   R # )NrG   )Zsignature_versionr#   Zservice_name)Zget_default_client_configr   r   Zmerge)rD   r   r   Zuser_provided_configZclient_config   &&&  r'   r   Z3BotocoreCRTRequestSerializer._resolve_client_config  sh    #,,..#*#D#D#F }$#0#: :066}EM"/h(,n%r2   c                s   \        VP                  4      pVP                  pVP                  '       d   V R VP                   2p. pVP                  P                  4        FL  w  rV\        V\        4      '       d   VP                  WV34       K/  VP                  V\        VR4      34       KN  	  \        P                  P                  V4      p\        P                  P                  VP                  VVVP                  R7      pV# )Z?zutf-8)methodpathheadersZbody_stream)r   urlr   Zqueryr   rj   
isinstancestrr   r"   ZhttpZHttpHeadersZHttpRequestr   body)	rD   Zaws_request	url_partsZcrt_pathZheaders_listr%   ZvalueZcrt_headerscrt_requests	   &&       r'   _crt_request_from_aws_requestZ:BotocoreCRTRequestSerializer._crt_request_from_aws_request  s    [__-	>>???"1Y__$56H&..446KD%%%##TM2##T3ug+>$?@	 7 kk--l;kk--%%#((	 . 
 r2   c                sF   V P                  V4      pVP                  P                  R 4      f<   \        VP                  4      pVP                  P                  R VP                  4       VP                  P                  R4      e   VP                  P                  R4       VP                  P                  R4      f+   VP                  f   VP                  P                  RR4       VP                  P                  R4      e   VP                  P                  R4       V# )ZhostzContent-MD5zContent-LengthZ0zTransfer-Encoding)
r   r   rp   r   r   setZnetlocZremover   Zadd)rD   botocore_http_requestr   r   rt   r'   _convert_to_crt_http_requestZ9BotocoreCRTRequestSerializer._convert_to_crt_http_request)  s    889NO""6*2 !6!:!:;I##FI,<,<=""=1=&&}5 ""#34<$))1##''(8#> ""#67C&&':;r2   c                s"    WP                   R &   R# )http_requestN)contextrD   requestr      &&,r'   r   Z2BotocoreCRTRequestSerializer._capture_http_requestG  s    *1'r2   c                s>    VR ,          pVP                  4       VR&   R# )r   HTTPRequestN)Zprepare)rD   r   Zparsedr   r   s   &&&, r'   r   ZHBotocoreCRTRequestSerializer._change_response_to_serialized_http_requestJ  s     .) ' 1}r2   c                sX    \         P                  P                  R ^/ \        R4      4      # )Nr2   )botocore
awsrequestZAWSResponseFakeRawResponser   r   r'   r   Z5BotocoreCRTRequestSerializer._make_fake_http_responseP  s,    ""..C 	
 	
r2   c                s    \        V P                  V4      ! RR VP                  RVP                  /VP                  B R,          # )ZBucketZKeyr   rJ   )getattrr   rT   rU   rW   )rD   Zclient_methodr   r   r'   _get_botocore_http_requestZ7BotocoreCRTRequestSerializer._get_botocore_http_requestX  sJ    t||]3 
##
)2
:C:N:N

 	r2   c                sr    V P                  WP                  P                  4      pV P                  V4      pV# r    )r   r   r   r   )rD   r   r   r   r   r   r'   r   Z3BotocoreCRTRequestSerializer.serialize_http_request]  s9     $ ? ?;;00!
 778MNr2   c                s|    \        V\        P                  P                  4      '       d   V P	                  V4      # R # r    )r   r"   r#   ZS3ResponseError _translate_crt_s3_response_errorr   rf   r'   r>   Z4BotocoreCRTRequestSerializer.translate_crt_exceptiond  s-    i!:!:;;88CCr2   c                sZ   VP                   pVR 8  d   R# VP                   UUu/ uF  w  r4W4bK	  	  pppVP                  pVe=   V P                  P                  P
                  pVP                  V4      P                  pMRpR\        P                  P                  V4      RVRVP                  /p	V P                  P                  P                  WR7      p
V
P                  R/ 4      P                  R4      pV P                  P                  P!                  V4      pV! WR7      # u uppi )	i-  Nr   status_coder   )shapeZErrorZCode)operation_name)r   r   r   r   r   service_modelZoperation_modelZoutput_shaper   r   ZHeadersDictr   Z_response_parserZparserp   Z
exceptionsZ	from_code)rD   Zs3_response_errorr   ZkZvr   r   r   r   Zresponse_dictZparsed_responseZ
error_codeZerror_classs   &&           r'   r   Z=BotocoreCRTRequestSerializer._translate_crt_s3_response_errorj  s   '33 $5$=$=>$=DA14$=>*99% LL--;;M!11.ANNEE x**66w?;%**

 ,,77== > 
 %(("599&A
ll--77
C?JJ' ?s   D'c                sB    VP                  R / 4      pRV9   d   VR R# R# )r   ZchecksumN)rp   )rD   Zparamsr   Zrequest_contexts   &&, r'   r   Z5BotocoreCRTRequestSerializer._remove_checksum_context  s'     **Y3(
+ )r2   )r   r   r    )r   r   r   r   rI   r   r   r   r   r   r   r   r   r>   r   r   r   r   r   r   r'   r   r     sG     
<-,<22

K8, ,r2   r   c                   s*   a  ] tR tRt o RR ltRtV tR# )r   i  Nc              #  sN   "    V P                  V4      pV'       g   R# Vx  K"  5i)TN)Zread)rD   ZamtZdecode_contentchunkrn   r'   streamZFakeRawResponse.stream  s      IIcNEKs   %%rJ   )i   N)r   r   r   r   r   r   r   r   r   r'   r   r     s      r2   r   c                   s8   a  ] tR tRt o R tR tR tR tRtV t	R# )BotocoreCRTCredentialsWrapperi  c                    Wn         R # r    _resolved_credentials)rD   Zresolved_botocore_credentialsrf   r'   rI   Z&BotocoreCRTCredentialsWrapper.__init__  s    %B"r2   c                s    V P                  4       P                  4       p\        VP                  VP                  VP
                  4      # r    )_get_credentialsZget_frozen_credentialsr   Z
access_keyZ
secret_keyZtoken)rD   Zcredentialsr&   r'   __call__Z&BotocoreCRTCredentialsWrapper.__call__  s?    ++-DDF""K$:$:K<M<M
 	
r2   c                s.    \         P                  ! V 4      # r    )r   Znew_delegaterK   rL   r'   to_crt_credentials_providerZ9BotocoreCRTCredentialsWrapper.to_crt_credentials_provider  s    %22488r2   c                sJ    V P                   f   \        4       hV P                   # r    )r   r   rK   rL   r'   r   Z.BotocoreCRTCredentialsWrapper._get_credentials  s#    %%-$&&)))r2   r   N)
r   r   r   r   rI   r   r   r   r   r   r   r   r'   r   r     s     C
9* *r2   r   c                   sz   a  ] tR tRt o RtRR lt]R 4       tR tRR lt	RR lt
R	 tRR
 ltR tR tR tRtV tR# )r   i  z-A helper class for managing CRTTransferFutureNc                s    Wn         W0n        W n        \        P                  ! 4       V n        R V n        R V n        \        P                  ! 4       V n	        R # r    )
r   _exception_translator_s3_requestrA   ZLock_lock
_exception_crt_futureZEvent_done_event)rD   r   
s3_requestr      &&&&r'   rI   ZCRTTransferCoordinator.__init__  sB     '%9"%^^%
$??,r2   c                r   r    )r   rK   rL   r'   r   Z!CRTTransferCoordinator.s3_request  s    r2   c                r   r    )r   r   rK   rL   r'   set_done_callbacks_completeZ2CRTTransferCoordinator.set_done_callbacks_complete  s    r2   c                r   r    )r   Zwaitr   rf   r'   r|   Z<CRTTransferCoordinator.wait_until_on_done_callbacks_complete  s    g&r2   c                s    V P                   ;_uu_ 4        V P                  4       '       d	   V'       d   Wn        R R R 4       R #   + '       g   i     R # ; ir    )r   ru   r   )rD   r   r   r   r'   r   Z$CRTTransferCoordinator.set_exception  s)    ZZZ99;;("+ ZZZs   AAA	c                sb    V P                   '       d   V P                   P                  4        R # R # r    )r   rQ   rK   rL   r'   rQ   ZCRTTransferCoordinator.cancel  s%    ##% r2   c                s   V P                   '       d   V P                   h V P                  P                  V4       T P                  '       d
   R T n        R # R #   \         d.    T P	                  4        T P                  P                  T4       h \
         d   pT P                  T4        R p?LtR p?ii ; i  T P                  '       d	   R T n        i i ; ir    )r   r   rz   r~   rQ   r   handle_exceptionr   )rD   r   r      && r'   rz   ZCRTTransferCoordinator.result  s    ???//!
	(##G, #'    ! 	KKM##G, 	%!!!$$	% #'   s/   A ?B4B4B/*B7 /B44B7 7Cc                s    R pV P                   '       d    V P                  V4      pVe   W!hVh  \         d"   p\        P                  RTR7        R p?L/R p?ii ; i)NzUnable to translate exception.)Zexc_info)r   r   r3   r4   )rD   ZexcZtranslated_excr   rt   r'   r   Z'CRTTransferCoordinator.handle_exception  sc    %%%!%!;!;C!@ % )I   =J	s   / AAAc                sV    V P                   f   R# V P                   P                  4       # )NF)r   ru   rK   rL   r'   ru   ZCRTTransferCoordinator.done  s&    #$$&&r2   c                sH    Wn         V P                   P                  V n        R # r    )r   Zfinished_futurer   )rD   r   rf   r'   r   Z%CRTTransferCoordinator.set_s3_request  s    %++;;r2   )r   r   r   r   r   r   r   )NNNr    r   )r   r   r   r   r   rI   r   r   r   r|   r   rQ   rz   r   ru   r   r   r   r   r   r'   r   r     sN     7	-    ',
&('
< <r2   r   CRTConfigParameterr%   min_versionc                   st   a  ] tR tRt o R]! RR4      /tRR ltR tR tR t	R	 t
RR
 ltR tR tR tRtV tR# )r<   i  max_active_connections_overridemax_request_concurrencyNc                s*    Wn         W n        W0n        R # r    )_request_serializer	_os_utils_config)rD   rE   Zos_utilsrG   r   r'   rI   ZS3ClientArgsCreator.__init__  s    #9 !r2   c                s   R V P                   P                  RV P                   P                  /pV P                   P                  R4      V P                   P                  J d   RVR &   V P                   P                  R4      V P                   P                  J d   RVR&   \        V RV 24      '       d$   VP                  \        V RV 24      ! 4       4       V P                  V4       V# )r,   r   multipart_chunksizeNr   Z_get_crt_options_)	r   r   r   get_deep_attrUNSET_DEFAULTZhasattrupdater   $_remove_param_if_not_min_crt_version)rD   r   
crt_configr   r'    _get_crt_transfer_config_optionsZ4S3ClientArgsCreator._get_crt_transfer_config_options   s    99-t||/S/S

 LL&&'<=||))* '+J{#LL&&'@A||))* =AJ894,\N;<< 1,@AC 	11*=r2   c                s2    R V P                   P                  /# )Zmultipart_upload_threshold)r   Zmultipart_thresholdrK   rL   r'   _get_crt_options_put_objectZ/S3ClientArgsCreator._get_crt_options_put_object  s    ,dll.N.NOOr2   c           
     s   . pV F  pW0P                   9  d   K  V P                   V,          p\        VP                  4      '       d   KE  V P                  P	                  VP
                  4      V P                  P                  JdV   R P                  R VP                   4       4      p\        P                  RVP
                   RV RVP
                   R24       VP                  V4       K  	  V F  pW K  	  R# )r5   c              3   s8   "   T F  p\        V4      x  K  	  R # 5ir    )r   ).0Zir&   r'   	<genexpr>ZKS3ClientArgsCreator._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.N)_CRT_ARG_TO_CONFIG_PARAMr8   r   r   r   r%   r   rm   r3   Zwarningr   )rD   r   Z	to_removeZrequest_argZparamZmin_ver_strs   &&    r'   r   Z8S3ClientArgsCreator._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' %r2   c           	     sR    \        V R V 2V P                  4      pV! VVVV. VR7      # )Z_get_make_request_args_r   r   rw   r   on_done_before_callsr   )r   _default_get_make_request_args)rD   r   r   rw   r   r   Zrequest_args_handlerr^   r'   r   Z)S3ClientArgsCreator.get_make_request_args4  sF      '%l^4// 

 $%#!# 3
 	
r2   c                s    aaaa VVVV3R  lpV# )c                  s   < . pSe
   VS,          pV\        SS4      ,          pSe
   VS,          pV F$  pSR8X  d   V! V ^ ,          R7       K  V! V / VB  K&  	  R # )Nprogress)Zbytes_transferred)r   )rP   r   Zcallbacks_listZcallbackr   before_subscriberscallback_typer   s   *,  r'   invoke_all_callbacksZBS3ClientArgsCreator.get_crt_callback.<locals>.invoke_all_callbacksL  sh    N!-"44mFMBBN ,"33* !J.tAw7d-f- +r2   rJ   )rD   r   r  r
  r   r  s   &ffff r'   r   Z$S3ClientArgsCreator.get_crt_callbackE  s    	. 	.  $#r2   c           	     sP  a R p\        SP                  \        4      '       d8   SP                  pV P                  P	                  V4      pVSP
                  R&   MSP                  SP
                  R&   R p	\        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       g   SP
                  P                  RR4      P                  4       p
\        P                  P                  \        P                  P                  V
,          \        P                  P                  P                  R7      p	R	SP
                  R
&   V P!                  VSVVVVR7      pW{R&   WR&   V P"                  e!   VP%                  V P'                  V4      4       V# )NZContentLengthZBodyc              3   sB   <"   T F  pVSP                   9   x  K  	  R # 5ir    )rW   )r  Zchecksum_argr   s   & r'   r  ZHS3ClientArgsCreator._get_make_request_args_put_object.<locals>.<genexpr>p  s#      
 9 I000 9s   TFro   ZCRC32)	algorithmZlocationzoverride-to-be-removedZ
ContentMD5r  send_filepathchecksum_config)r   rV   r   r   Zget_file_sizerW   Zanyr   Zpoprr   r"   r#   S3ChecksumConfigrq   ZS3ChecksumLocationZTRAILERr  r   r   r  )rD   r   r   rw   r   r  r   r  Zdata_lenr  rs   make_request_argss   &&f&&&&     r'   !_get_make_request_args_put_objectZ5S3ClientArgsCreator._get_make_request_args_put_object^  s{    i''--%--M~~33MBH4<I  1+4+<+<I  (s 
 9
sss 
 9
 
 
 "+!5!5!9!9#W"eg  %ii88 ))778JK55== 9 O .F	\* ??%#!5 3 @ 
 .;/*/>+,<<#$$55lC ! r2   c           	     s   R pR p\         P                  P                  RR7      p	\        VP                  \
        4      '       dN   VP                  p
V P                  P                  V
4      pVP                  \        W:WpP                  4      4       M\        VP                  4      pV P                  VVVVVVR7      pW{R&   WR&   WR&   V P                  e!   VP                  V P                  V4      4       V# )NT)Zvalidate_responser  recv_filepathon_bodyr  )r"   r#   r  r   rV   r   r   Zget_temp_filenamer   RenameTempFileHandlerOnBodyFileObjWriterr  r   r   r  )rD   r   r   rw   r   r  r   r  r  r  Zfinal_filepathr  s   &&&&&&&     r'   !_get_make_request_args_get_objectZ5S3ClientArgsCreator._get_make_request_args_get_object  s      ))44t4Li''--&..N NN<<^LM ''% *)*;*;<G ??%#!5 3 @ 
 .;/*'.)$/>+,<<#$$55lC ! r2   c                s   R V P                   P                  W4      R\        \        VP	                  4       \        P
                  4      RV P                  VRWV4      RV P                  VR4      /pVR,          \        P
                  8X  d+   RP                  R VP                  R4       4       4      VR	&   \        4       pVP                  VP                  4      ;p	'       d?   V	R
,          R8X  d1   \        \        P                  RRRR7      VR&   V	R,          Vn        V# \        VP                  4      '       d    \        \        P                   RRR7      VR&   V# )r   Ztyper   ru   Zon_progressr	  Z c              3   s@   "   T F  qP                  4       x  K  	  R # 5ir    )Ztitle)r  Zxr&   r'   r  ZES3ClientArgsCreator._default_get_make_request_args.<locals>.<genexpr>  s      :#:a		#:s   Z_r   r+   Z*F)r  r+   use_double_uri_encodeshould_normalize_uri_pathZsigning_configresource_name)r  r  r  )r   r   r   r   rr   ZDEFAULTr   rm   r6   _S3ArnParamHandler
handle_arnrT   r   r   ZV4_ASYMMETRICr   ZV4_S3EXPRESS)
rD   r   r   rw   r   r  r   r  Zarn_handlerZaccesspoint_arn_detailss
   &&&&&&&   r'   r  Z2S3ClientArgsCreator._default_get_make_request_args  sf    t//FF G|113]5J5J t,, 4 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./
 ! r2   )r   r   r   )r    i   r    r    r   )r   r   r   r   r   r  rI   r  r  r   r   r   r  r  r  r   r   r   r   r'   r<   r<     sR     )+=%z,
 
2P(0
"$21!f&!P4! 4!r2   r<   c                   r   )r  i  c                s6    Wn         W n        W0n        W@n        R # r    )r   _final_filename_temp_filenamer:   )rD   rw   Zfinal_filenameZtemp_filenamerF   rH   r'   rI   ZRenameTempFileHandler.__init__  s    '-+r2   c                s   VR ,          pV'       d(   V P                   P                  V P                  4       R#  V P                   P                  V P                  V P                  4       R#   \
         dL   pT P                   P                  T P                  4       T P                  P                  T4        Rp?R# Rp?ii ; i)r   N)r:   Zremove_filer  Zrename_filer  r   r   r   )rD   r   r   r   s   &,  r'   r   ZRenameTempFileHandler.__call__  s    wLL$$T%8%893(('')=)=  3(()<)<=!!//223s   0A, ,C7A B==C)r   r  r:   r  Nr   r   r   r   rI   r   r   r   r   r   r'   r  r    s     3 3r2   r  c                   r   )r   i  c                r   r    r   rv   rf   r'   rI   ZAfterDoneHandler.__init__  s    'r2   c                r   r    )r   r   r   r   r'   r   ZAfterDoneHandler.__call__
  s    557r2   r   Nr  r   r   r'   r   r     s     (8 8r2   r   c                   r   )r  i  c                r   r    _fileobj)rD   rV   rf   r'   rI   ZOnBodyFileObjWriter.__init__  s    r2   c                r   r    )r"  Zwrite)rD   r   r   r   r'   r   ZOnBodyFileObjWriter.__call__  s    E"r2   r!  Nr  r   r   r'   r  r    s      # #r2   r  c                   s`   a  ] tR tRt o Rt]P                  ! R4      tR tR t	R t
R tRtV tR	# )
r  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                s$    \        4       V n        R # r    )r   _arn_parserrK   rL   r'   rI   Z_S3ArnParamHandler.__init__"  s    $;r2   c                sT    V P                  V4      pVf   R # VR,          R8X  d   V# R # )Nresource_typeZaccesspoint)_get_arn_details_from_bucketrD   rT   arn_detailsr   r'   r  Z_S3ArnParamHandler.handle_arn%  s3    77?'=8 9r2   c                s     V P                   P                  V4      pV P                  V4       V#   \         d     R # i ; ir    )r#  Z	parse_arn_add_resource_type_and_namer   r&  r   r'   r%  Z/_S3ArnParamHandler._get_arn_details_from_bucket,  sF    	**44V<K,,[9" 		s   -0 ??c                s    V P                   P                  VR ,          4      pV'       d+   VP                  R4      VR&   VP                  R4      VR&   R# R# )rl   r$  r  N)_RESOURCE_REGEXrk   Zgroup)rD   r'  rk   r   r'   r(  Z._S3ArnParamHandler._add_resource_type_and_name5  sK    $$**;z+BC+0;;+GK(+0;;+GK( r2   )r#  N)r   r   r   r   r   reZcompiler)  rI   r  r%  r(  r   r   r   r   r'   r  r    s8      jjLO'H Hr2   r  r    )KZloggingr*  rA   Zcollectionsr   Zior   Zawscrt.httpr"   Z	awscrt.s3Zbotocore.awsrequestr   Zbotocore.sessionZawscrt.authr   r   r   r   Z	awscrt.ior   r   r	   r
   r   r   r   r   r   Zbotocore.compatr   Zbotocore.configr   Zbotocore.exceptionsr   Zbotocore.utilsr   r   Zs3transfer.constantsr   r   Zs3transfer.exceptionsr   Zs3transfer.futuresr   r   Zs3transfer.managerr   Zs3transfer.utilsr   r   r   r   r   Z	getLoggerr   r3   r!   r(   r1   r/   r8   r9   r   r   r   r   r   r   r   r   r<   r  r   r  r  rJ   r2   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r2   