§
    =xÅj|  ã                   óh  — d dl Z d dlmZ d dlmZ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	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )é    N)ÚBytesIO©ÚreadableÚseekable)ÚFULL_OBJECT_CHECKSUM_ARGS)ÚIN_MEMORY_UPLOAD_TAG)ÚCompleteMultipartUploadTaskÚCreateMultipartUploadTaskÚSubmissionTaskÚTask)ÚChunksizeAdjusterÚDeferredOpenFileÚget_callbacksÚget_filtered_dictc                   ó(   — e Zd Zdd„Zd„ Zd„ Zd„ ZdS )ÚAggregatedProgressCallbacké   c                 ó0   — || _         || _        d| _        dS )aØ  Aggregates progress updates for every provided progress callback

        :type callbacks: A list of functions that accepts bytes_transferred
            as a single argument
        :param callbacks: The callbacks to invoke when threshold is reached

        :type threshold: int
        :param threshold: The progress threshold in which to take the
            aggregated progress and invoke the progress callback with that
            aggregated progress total
        r   N)Ú
_callbacksÚ
_thresholdÚ_bytes_seen)ÚselfÚ	callbacksÚ	thresholds      úBC:\Projects\Historical\venv\Lib\site-packages\s3transfer/upload.pyÚ__init__z#AggregatedProgressCallback.__init__"   s    € ð $ˆŒØ#ˆŒØˆÔÐÐó    c                 ór   — | xj         |z  c_         | j         | j        k    r|                      ¦   «          d S d S ©N)r   r   Ú_trigger_callbacks)r   Úbytes_transferreds     r   Ú__call__z#AggregatedProgressCallback.__call__2   sG   € ØÐÔÐ-Ñ-ÐÔØÔ˜tœÒ.Ð.Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%ð /Ð.r   c                 óH   — | j         dk    r|                      ¦   «          dS dS )z@Flushes out any progress that has not been sent to its callbacksr   N)r   r    ©r   s    r   Úflushz AggregatedProgressCallback.flush7   s0   € àÔ˜aÒÐØ×#Ò#Ñ%Ô%Ð%Ð%Ð%ð  Ðr   c                 óJ   — | j         D ]} || j        ¬¦  «         Œd| _        d S )N)r!   r   )r   r   )r   Úcallbacks     r   r    z-AggregatedProgressCallback._trigger_callbacks<   s:   € Øœð 	9ð 	9ˆHØˆH tÔ'7Ð8Ñ8Ô8Ð8Ð8ØˆÔÐÐr   N)r   )Ú__name__Ú
__module__Ú__qualname__r   r"   r%   r    © r   r   r   r   !   sU   € € € € € ðð ð ð ð &ð &ð &ð
&ð &ð &ð
ð ð ð ð r   r   c                   ó@   — e Zd ZdZd„ Zdd„Zdd„Zd„ Zd„ Zd	„ Z	d
„ Z
dS )ÚInterruptReaderaÏ  Wrapper that can interrupt reading using an error

    It uses a transfer coordinator to propagate an error if it notices
    that a read is being made while the file is being read from.

    :type fileobj: file-like obj
    :param fileobj: The file-like object to read from

    :type transfer_coordinator: s3transfer.futures.TransferCoordinator
    :param transfer_coordinator: The transfer coordinator to use if the
        reader needs to be interrupted.
    c                 ó"   — || _         || _        d S r   )Ú_fileobjÚ_transfer_coordinator)r   ÚfileobjÚtransfer_coordinators      r   r   zInterruptReader.__init__P   s   € ØˆŒØ%9ˆÔ"Ð"Ð"r   Nc                 óf   — | j         j        r| j         j        ‚| j                             |¦  «        S r   )r0   Ú	exceptionr/   Úread)r   Úamounts     r   r5   zInterruptReader.readT   s4   € ð Ô%Ô/ð 	7ØÔ,Ô6Ð6ØŒ}×!Ò! &Ñ)Ô)Ð)r   r   c                 ó<   — | j                              ||¦  «         d S r   )r/   Úseek)r   ÚwhereÚwhences      r   r8   zInterruptReader.seek^   s    € ØŒ×Ò˜5 &Ñ)Ô)Ð)Ð)Ð)r   c                 ó4   — | j                              ¦   «         S r   )r/   Útellr$   s    r   r<   zInterruptReader.tella   s   € ØŒ}×!Ò!Ñ#Ô#Ð#r   c                 ó8   — | j                              ¦   «          d S r   )r/   Úcloser$   s    r   r>   zInterruptReader.closed   s   € ØŒ×ÒÑÔÐÐÐr   c                 ó   — | S r   r+   r$   s    r   Ú	__enter__zInterruptReader.__enter__g   s   € Øˆr   c                 ó.   — |                       ¦   «          d S r   )r>   )r   ÚargsÚkwargss      r   Ú__exit__zInterruptReader.__exit__j   s   € Ø�
Š
‰Œˆˆˆr   r   )r   )r(   r)   r*   Ú__doc__r   r5   r8   r<   r>   r@   rD   r+   r   r   r-   r-   B   s‘   € € € € € ðð ð:ð :ð :ð*ð *ð *ð *ð*ð *ð *ð *ð$ð $ð $ðð ð ðð ð ðð ð ð ð r   r-   c                   ó`   — e Zd ZdZdd„Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )ÚUploadInputManageraJ  Base manager class for handling various types of files for uploads

    This class is typically used for the UploadSubmissionTask class to help
    determine the following:

        * How to determine the size of the file
        * How to determine if a multipart upload is required
        * How to retrieve the body for a PutObject
        * How to retrieve the bodies for a set of UploadParts

    The answers/implementations differ for the various types of file inputs
    that may be accepted. All implementations must subclass and override
    public methods from this class.
    Nc                 ó0   — || _         || _        || _        d S r   )Ú_osutilr0   Ú_bandwidth_limiter)r   Úosutilr2   Úbandwidth_limiters       r   r   zUploadInputManager.__init__~   s   € ØˆŒØ%9ˆÔ"Ø"3ˆÔÐÐr   c                 ó    — t          d¦  «        ‚)a  Determines if the source for the upload is compatible with manager

        :param upload_source: The source for which the upload will pull data
            from.

        :returns: True if the manager can handle the type of source specified
            otherwise returns False.
        zmust implement _is_compatible()©ÚNotImplementedError©ÚclsÚupload_sources     r   Úis_compatiblez UploadInputManager.is_compatibleƒ   s   € õ "Ð"CÑDÔDÐDr   c                 ó    — t          d¦  «        ‚)aÛ  Whether the body it provides are stored in-memory

        :type operation_name: str
        :param operation_name: The name of the client operation that the body
            is being used for. Valid operation_names are ``put_object`` and
            ``upload_part``.

        :rtype: boolean
        :returns: True if the body returned by the manager will be stored in
            memory. False if the manager will not directly store the body in
            memory.
        z%must implement store_body_in_memory()rN   ©r   Úoperation_names     r   Ústores_body_in_memoryz(UploadInputManager.stores_body_in_memory�   s   € õ "Ð"IÑJÔJÐJr   c                 ó    — t          d¦  «        ‚)z¼Provides the transfer size of an upload

        :type transfer_future: s3transfer.futures.TransferFuture
        :param transfer_future: The future associated with upload request
        z&must implement provide_transfer_size()rN   ©r   Útransfer_futures     r   Úprovide_transfer_sizez(UploadInputManager.provide_transfer_sizež   s   € õ "Ð"JÑKÔKÐKr   c                 ó    — t          d¦  «        ‚)aÔ  Determines where a multipart upload is required

        :type transfer_future: s3transfer.futures.TransferFuture
        :param transfer_future: The future associated with upload request

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

        :rtype: boolean
        :returns: True, if the upload should be multipart based on
            configuration and size. False, otherwise.
        z*must implement requires_multipart_upload()rN   ©r   rZ   Úconfigs      r   Úrequires_multipart_uploadz,UploadInputManager.requires_multipart_upload¦   s   € õ "Ð"NÑOÔOÐOr   c                 ó    — t          d¦  «        ‚)aÜ  Returns the body to use for PutObject

        :type transfer_future: s3transfer.futures.TransferFuture
        :param transfer_future: The future associated with upload request

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

        :rtype: s3transfer.utils.ReadFileChunk
        :returns: A ReadFileChunk including all progress callbacks
            associated with the transfer future.
        z$must implement get_put_object_body()rN   rY   s     r   Úget_put_object_bodyz&UploadInputManager.get_put_object_bodyµ   s   € õ "Ð"HÑIÔIÐIr   c                 ó    — t          d¦  «        ‚)a  Yields the part number and body to use for each UploadPart

        :type transfer_future: s3transfer.futures.TransferFuture
        :param transfer_future: The future associated with upload request

        :type chunksize: int
        :param chunksize: The chunksize to use for this upload.

        :rtype: int, s3transfer.utils.ReadFileChunk
        :returns: Yields the part number and the ReadFileChunk including all
            progress callbacks associated with the transfer future for that
            specific yielded part.
        z)must implement yield_upload_part_bodies()rN   )r   rZ   Ú	chunksizes      r   Úyield_upload_part_bodiesz+UploadInputManager.yield_upload_part_bodiesÄ   s   € õ "Ð"MÑNÔNÐNr   c                 ó‚   — t          || j        ¦  «        }| j        r"| j                             || j        d¬¦  «        }|S )NF)Úenabled)r-   r0   rJ   Úget_bandwith_limited_stream)r   r1   s     r   Ú_wrap_fileobjz UploadInputManager._wrap_fileobjÔ   sN   € Ý! '¨4Ô+EÑFÔFˆØÔ"ð 	ØÔ-×IÒIØ˜Ô3¸Uð Jñ ô ˆGð ˆr   c                 óJ   — t          |d¦  «        }|rt          |¦  «        gS g S )NÚprogress)r   r   )r   rZ   r   s      r   Ú_get_progress_callbacksz*UploadInputManager._get_progress_callbacksÜ   s1   € Ý! /°:Ñ>Ô>ˆ	ð ð 	;Ý.¨yÑ9Ô9Ð:Ð:Øˆ	r   c                 ó   — d„ |D ¦   «         S )Nc                 ó   — g | ]	}|j         ‘Œ
S r+   )r%   )Ú.0r'   s     r   ú
<listcomp>z;UploadInputManager._get_close_callbacks.<locals>.<listcomp>æ   s   € ÐMÐMÐM 8�”ÐMÐMÐMr   r+   )r   Úaggregated_progress_callbackss     r   Ú_get_close_callbacksz'UploadInputManager._get_close_callbackså   s   € ØMÐMÐ/LÐMÑMÔMÐMr   r   )r(   r)   r*   rE   r   ÚclassmethodrS   rW   r[   r_   ra   rd   rh   rk   rq   r+   r   r   rG   rG   n   sÜ   € € € € € ðð ð4ð 4ð 4ð 4ð
 ð	Eð 	Eñ „[ð	EðKð Kð KðLð Lð LðPð Pð PðJð Jð JðOð Oð Oð ð ð ðð ð ðNð Nð Nð Nð Nr   rG   c                   ó^   — e Zd ZdZed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ ZdS )ÚUploadFilenameInputManagerzUpload utility for filenamesc                 ó,   — t          |t          ¦  «        S r   )Ú
isinstanceÚstrrP   s     r   rS   z(UploadFilenameInputManager.is_compatibleì   s   € å˜-­Ñ-Ô-Ð-r   c                 ó   — dS )NFr+   rU   s     r   rW   z0UploadFilenameInputManager.stores_body_in_memoryð   s   € Øˆur   c                 óˆ   — |j                              | j                             |j         j        j        ¦  «        ¦  «         d S r   )Úmetar[   rI   Úget_file_sizeÚ	call_argsr1   rY   s     r   r[   z0UploadFilenameInputManager.provide_transfer_sizeó   sC   € ØÔ×2Ò2ØŒL×&Ò& Ô';Ô'EÔ'MÑNÔNñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó,   — |j         j        |j        k    S r   )rz   ÚsizeÚmultipart_thresholdr]   s      r   r_   z4UploadFilenameInputManager.requires_multipart_uploadø   s   € ØÔ#Ô(¨FÔ,FÒFÐFr   c                 ó  — |                       |¦  «        \  }}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|j        j        }| j                             |||||¬¦  «        S )N©r1   Ú
chunk_sizeÚfull_file_sizer   Úclose_callbacks)Ú&_get_put_object_fileobj_with_full_sizerh   rk   rq   rz   r~   rI   Ú#open_file_chunk_reader_from_fileobj)r   rZ   r1   Ú	full_sizer   r„   r~   s          r   ra   z.UploadFilenameInputManager.get_put_object_bodyû   s–   € à!×HÒHØñ
ô 
Ñˆ�ð ×$Ò$ WÑ-Ô-ˆà×0Ò0°ÑAÔAˆ	Ø×3Ò3°IÑ>Ô>ˆØÔ#Ô(ˆð Œ|×?Ò?ØØØ$ØØ+ð @ñ 
ô 
ð 	
r   c              #   ó¨  K  — |j         j        }|                      ||¦  «        }t          d|dz   ¦  «        D ]™}|                      |¦  «        }|                      |¦  «        }||dz
  z  }|                      |j         j        j        |||¬¦  «        \  }	}
|  	                    |	¦  «        }	| j
                             |	||
||¬¦  «        }||fV — Œšd S )Né   )Ú
start_byteÚ	part_sizerƒ   r�   )rz   r~   Ú_get_num_partsÚrangerk   rq   Ú'_get_upload_part_fileobj_with_full_sizer|   r1   rh   rI   r†   )r   rZ   rc   rƒ   Ú	num_partsÚpart_numberr   r„   rŠ   r1   r‡   Úread_file_chunks               r   rd   z3UploadFilenameInputManager.yield_upload_part_bodies  s  è è € Ø(Ô-Ô2ˆØ×'Ò'¨¸ÑCÔCˆ	Ý   I°¡MÑ2Ô2ð 	/ð 	/ˆKØ×4Ò4°_ÑEÔEˆIØ"×7Ò7¸	ÑBÔBˆOØ" k°A¡oÑ6ˆJð "&×!MÒ!MØÔ$Ô.Ô6Ø%Ø#Ø-ð	 "Nñ "ô "ÑˆG�Yð ×(Ò(¨Ñ1Ô1ˆGð #œl×NÒNØØ$Ø(Ø#Ø /ð Oñ ô ˆOð ˜Ð.Ð.Ð.Ð.Ð.ð5	/ð 	/r   c                 ó>   — t          ||| j        j        ¬¦  «        }|S )N)Úopen_function)r   rI   Úopen)r   r1   rŠ   s      r   Ú_get_deferred_open_filez2UploadFilenameInputManager._get_deferred_open_file2  s)   € Ý"Ø�Z¨t¬|Ô/@ð
ñ 
ô 
ˆð ˆr   c                 ól   — |j         j        j        }|j         j        }|                      |d¦  «        |fS )Nr   )rz   r|   r1   r~   r•   ©r   rZ   r1   r~   s       r   r…   zAUploadFilenameInputManager._get_put_object_fileobj_with_full_size8  s6   € Ø!Ô&Ô0Ô8ˆØÔ#Ô(ˆØ×+Ò+¨G°QÑ7Ô7¸Ð=Ð=r   c                 óR   — |d         }|d         }|                       ||¦  «        |fS )NrŠ   rƒ   )r•   )r   r1   rC   rŠ   r‡   s        r   rŽ   zBUploadFilenameInputManager._get_upload_part_fileobj_with_full_size=  s2   € Ø˜LÔ)ˆ
ØÐ+Ô,ˆ	Ø×+Ò+¨G°ZÑ@Ô@À)ÐKÐKr   c                 óx   — t          t          j        |j        j        t          |¦  «        z  ¦  «        ¦  «        S r   )ÚintÚmathÚceilrz   r~   Úfloat)r   rZ   r‹   s      r   rŒ   z)UploadFilenameInputManager._get_num_partsB  s-   € Ý•4”9˜_Ô1Ô6½¸yÑ9IÔ9IÑIÑJÔJÑKÔKÐKr   N)r(   r)   r*   rE   rr   rS   rW   r[   r_   ra   rd   r•   r…   rŽ   rŒ   r+   r   r   rt   rt   é   sÅ   € € € € € Ø&Ð&àð.ð .ñ „[ð.ðð ð ð
ð 
ð 
ð
Gð Gð Gð
ð 
ð 
ð0/ð /ð /ð>ð ð ð>ð >ð >ð
Lð Lð Lð
Lð Lð Lð Lð Lr   rt   c                   ó@   — e Zd ZdZed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	dS )ÚUploadSeekableInputManagerz&Upload utility for an open file objectc                 ó>   — t          |¦  «        ot          |¦  «        S r   r   rP   s     r   rS   z(UploadSeekableInputManager.is_compatibleI  s   € å˜Ñ&Ô&ÐB­8°MÑ+BÔ+BÐBr   c                 ó   — |dk    rdS dS )NÚ
put_objectFTr+   rU   s     r   rW   z0UploadSeekableInputManager.stores_body_in_memoryM  s   € Ø˜\Ò)Ð)Ø�5à�4r   c                 ó  — |j         j        j        }|                     ¦   «         }|                     dd¦  «         |                     ¦   «         }|                     |¦  «         |j                              ||z
  ¦  «         d S )Nr   é   )rz   r|   r1   r<   r8   r[   )r   rZ   r1   Ústart_positionÚend_positions        r   r[   z0UploadSeekableInputManager.provide_transfer_sizeS  s   € Ø!Ô&Ô0Ô8ˆð !Ÿš™œˆØ�Š�Q˜ÑÔÐØ—|’|‘~”~ˆØ�Š�^Ñ$Ô$Ð$ØÔ×2Ò2Ø˜>Ñ)ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ót   — |                      |d         ¦  «        }t          |¦  «        t          |¦  «        fS )Nr‹   )r5   r   Úlen)r   r1   rC   Údatas       r   rŽ   zBUploadSeekableInputManager._get_upload_part_fileobj_with_full_size`  s3   € ð �|Š|˜F ;Ô/Ñ0Ô0ˆõ �t‰}Œ}�c $™iœiÐ'Ð'r   c                 ón   — |j         j        j        }|                     ¦   «         |j         j        z   }||fS r   )rz   r|   r1   r<   r~   r—   s       r   r…   zAUploadSeekableInputManager._get_put_object_fileobj_with_full_sizeo  s4   € Ø!Ô&Ô0Ô8ˆð �|Š|‰~Œ~ Ô 4Ô 9Ñ9ˆØ˜ˆ}Ðr   N)
r(   r)   r*   rE   rr   rS   rW   r[   rŽ   r…   r+   r   r   rŸ   rŸ   F  sr   € € € € € Ø0Ð0àðCð Cñ „[ðCðð ð ð
ð 
ð 
ð(ð (ð (ðð ð ð ð r   rŸ   c                   óf   ‡ — e Zd ZdZdˆ fd„	Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd„Zd„ Zˆ xZS )ÚUploadNonSeekableInputManagerz7Upload utility for a file-like object that cannot seek.Nc                 ó\   •— t          ¦   «                              |||¦  «         d| _        d S )Nr   )Úsuperr   Ú_initial_data)r   rK   r2   rL   Ú	__class__s       €r   r   z&UploadNonSeekableInputManager.__init__z  s/   ø€ Ý‰Œ×Ò˜Ð!5Ð7HÑIÔIÐIØ ˆÔÐÐr   c                 ó    — t          |¦  «        S r   )r   rP   s     r   rS   z+UploadNonSeekableInputManager.is_compatible~  s   € å˜Ñ&Ô&Ð&r   c                 ó   — dS )NTr+   rU   s     r   rW   z3UploadNonSeekableInputManager.stores_body_in_memory‚  s   € Øˆtr   c                 ó   — d S r   r+   rY   s     r   r[   z3UploadNonSeekableInputManager.provide_transfer_size…  s	   € ð 	ˆr   c                 óä   — |j         j        �|j         j        |j        k    S |j         j        j        }|j        }|                      ||d¦  «        | _        t          | j        ¦  «        |k     rdS dS )NFT)rz   r~   r   r|   r1   Ú_readr¯   r¨   )r   rZ   r^   r1   r   s        r   r_   z7UploadNonSeekableInputManager.requires_multipart_uploadŠ  sr   € àÔÔ$Ð0Ø"Ô'Ô,°Ô0JÒJÐJð "Ô&Ô0Ô8ˆØÔ.ˆ	Ø!ŸZšZ¨°¸EÑBÔBˆÔÝˆtÔ!Ñ"Ô" YÒ.Ð.Ø�5à�4r   c                 óì   — |                       |¦  «        }|                      |¦  «        }|j        j        j        }|                      | j        |                     ¦   «         z   ||¦  «        }d | _        |S r   )rk   rq   rz   r|   r1   Ú
_wrap_datar¯   r5   )r   rZ   r   r„   r1   Úbodys         r   ra   z1UploadNonSeekableInputManager.get_put_object_body›  so   € Ø×0Ò0°ÑAÔAˆ	Ø×3Ò3°IÑ>Ô>ˆØ!Ô&Ô0Ô8ˆà�ŠØÔ §¢¡¤Ñ/°¸Oñ
ô 
ˆð "ˆÔØˆr   c              #   ó   K  — |j         j        j        }d}	 |                      |¦  «        }|                      |¦  «        }|dz  }|                      ||¦  «        }|sd S |                      |||¦  «        }d }||fV — Œi)Nr   Tr‰   )rz   r|   r1   rk   rq   rµ   r·   )	r   rZ   rc   Úfile_objectr�   r   r„   Úpart_contentÚpart_objects	            r   rd   z6UploadNonSeekableInputManager.yield_upload_part_bodies©  s¥   è è € Ø%Ô*Ô4Ô<ˆØˆð	+Ø×4Ò4°_ÑEÔEˆIØ"×7Ò7¸	ÑBÔBˆOØ˜1ÑˆKØŸ:š: k°9Ñ=Ô=ˆLØð Ø�ØŸ/š/Ø˜i¨ñô ˆKð
  ˆLØ˜{Ð*Ð*Ð*Ð*ð	+r   Tc                 óX  — t          | j        ¦  «        dk    r|                     |¦  «        S |t          | j        ¦  «        k    r'| j        d|…         }|r| j        |d…         | _        |S |t          | j        ¦  «        z
  }| j        |                     |¦  «        z   }|rd| _        |S )a=  
        Reads a specific amount of data from a stream and returns it. If there
        is any data in initial_data, that will be popped out first.

        :type fileobj: A file-like object that implements read
        :param fileobj: The stream to read from.

        :type amount: int
        :param amount: The number of bytes to read from the stream.

        :type truncate: bool
        :param truncate: Whether or not to truncate initial_data after
            reading from it.

        :return: Generator which generates part bodies from the initial data.
        r   Nr   )r¨   r¯   r5   )r   r1   r6   Útruncater©   Úamount_to_reads         r   rµ   z#UploadNonSeekableInputManager._read½  sÀ   € õ$ ˆtÔ!Ñ"Ô" aÒ'Ð'Ø—<’< Ñ'Ô'Ð'ð •S˜Ô+Ñ,Ô,Ò,Ð,ØÔ% g v gÔ.ˆDð ð AØ%)Ô%7¸¸¸Ô%@�Ô"ØˆKð
  ¥# dÔ&8Ñ"9Ô"9Ñ9ˆØÔ! G§L¢L°Ñ$@Ô$@Ñ@ˆð ð 	%Ø!$ˆDÔØˆr   c                 ó¸   — |                       t          |¦  «        ¦  «        }| j                             |t	          |¦  «        t	          |¦  «        ||¬¦  «        S )a¸  
        Wraps data with the interrupt reader and the file chunk reader.

        :type data: bytes
        :param data: The data to wrap.

        :type callbacks: list
        :param callbacks: The callbacks associated with the transfer future.

        :type close_callbacks: list
        :param close_callbacks: The callbacks to be called when closing the
            wrapper for the data.

        :return: Fully wrapped data.
        r�   )rh   r   rI   r†   r¨   )r   r©   r   r„   r1   s        r   r·   z(UploadNonSeekableInputManager._wrap_dataç  sX   € ð  ×$Ò$¥W¨T¡]¤]Ñ3Ô3ˆØŒ|×?Ò?ØÝ˜4‘y”yÝ˜t™9œ9ØØ+ð @ñ 
ô 
ð 	
r   r   )T)r(   r)   r*   rE   r   rr   rS   rW   r[   r_   ra   rd   rµ   r·   Ú__classcell__)r°   s   @r   r¬   r¬   w  sÍ   ø€ € € € € ØAÐAð!ð !ð !ð !ð !ð !ð ð'ð 'ñ „[ð'ðð ð ðð ð ð
ð ð ð"ð ð ð+ð +ð +ð((ð (ð (ð (ðT
ð 
ð 
ð 
ð 
ð 
ð 
r   r¬   c                   óv   — e Zd ZdZddgZedgz   Zg d¢Zg d¢ez   Zd„ Z		 dd„Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚUploadSubmissionTaskz.Task for submitting tasks to execute an uploadÚChecksumTypeÚMpuObjectSize)ÚChecksumAlgorithmÚSSECustomerKeyÚSSECustomerAlgorithmÚSSECustomerKeyMD5ÚRequestPayerÚExpectedBucketOwner)rÇ   rÈ   rÉ   rÊ   rË   rÄ   rÅ   c                 óÎ   — t           t          t          g}|j        j        j        }|D ]}|                     |¦  «        r|c S Œt          d|› dt          |¦  «        › d�¦  «        ‚)ao  Retrieves a class for managing input for an upload based on file type

        :type transfer_future: s3transfer.futures.TransferFuture
        :param transfer_future: The transfer future for the request

        :rtype: class of UploadInputManager
        :returns: The appropriate class to use for managing a specific type of
            input for uploads.
        zInput z
 of type: z is not supported.)	rt   rŸ   r¬   rz   r|   r1   rS   ÚRuntimeErrorÚtype)r   rZ   Úupload_manager_resolver_chainr1   Úupload_manager_clss        r   Ú_get_upload_input_manager_clsz2UploadSubmissionTask._get_upload_input_manager_cls  sŠ   € õ 'Ý&Ý)ð)
Ð%ð "Ô&Ô0Ô8ˆØ"?ð 	*ð 	*ÐØ!×/Ò/°Ñ8Ô8ð *Ø)Ð)Ð)Ð)ð*åØI�WÐIÐI­¨W©¬ÐIÐIÐIñ
ô 
ð 	
r   Nc                 ó*  —  |                       |¦  «        || j        |¦  «        }|j        j        €|                     |¦  «         |                     ||¦  «        s|                      ||||||¦  «         dS |                      ||||||¦  «         dS )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)rÑ   r0   rz   r~   r[   r_   Ú_submit_upload_requestÚ_submit_multipart_request)r   Úclientr^   rK   Úrequest_executorrZ   rL   Úupload_input_managers           r   Ú_submitzUploadSubmissionTask._submit3  sã   € ð6 
˜t×AÒAØñ 
ô  
à
�$Ô,Ð.?ñ Aô  AÐð
 ÔÔ$Ð,Ø ×6Ò6°ÑGÔGÐGð $×=Ò=Ø˜Vñ
ô 
ð 	ð ×'Ò'ØØØØ ØØ$ñô ð ð ð ð ×*Ò*ØØØØ ØØ$ñô ð ð ð r   c                 ó(  — |j         j        }|                      |j        ¦  «        }|                      |d¦  «        }	| j                             |t          | j        ||                     |¦  «        |j	        |j
        |dœd¬¦  «        |	¬¦  «         d S )Nr¢   )rÕ   r1   ÚbucketÚkeyÚ
extra_argsT)r2   Úmain_kwargsÚis_final©Útag)rz   r|   Ú_extra_put_object_argsrÜ   Ú_get_upload_task_tagr0   ÚsubmitÚPutObjectTaskra   rÚ   rÛ   )
r   rÕ   r^   rK   rÖ   rZ   r×   r|   Úput_object_extra_argsÚput_object_tags
             r   rÓ   z+UploadSubmissionTask._submit_upload_requestl  sË   € ð $Ô(Ô2ˆ	à $× ;Ò ;ØÔ ñ!
ô !
Ðð
 ×2Ò2Ø  ,ñ
ô 
ˆð
 	Ô"×)Ò)ØÝØ%)Ô%?à$Ø3×GÒGØ'ñ ô  ð (Ô.Ø$œ=Ø"7ðð ð ðñ ô ð ð 	*ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó¸  — |j         j        }t          D ]3}||j        v r(d|j        d<   |                     dd¦  «        |j        d<   Œ4|                      |j        ¦  «        }	| j                             |t          | j        ||j	        |j
        |	dœ¬¦  «        ¦  «        }
g }|                      |j        ¦  «        }|                      |d¦  «        }|j         j        }t          ¦   «         }|                     |j        |¦  «        }|                     ||¦  «        }|D ]]\  }}|                     | j                             |t'          | j        |||j	        |j
        ||d	œd
|
i¬¦  «        |¬¦  «        ¦  «         Œ^|                      |j        ¦  «        }| j                             |t+          | j        ||j	        |j
        |dœ|
|dœd¬¦  «        ¦  «         d S )NÚFULL_OBJECTrÄ   ÚChecksumÚ rÆ   )rÕ   rÚ   rÛ   rÜ   )r2   rÝ   Úupload_part)rÕ   r1   rÚ   rÛ   r�   rÜ   Ú	upload_id)r2   rÝ   Úpending_main_kwargsrß   )rì   ÚpartsT)r2   rÝ   rí   rÞ   )rz   r|   r   rÜ   ÚreplaceÚ_extra_create_multipart_argsr0   rã   r
   rÚ   rÛ   Ú_extra_upload_part_argsrâ   r~   r   Úadjust_chunksizeÚmultipart_chunksizerd   ÚappendÚUploadPartTaskÚ_extra_complete_multipart_argsr	   )r   rÕ   r^   rK   rÖ   rZ   r×   r|   ÚchecksumÚcreate_multipart_extra_argsÚcreate_multipart_futureÚpart_futuresÚextra_part_argsÚupload_part_tagr~   Úadjusterrc   Úpart_iteratorr�   r1   Úcomplete_multipart_extra_argss                        r   rÔ   z.UploadSubmissionTask._submit_multipart_request“  s  € ð $Ô(Ô2ˆ	õ 2ð 	ð 	ˆHØ˜9Ô/Ð/Ð/Ø7D�	Ô$ ^Ñ4Ø<D×<LÒ<LØ ñ=ô =�	Ô$Ð%8Ñ9øð '+×&GÒ&GØÔ ñ'
ô '
Ð#ð
 #'Ô"<×"CÒ"CØÝ%Ø%)Ô%?à$Ø'Ô.Ø$œ=Ø"=ð	ð ðñ ô ñ#
ô #
Ðð ˆØ×6Ò6°yÔ7KÑLÔLˆð ×3Ò3Ø  -ñ
ô 
ˆð Ô#Ô(ˆÝ$Ñ&Ô&ˆØ×-Ò-¨fÔ.HÈ$ÑOÔOˆ	Ø,×EÒEØ˜Yñ
ô 
ˆð %2ð 	ð 	Ñ ˆK˜Ø×ÒØÔ*×1Ò1Ø$Ý"Ø-1Ô-Gà&,Ø'.Ø&/Ô&6Ø#,¤=Ø+6Ø*9ð%ð %ð (Ð)@ð-ðñ ô ð (ð! 2ñ ô ñô ð ð ð* )-×(KÒ(KØÔ ñ)
ô )
Ð%ð 	Ô"×)Ò)ØÝ'Ø%)Ô%?à$Ø'Ô.Ø$œ=Ø"?ð	ð ð "9Ø)ð%ð %ð ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó,   — t          || j        ¦  «        S r   )r   ÚUPLOAD_PART_ARGS©r   rÜ   s     r   rñ   z,UploadSubmissionTask._extra_upload_part_argsö  s   € õ ! ¨TÔ-BÑCÔCÐCr   c                 ó,   — t          || j        ¦  «        S r   )r   ÚCOMPLETE_MULTIPART_ARGSr  s     r   rö   z3UploadSubmissionTask._extra_complete_multipart_argsû  s   € Ý  ¨TÔ-IÑJÔJÐJr   c                 ó.   — t          || j        ¬¦  «        S ©N)Úblocklisted_keys)r   ÚCREATE_MULTIPART_BLOCKLISTr  s     r   rð   z1UploadSubmissionTask._extra_create_multipart_argsþ  s!   € Ý Ø¨Ô)Hð
ñ 
ô 
ð 	
r   c                 ó.   — t          || j        ¬¦  «        S r  )r   ÚPUT_OBJECT_BLOCKLISTr  s     r   rá   z+UploadSubmissionTask._extra_put_object_args  s!   € Ý Ø¨Ô)Bð
ñ 
ô 
ð 	
r   c                 óB   — d }|                      |¦  «        rt          }|S r   )rW   r   )r   r×   rV   rà   s       r   râ   z)UploadSubmissionTask._get_upload_task_tag  s'   € ØˆØ×5Ò5°nÑEÔEð 	'Ý&ˆCØˆ
r   r   )r(   r)   r*   rE   r
  r   r  r  r  rÑ   rØ   rÓ   rÔ   rñ   rö   rð   rá   râ   r+   r   r   rÃ   rÃ     sþ   € € € € € Ø8Ð8à*¨OÐ<Ðà!:¸oÐ=NÑ!NÐðð ð Ððð ð ð 	"ñ"Ðð
ð 
ð 
ð> ð7ð 7ð 7ð 7ðr%
ð %
ð %
ðNa
ð a
ð a
ðFDð Dð Dð
Kð Kð Kð
ð 
ð 
ð

ð 
ð 
ð
ð ð ð ð r   rÃ   c                   ó   — e Zd ZdZd„ ZdS )rä   z Task to do a nonmultipart uploadc                 ó^   — |5 } |j         d|||dœ|¤Ž ddd¦  «         dS # 1 swxY w Y   dS )aP  
        :param client: The client to use when calling PutObject
        :param fileobj: The file to upload.
        :param bucket: The name of the bucket to upload to
        :param key: The name of the key to upload to
        :param extra_args: A dictionary of any extra arguments that may be
            used in the upload.
        )ÚBucketÚKeyÚBodyNr+   )r¢   )r   rÕ   r1   rÚ   rÛ   rÜ   r¸   s          r   Ú_mainzPutObjectTask._main  s    € ð ð 	O˜ØˆFÔÐN V°¸4ÐNÐNÀ:ÐNÐNÐNð	Oð 	Oð 	Oñ 	Oô 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oøøøð 	Oð 	Oð 	Oð 	Oð 	Oð 	Os   ƒ"¢&©&N©r(   r)   r*   rE   r  r+   r   r   rä   rä     s.   € € € € € Ø*Ð*ð
Oð 
Oð 
Oð 
Oð 
Or   rä   c                   ó   — e Zd ZdZd„ ZdS )rõ   z+Task to upload a part in a multipart uploadc           
      óÞ   — |5 } |j         d|||||dœ|¤Ž}	ddd¦  «         n# 1 swxY w Y   |	d         }
|
|dœ}d|v r.|d                              ¦   «         }d|› �}||	v r|	|         ||<   |S )aÓ  
        :param client: The client to use when calling PutObject
        :param fileobj: The file to upload.
        :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.

        :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.
        )r  r  ÚUploadIdÚ
PartNumberr  NÚETag)r  r  rÆ   ré   r+   )rë   Úupper)r   rÕ   r1   rÚ   rÛ   rì   r�   rÜ   r¸   ÚresponseÚetagÚpart_metadataÚalgorithm_nameÚchecksum_members                 r   r  zUploadPartTask._main"  sû   € ð, ð 	˜Ø)�vÔ)ð ØØØ"Ø&Øðð ð ðð ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˜ÔˆØ!%°[ÐAÐAˆØ *Ð,Ð,Ø'Ð(;Ô<×BÒBÑDÔDˆNØ9¨Ð9Ð9ˆOØ (Ð*Ð*Ø19¸/Ô1J�˜oÑ.ØÐs   ƒ#£'ª'Nr  r+   r   r   rõ   rõ     s)   € € € € € Ø5Ð5ð&ð &ð &ð &ð &r   rõ   )r›   Úior   Ús3transfer.compatr   r   Ús3transfer.constantsr   Ús3transfer.futuresr   Ús3transfer.tasksr	   r
   r   r   Ús3transfer.utilsr   r   r   r   r   r-   rG   rt   rŸ   r¬   rÃ   rä   rõ   r+   r   r   ú<module>r$     s–  ðð €€€Ø Ð Ð Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø :Ð :Ð :Ð :Ð :Ð :Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ñ ô ð ðB)ð )ð )ð )ð )ñ )ô )ð )ðXxNð xNð xNð xNð xNñ xNô xNð xNðvZLð ZLð ZLð ZLð ZLÐ!3ñ ZLô ZLð ZLðz.ð .ð .ð .ð .Ð!;ñ .ô .ð .ðbG
ð G
ð G
ð G
ð G
Ð$6ñ G
ô G
ð G
ðTKð Kð Kð Kð K˜>ñ Kô Kð Kð\Oð Oð Oð Oð O�Dñ Oô Oð Oð )ð )ð )ð )ð )�Tñ )ô )ð )ð )ð )r   