Ë
    rPêjRY  ã                   óÀ   — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZ d dlmZmZmZmZ  G d„ de«      Z G d	„ d
e	«      Z G d„ de«      Z G d„ de«      Zy)é    N)Ú	parse_qsl)ÚClientError)ÚS3CopyFailedError)ÚCompleteMultipartUploadTaskÚCreateMultipartUploadTaskÚSubmissionTaskÚTask)ÚChunksizeAdjusterÚcalculate_range_parameterÚget_callbacksÚget_filtered_dictc            
       ó¬   — e Zd ZdZdddddddd	d
dœ	Zg d¢Zg d¢Zg d¢Zg d¢Zd	d
gZ	g d¢Z
d	d
gZd	d
gZg d¢Zd„ Zd„ Z	 	 dd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚCopySubmissionTaskz+Task for submitting tasks to execute a copyÚIfMatchÚIfModifiedSinceÚIfNoneMatchÚIfUnmodifiedSinceÚSSECustomerKeyÚSSECustomerAlgorithmÚSSECustomerKeyMD5ÚRequestPayerÚExpectedBucketOwner)	ÚCopySourceIfMatchÚCopySourceIfModifiedSinceÚCopySourceIfNoneMatchÚCopySourceIfUnmodifiedSinceÚCopySourceSSECustomerKeyÚCopySourceSSECustomerAlgorithmÚCopySourceSSECustomerKeyMD5r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   ÚMetadataDirectiveÚTaggingDirectiveÚAnnotationDirectiveÚTagging)ÚCacheControlÚContentDispositionÚContentEncodingÚContentLanguageÚContentTypeÚExpiresÚMetadata)r   r   r   r   r   )r   r   ÚChecksumAlgorithmc           	      óF  — i }|j                   j                  }d}t        |j                  t        «      r|j                  j                  d«      }|j                   j                  �|j                   j                  €Õ| j                  |j                  «      }	|j                  }
|
j                  «       D ]&  \  }}|| j                  v sŒ||	| j                  |   <   Œ(  |j                  j                  di |	¤Ž}|j                   j                  |d   «       |j                   j                  |j                  d«      «       | j!                  |«      }|j                   j                  |j"                  k  r| j%                  |||||«       y| j'                  |||||||¬«       y)aÒ  
        :param client: The client associated with the transfer manager

        :type config: s3transfer.manager.TransferConfig
        :param config: The transfer config associated with the transfer
            manager

        :type osutil: s3transfer.utils.OSUtil
        :param osutil: The os utility associated to the transfer manager

        :type request_executor: s3transfer.futures.BoundedExecutor
        :param request_executor: The request executor associated with the
            transfer manager

        :type transfer_future: s3transfer.futures.TransferFuture
        :param transfer_future: The transfer future associated with the
            transfer request that tasks are being submitted for
        NÚ	VersionIdÚContentLengthÚETag)Úsource_version_id© )ÚmetaÚ	call_argsÚ
isinstanceÚcopy_sourceÚdictÚgetÚsizeÚetagÚ)_get_head_object_request_from_copy_sourceÚ
extra_argsÚitemsÚEXTRA_ARGS_TO_HEAD_ARGS_MAPPINGÚsource_clientÚhead_objectÚprovide_transfer_sizeÚprovide_object_etagÚ_extract_preserved_metadataÚmultipart_thresholdÚ_submit_copy_requestÚ_submit_multipart_request)ÚselfÚclientÚconfigÚosutilÚrequest_executorÚtransfer_futureÚpreserved_metadatar3   r0   Úhead_object_requestr;   ÚparamÚvalueÚresponses                 úV/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/s3transfer/copies.pyÚ_submitzCopySubmissionTask._submito   s°  € ð*  ÐØ#×(Ñ(×2Ñ2ˆ	Ø ÐÜ�i×+Ñ+¬TÔ2Ø )× 5Ñ 5× 9Ñ 9¸+Ó FÐà× Ñ ×%Ñ%Ð-Ø×#Ñ#×(Ñ(Ð0ð ×>Ñ>Ø×)Ñ)óð  ð
 #×-Ñ-ˆJð !+× 0Ñ 0Ó 2ò ‘��uØ˜D×@Ñ@Ò@ð ð (Ø×<Ñ<¸UÑCòðð ;�y×.Ñ.×:Ñ:ñ Ø%ñˆHð × Ñ ×6Ñ6Ø˜Ñ)ôð
 × Ñ ×4Ñ4°X·\±\À&Ó5IÔJØ!%×!AÑ!AÀ(Ó!KÐð ×Ñ×$Ñ$ v×'AÑ'AÒAØ×%Ñ%Ø˜ Ð(8¸/õð ×*Ñ*ØØØØ ØØ"Ø"3ð +õ ó    c                 ó4  — |j                   j                  }t        |d«      }| j                  j	                  |t        | j                  ||j                  |j                  |j                  |j                  ||j                   j                  dœd¬«      «       y )NÚprogress)rG   r5   ÚbucketÚkeyr;   Ú	callbacksr8   T)Útransfer_coordinatorÚmain_kwargsÚis_final)r2   r3   r   Ú_transfer_coordinatorÚsubmitÚCopyObjectTaskr5   rV   rW   r;   r8   )rF   rG   rH   rI   rJ   rK   r3   Úprogress_callbackss           rQ   rD   z'CopySubmissionTask._submit_copy_request½   s�   € ð $×(Ñ(×2Ñ2ˆ	ô +¨?¸JÓGÐð 	×"Ñ"×)Ñ)ØÜØ%)×%?Ñ%?à$Ø#,×#8Ñ#8Ø'×.Ñ.Ø$Ÿ=™=Ø"+×"6Ñ"6Ø!3Ø+×0Ñ0×5Ñ5ñð ôõ	
rS   Nc                 óº  — |j                   j                  }| j                  |j                  |xs i «      }	i }
|	j	                  «       D ]  \  }}|| j
                  vsŒ||
|<   Œ | j                  j                  |t        | j                  ||j                  |j                  |
dœ¬«      «      }|j                  }t        «       }|j                  ||j                   j                  «      }t        t!        j"                  |j                   j                  t%        |«      z  «      «      }g }t'        |d«      }t)        d|dz   «      D �]&  }| j+                  |j                  «      }t-        ||dz
  ||j                   j                  «      |d<   |j                   j.                  �|j                   j.                  |d<   | j1                  ||dz
  ||j                   j                  «      }|j                  j3                  d«      }|j5                  | j                  j                  |t7        | j                  ||j8                  |j                  |j                  |||||dœ	d	|i¬
«      «      «       �Œ) | j;                  |j                  «      }| j                  j                  |t=        | j                  ||j                  |j                  |||dœ||dœd¬«      «       y )N)rG   rV   rW   r;   )rY   rZ   rU   é   ÚCopySourceRanger   r+   )	rG   r5   rV   rW   Úpart_numberr;   rX   r8   Úchecksum_algorithmÚ	upload_id)rY   rZ   Úpending_main_kwargs)rG   rV   rW   r;   r3   r0   )re   ÚpartsT)rY   rZ   rf   r[   )r2   r3   Ú_apply_preserved_metadatar;   r<   ÚCREATE_MULTIPART_ARGS_BLACKLISTr\   r]   r   rV   rW   Úmultipart_chunksizer
   Úadjust_chunksizer8   ÚintÚmathÚceilÚfloatr   ÚrangeÚ_extra_upload_part_argsr   r9   Ú_get_transfer_sizer7   ÚappendÚCopyPartTaskr5   Ú_extra_complete_multipart_argsÚCopyCompleteMultipartUploadTask)rF   rG   rH   rI   rJ   rK   rL   r0   r3   Úmerged_extra_argsÚcreate_multipart_extra_argsrN   ÚvalÚcreate_multipart_futureÚ	part_sizeÚadjusterÚ	num_partsÚpart_futuresr_   rc   Úextra_part_argsr8   rd   Úcomplete_multipart_extra_argss                           rQ   rE   z,CopySubmissionTask._submit_multipart_request×   sù  € ð $×(Ñ(×2Ñ2ˆ	Ø ×:Ñ:Ø× Ñ Ð"4Ò":¸ó
Ðð ')Ð#Ø+×1Ñ1Ó3ò 	9‰JˆE�3Ø˜D×@Ñ@Ò@Ø58Ð+¨EÒ2ð	9ð #'×"<Ñ"<×"CÑ"CØÜ%Ø%)×%?Ñ%?à$Ø'×.Ñ.Ø$Ÿ=™=Ø"=ñ	ôó#
Ðð ×.Ñ.ˆ	Ü$Ó&ˆØ×-Ñ-Ø�×+Ñ+×0Ñ0ó
ˆ	ô Ü�I‰I�o×*Ñ*×/Ñ/´%¸	Ó2BÑBÓCó
ˆ	ð
 ˆÜ*¨?¸JÓGÐä   I°¡MÓ2ó 0	ˆKØ"×:Ñ:Ø×$Ñ$óˆOô 2KØØ˜a‘ØØ×$Ñ$×)Ñ)ó	2ˆOÐ-Ñ.ð ×#Ñ#×(Ñ(Ð4à#×(Ñ(×-Ñ-ð  Ð 3Ñ4ð
 ×*Ñ*ØØ˜a‘ØØ×$Ñ$×)Ñ)ó	ˆDð "+×!5Ñ!5×!9Ñ!9Ð:MÓ!NÐØ×ÑØ×*Ñ*×1Ñ1Ø$Ü Ø-1×-GÑ-Gà&,Ø+4×+@Ñ+@Ø&/×&6Ñ&6Ø#,§=¡=Ø+6Ø*9Ø);Ø$(Ø2Dñ
%ð (Ð)@ð-ôóöð70	ðd )-×(KÑ(KØ× Ñ ó)
Ð%ð
 	×"Ñ"×)Ñ)ØÜ+Ø%)×%?Ñ%?à$Ø'×.Ñ.Ø$Ÿ=™=Ø"?Ø!*Ø):ñð "9Ø)ñ%ð ôõ	
rS   c                 óF   — i }| j                   D ]  }||v sŒ||   ||<   Œ |S ©N)ÚPRESERVED_METADATA_FIELDS)rF   Úhead_object_responseÚ	preservedÚfields       rQ   rB   z.CopySubmissionTask._extract_preserved_metadataT  s<   € Øˆ	Ø×3Ñ3ò 	?ˆEØÐ,Ò,Ø#7¸Ñ#>�	˜%Ò ð	?ð ÐrS   c                 óÂ   — |j                  d«      dk(  r|S |j                  «       D ��ci c]  \  }}|| j                  vr||“Œ }}}|j                  |«       |S c c}}w )Nr    ÚREPLACE)r7   r<   rƒ   Úupdate)rF   r;   rL   ÚkÚvÚresults         rQ   rh   z,CopySubmissionTask._apply_preserved_metadata[  ss   € ð �>‰>Ð-Ó.°)Ò;ØÐð #×(Ñ(Ó*÷
á��1Ø˜×6Ñ6Ñ6ð ˆq‰Dð
ˆñ 
ð
 	�‰Ð(Ô)Øˆùó
s   ªAc                 ó‚   — t        |t        «      rt        j                  |«      S t        d|› dt	        |«      › d�«      ‚)NzLExpecting dictionary formatted: {"Bucket": bucket_name, "Key": key} but got z	 or type ú.)r4   r6   ÚcopyÚ	TypeErrorÚtype)rF   r5   s     rQ   r:   z<CopySubmissionTask._get_head_object_request_from_copy_sourcei  sF   € Ü�k¤4Ô(Ü—9‘9˜[Ó)Ð)äðà&˜- y´°kÓ1BÐ0CÀ1ðFóð rS   c                 ó.   — t        || j                  «      S r‚   )r   ÚUPLOAD_PART_COPY_ARGS©rF   r;   s     rQ   rq   z*CopySubmissionTask._extra_upload_part_argss  s   € ô ! ¨T×-GÑ-GÓHÐHrS   c                 ó.   — t        || j                  «      S r‚   )r   ÚCOMPLETE_MULTIPART_ARGSr”   s     rQ   ru   z1CopySubmissionTask._extra_complete_multipart_argsx  s   € Ü  ¨T×-IÑ-IÓJÐJrS   c                 ó&   — ||dz
  k(  r|||z  z
  S |S )Nra   r1   )rF   r{   Ú
part_indexr}   Útotal_transfer_sizes        rQ   rr   z%CopySubmissionTask._get_transfer_size{  s(   € ð ˜ Q™Ò&ð '¨*°yÑ*@ÑAÐAØÐrS   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r=   r“   ri   rƒ   r–   ÚGET_OBJECT_TAGGING_ARGSÚPUT_OBJECT_TAGGING_ARGSÚLIST_OBJECT_ANNOTATIONS_ARGSÚGET_OBJECT_ANNOTATION_ARGSÚPUT_OBJECT_ANNOTATION_ARGSrR   rD   rE   rB   rh   r:   rq   ru   rr   r1   rS   rQ   r   r   "   s¾   „ Ù5ð 'Ø%6Ø!.Ø':Ø$4Ø*@Ø':Ø&Ø4ñ
'Ð#òÐò'Ð#ò!ÐòÐð  .Ð/DÐEÐòÐð
 %3Ð4IÐ#JÐ Ø"0Ð2GÐ!HÐò"ÐòLò\
ðB  Øó{
òzòòòIò
KórS   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)rv   zÜCompleteMultipartUpload variant that also applies tags and annotations.

    After the destination object is finalized, copies/applies tags and
    annotations inline. Errors during apply propagate as task failures.
    c	                 óÌ   —  |j                   d|||d|idœ|¤Ž}	|	j                  d«      }
|	j                  d«      }| j                  ||||«       | j                  |||||
«       y )NÚParts)ÚBucketÚKeyÚUploadIdÚMultipartUploadr/   r-   r1   )Úcomplete_multipart_uploadr7   Ú_apply_tagsÚ_apply_annotations)rF   rG   rV   rW   re   rg   r;   r3   r0   rP   Ú	dest_etagÚdest_version_ids               rQ   Ú_mainz%CopyCompleteMultipartUploadTask._mainŒ  sƒ   € ð 4�6×3Ñ3ð 
ØØØØ$ eÐ,ñ	
ð
 ñ
ˆð —L‘L Ó(ˆ	Ø"Ÿ,™, {Ó3ˆØ×Ñ˜ Ð,=¸ÔOØ×ÑØ�IÐ0°/À9õ	
rS   c                 ó@  — |j                   }|j                  d«      }|dvry |dk(  rm|j                  d   |j                  d   dœt        |t        j
                  «      ¥}|r||d<    |j                  j                  di |¤Žj                  dg «      }n2t        |j                  d	d
«      d¬«      D �	�
cg c]
  \  }	}
|	|
dœ‘Œ }}	}
|sy |j                  |j                  d|idœt        |t        j                  «      ¥}|r||d<    |j                  di |¤Ž y c c}
}	w )Nr!   )ÚCOPYrˆ   r±   r¦   r§   ©r¦   r§   r-   ÚTagSetr#   Ú T)Úkeep_blank_values)r§   ÚValue)r¦   r§   r#   r1   )r;   r7   r5   r   r   rž   r>   Úget_object_taggingr   rV   rW   rŸ   Úput_object_tagging)rF   rG   r3   r0   r®   r;   Ú	directiveÚ
src_kwargsÚtag_setrŠ   r‹   Ú
put_kwargss               rQ   r«   z+CopyCompleteMultipartUploadTask._apply_tags¥  sU  € ð ×)Ñ)ˆ
Ø—N‘NÐ#5Ó6ˆ	ØÐ/Ñ/ØØ˜Òà#×/Ñ/°Ñ9Ø ×,Ñ,¨UÑ3ñô $ØÔ 2× JÑ JóðˆJñ !Ø*;�
˜;Ñ'Ø@�i×-Ñ-×@Ñ@ñ Øñç‰c�(˜BÓñ ô &Ø—N‘N 9¨bÓ1Ø&*ô÷á�A�qð  AÓ&ðˆGñ ñ Øà×&Ñ&Ø—=‘=Ø  'Ð*ñ
ô  ØÔ.×FÑFóð	
ˆ
ñ Ø&5ˆJ�{Ñ#Ø!ˆ×!Ñ!Ñ/ JÓ/ùó's   Â5Dc                 óz  — |j                   }|j                  d«      dk7  ry |j                  d   |j                  d   dœ}|r||d<   i |¥t        |t        j
                  «      ¥}i |¥t        |t        j                  «      ¥}	t        |t        j                  «      }
 |j                  j                  di |¤Ž}g }i }|j                  dg «      D ]‡  }|d   } |j                  j                  di |	¤d|i¤Ž}|j                  |j                  ||d	   j                  «       d
œ|
¥}|r||d<   |r||d<   	  |j                  di |¤Ž |j                  |«       Œ‰ |rEt#        d|j                  › d|j                  › d|› dt%        |j'                  «       «      › d|› �
«      ‚y # t         $ r}|||<   Y d }~Œåd }~ww xY w)Nr"   r±   r¦   r§   r²   r-   ÚAnnotationsÚAnnotationNameÚAnnotationPayload)r¦   r§   r¿   rÀ   ÚObjectIfMatchz#Failed to copy annotations to s3://ú/z. Succeeded: z
. Failed: z
. Errors: r1   )r;   r7   r5   r   r   r    r¡   r¢   r>   Úlist_object_annotationsÚget_object_annotationrV   rW   ÚreadÚput_object_annotationrs   Ú	Exceptionr   ÚlistÚkeys)rF   rG   r3   r0   r®   r­   r;   Úsrc_baseÚlist_kwargsÚget_kwargs_baseÚput_passthroughÚlist_responseÚ	succeededÚfailedÚ
annotationÚnameÚpayload_responser¼   Úes                      rQ   r¬   z2CopyCompleteMultipartUploadTask._apply_annotationsÏ  s3  € ð ×)Ñ)ˆ
Ø�>‰>Ð/Ó0°FÒ:Øà×+Ñ+¨HÑ5Ø×(Ñ(¨Ñ/ñ
ˆñ Ø$5ˆH�[Ñ!ð
Øð
äØÔ.×KÑKóð
ˆð
Øð
äØÔ.×IÑIóð
ˆô ,ØÔ*×EÑEó
ˆð H˜	×/Ñ/×GÑGñ 
Øñ
ˆð ˆ	ØˆØ'×+Ñ+¨M¸2Ó>ò 	!ˆJØÐ.Ñ/ˆDØL˜y×6Ñ6×LÑLñ  Ø!ñ à#ò Ðð
 $×*Ñ*Ø —}‘}Ø"&Ø%5Ø'ñ&ç‘$“&ñð "ðˆJñ Ø*9�
˜;Ñ'ÙØ.7�
˜?Ñ+ð!Ø,�×,Ñ,Ñ:¨zÒ:Ø× Ñ  Õ&ð+	!ñ0 Ü#ðØ!×(Ñ(Ð)¨¨9¯=©=¨/ð :Ø'˜[ð )Ü §¡£Ó.Ð/ð 0Ø!˜(ð	$óð ð øô ò !Ø ��t–ûð!ús   Ä5#F"Æ"	F:Æ+F5Æ5F:N)rš   r›   rœ   r�   r¯   r«   r¬   r1   rS   rQ   rv   rv   …  s   „ ñò
ò2(0óTErS   rv   c                   ó   — e Zd ZdZd„ Zy)r^   zTask to do a nonmultipart copyc                 óP   —  |j                   d|||dœ|¤Ž |D ]  } ||¬«       Œ y)aÿ  
        :param client: The client to use when calling PutObject
        :param copy_source: The CopySource parameter to use
        :param bucket: The name of the bucket to copy to
        :param key: The name of the key to copy to
        :param extra_args: A dictionary of any extra arguments that may be
            used in the upload.
        :param callbacks: List of callbacks to call after copy
        :param size: The size of the transfer. This value is passed into
            the callbacks

        )Ú
CopySourcer¦   r§   ©Úbytes_transferredNr1   )Úcopy_object)	rF   rG   r5   rV   rW   r;   rX   r8   Úcallbacks	            rQ   r¯   zCopyObjectTask._main  sA   € ð 	ˆ×Ñð 	
Ø"¨6°sñ	
Ø>Hò	
ð "ò 	-ˆHÙ tÖ,ñ	-rS   N©rš   r›   rœ   r�   r¯   r1   rS   rQ   r^   r^     s
   „ Ù(ó-rS   r^   c                   ó   — e Zd ZdZ	 dd„Zy)rt   z)Task to upload a part in a multipart copyNc           	      ó|  — 	  |j                   d|||||dœ|¤Ž}|D ]  } ||	¬«       Œ |d   d   }||dœ}|
r%d|
j                  «       › �}||d   v r|d   |   ||<   |S # t        $ rR}|j                  j                  di «      j                  d«      }|d   }|d   }|dk(  rt	        d|› d|› d	�«      ‚‚ d
}~ww xY w)a<  
        :param client: The client to use when calling PutObject
        :param copy_source: The CopySource parameter to use
        :param bucket: The name of the bucket to upload to
        :param key: The name of the key to upload to
        :param upload_id: The id of the upload
        :param part_number: The number representing the part of the multipart
            upload
        :param extra_args: A dictionary of any extra arguments that may be
            used in the upload.
        :param callbacks: List of callbacks to call after copy part
        :param size: The size of the transfer. This value is passed into
            the callbacks
        :param checksum_algorithm: The algorithm that was used to create the multipart
            upload

        :rtype: dict
        :returns: A dictionary representing a part::

            {'Etag': etag_value, 'PartNumber': part_number}

            This value can be appended to a list to be used to complete
            the multipart upload. If a checksum is in the response,
            it will also be included.
        )r×   r¦   r§   r¨   Ú
PartNumberÚErrorÚCoder§   r¦   ÚPreconditionFailedzContents of stored object "z" in bucket "z" did not match expected ETag.NrØ   ÚCopyPartResultr/   )r/   rß   ÚChecksumr1   )Úupload_part_copyr   rP   r7   r   Úupper)rF   rG   r5   rV   rW   re   rc   r;   rX   r8   rd   rP   rÔ   Ú
error_codeÚsrc_keyÚ
src_bucketrÛ   r9   Úpart_metadataÚchecksum_members                       rQ   r¯   zCopyPartTask._main3  s.  € ðL	Ø.�v×.Ñ.ð Ø&ØØØ"Ø&ñð ñˆHð( "ò 	-ˆHÙ tÖ,ð	-àÐ(Ñ)¨&Ñ1ˆØ!%°[ÑAˆÙØ (Ð);×)AÑ)AÓ)CÐ(DÐEˆOØ (Ð+;Ñ"<Ñ<Ø19Ð:JÑ1KØ#ñ2�˜oÑ.ð Ðøô- ò 	ØŸ™Ÿ™¨°Ó4×8Ñ8¸Ó@ˆJØ! %Ñ(ˆGØ$ XÑ.ˆJØÐ1Ò1Ü'Ø1°'°ð ;"Ø", ð .%ð%óð ð ûð	ús   ‚A  Á 	B;Á)AB6Â6B;r‚   rÜ   r1   rS   rQ   rt   rt   0  s   „ Ù3ð  ôErS   rt   )r�   rm   Úurllib.parser   Úbotocore.exceptionsr   Ús3transfer.exceptionsr   Ús3transfer.tasksr   r   r   r	   Ús3transfer.utilsr
   r   r   r   r   rv   r^   rt   r1   rS   rQ   ú<module>rñ      sc   ðó Û Ý "å +å 3÷ó ÷ó ô`˜ô `ôFOÐ&Aô Oôd-�Tô -ô2H�4õ HrS   