HEX
Server: LiteSpeed
System: Linux us-phx-web1284.main-hosting.eu 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: u300739242 (300739242)
PHP: 8.2.30
Disabled: system, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: //opt/alt/python311/lib/python3.11/site-packages/s3transfer/__pycache__/upload.cpython-311.pyc
�

/�;f)w��\�ddlZddlmZddlmZmZddlmZddlm	Z	m
Z
mZmZddl
mZmZmZmZGd�d��ZGd	�d
��ZGd�d��ZGd
�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZdS)�N)�BytesIO��readable�seekable)�IN_MEMORY_UPLOAD_TAG)�CompleteMultipartUploadTask�CreateMultipartUploadTask�SubmissionTask�Task)�ChunksizeAdjuster�DeferredOpenFile�
get_callbacks�get_filtered_dictc�(�eZdZdd�Zd�Zd�Zd�ZdS)�AggregatedProgressCallback�c�0�||_||_d|_dS)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
        rN)�
_callbacks�
_threshold�_bytes_seen)�self�	callbacks�	thresholds   �D/opt/alt/python311/lib/python3.11/site-packages/s3transfer/upload.py�__init__z#AggregatedProgressCallback.__init__!s ��$���#��������c�r�|xj|z
c_|j|jkr|���dSdS�N)rr�_trigger_callbacks)r�bytes_transferreds  r�__call__z#AggregatedProgressCallback.__call__1sG�����-�-�����t��.�.��#�#�%�%�%�%�%�/�.rc�H�|jdkr|���dSdS)z@Flushes out any progress that has not been sent to its callbacksrN)rr�rs r�flushz AggregatedProgressCallback.flush6s0����a����#�#�%�%�%�%�%� �rc�J�|jD]}||j����d|_dS)N)r r)rr)r�callbacks  rrz-AggregatedProgressCallback._trigger_callbacks;s:����	9�	9�H��H�t�'7�8�8�8�8�8�����rN)r)�__name__�
__module__�__qualname__rr!r$r�rrrr sU���������� &�&�&�
&�&�&�
����rrc�@�eZdZdZd�Zdd�Zdd�Zd�Zd�Zd	�Z	d
�Z
dS)
�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�"�||_||_dSr)�_fileobj�_transfer_coordinator)r�fileobj�transfer_coordinators   rrzInterruptReader.__init__Os����
�%9��"�"�"rNc�f�|jjr|jj�|j�|��Sr)r/�	exceptionr.�read)r�amounts  rr4zInterruptReader.readSs4���%�/�	7��,�6�6��}�!�!�&�)�)�)rrc�<�|j�||��dSr)r.�seek)r�where�whences   rr7zInterruptReader.seek]s ���
���5�&�)�)�)�)�)rc�4�|j���Sr)r.�tellr#s rr;zInterruptReader.tell`s���}�!�!�#�#�#rc�8�|j���dSr)r.�closer#s rr=zInterruptReader.closecs���
�������rc��|Srr*r#s r�	__enter__zInterruptReader.__enter__fs���rc�.�|���dSr)r=)r�args�kwargss   r�__exit__zInterruptReader.__exit__is���
�
�����rr)r)r'r(r)�__doc__rr4r7r;r=r?rCr*rrr,r,As���������:�:�:�*�*�*�*�*�*�*�*�$�$�$�����������rr,c�`�eZdZdZd
d�Zed���Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�ZdS)�UploadInputManageraJBase 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�||_||_||_dSr)�_osutilr/�_bandwidth_limiter)r�osutilr1�bandwidth_limiters    rrzUploadInputManager.__init__}s�����%9��"�"3����rc� �td���)aDetermines 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.
        zmust implement _is_compatible()��NotImplementedError��cls�
upload_sources  r�
is_compatiblez UploadInputManager.is_compatible�s��"�"C�D�D�Drc� �td���)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()rM�r�operation_names  r�stores_body_in_memoryz(UploadInputManager.stores_body_in_memory�s��"�"I�J�J�Jrc� �td���)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()rM�r�transfer_futures  r�provide_transfer_sizez(UploadInputManager.provide_transfer_size�s��"�"J�K�K�Krc� �td���)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()rM�rrY�configs   r�requires_multipart_uploadz,UploadInputManager.requires_multipart_upload�s��"�"N�O�O�Orc� �td���)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()rMrXs  r�get_put_object_bodyz&UploadInputManager.get_put_object_body�s��"�"H�I�I�Irc� �td���)aYields 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()rM)rrY�	chunksizes   r�yield_upload_part_bodiesz+UploadInputManager.yield_upload_part_bodies�s��"�"M�N�N�Nrc��t||j��}|jr"|j�||jd���}|S)NF)�enabled)r,r/rI�get_bandwith_limited_stream)rr0s  r�
_wrap_fileobjz UploadInputManager._wrap_fileobj�sN��!�'�4�+E�F�F���"�	��-�I�I���3�U�J���G��rc�J�t|d��}|rt|��gSgS)N�progress)rr)rrYrs   r�_get_progress_callbacksz*UploadInputManager._get_progress_callbacks�s1��!�/�:�>�>�	��	;�.�y�9�9�:�:��	rc��d�|D��S)Nc��g|]	}|j��
Sr*)r$)�.0r&s  r�
<listcomp>z;UploadInputManager._get_close_callbacks.<locals>.<listcomp>�s��M�M�M�8���M�M�Mrr*)r�aggregated_progress_callbackss  r�_get_close_callbacksz'UploadInputManager._get_close_callbacks�s��M�M�/L�M�M�M�Mrr)r'r(r)rDr�classmethodrRrVrZr^r`rcrgrjrpr*rrrFrFms�������
�
�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�NrrFc�^�eZdZdZed���Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�ZdS)
�UploadFilenameInputManagerzUpload utility for filenamesc�,�t|t��Sr)�
isinstance�strrOs  rrRz(UploadFilenameInputManager.is_compatible�s���-��-�-�-rc��dS)NFr*rTs  rrVz0UploadFilenameInputManager.stores_body_in_memory�s���urc��|j�|j�|jjj����dSr)�metarZrH�
get_file_size�	call_argsr0rXs  rrZz0UploadFilenameInputManager.provide_transfer_size�sC����2�2��L�&�&��';�'E�'M�N�N�	
�	
�	
�	
�	
rc�,�|jj|jkSr)ry�size�multipart_thresholdr\s   rr^z4UploadFilenameInputManager.requires_multipart_upload�s���#�(�F�,F�F�Frc��|�|��\}}|�|��}|�|��}|�|��}|jj}|j�|||||���S)N�r0�
chunk_size�full_file_sizer�close_callbacks)�&_get_put_object_fileobj_with_full_sizergrjrpryr}rH�#open_file_chunk_reader_from_fileobj)rrYr0�	full_sizerr�r}s       rr`z.UploadFilenameInputManager.get_put_object_body�s���!�H�H��
�
�����$�$�W�-�-���0�0��A�A�	��3�3�I�>�>���#�(���|�?�?���$��+�@�
�
�	
rc#�K�|jj}|�||��}td|dz��D]�}|�|��}|�|��}||dz
z}|�|jjj|||���\}	}
|�	|	��}	|j
�|	||
||���}||fV���dS)N�)�
start_byte�	part_sizer�r�)ryr}�_get_num_parts�rangerjrp�'_get_upload_part_fileobj_with_full_sizer{r0rgrHr�)rrYrbr��	num_parts�part_numberrr�r�r0r��read_file_chunks            rrcz3UploadFilenameInputManager.yield_upload_part_bodiess����(�-�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	/�	/rc�>�t|||jj���}|S)N)�
open_function)r
rH�open)rr0r�s   r�_get_deferred_open_filez2UploadFilenameInputManager._get_deferred_open_file1s)��"��Z�t�|�/@�
�
�
���rc�l�|jjj}|jj}|�|d��|fS)Nr)ryr{r0r}r��rrYr0r}s    rr�zAUploadFilenameInputManager._get_put_object_fileobj_with_full_size7s6��!�&�0�8���#�(���+�+�G�Q�7�7��=�=rc�R�|d}|d}|�||��|fS)Nr�r�)r�)rr0rBr�r�s     rr�zBUploadFilenameInputManager._get_upload_part_fileobj_with_full_size<s2���L�)�
��+�,�	��+�+�G�Z�@�@�)�K�Krc�x�ttj|jjt|��z����Sr)�int�math�ceilryr}�float)rrYr�s   rr�z)UploadFilenameInputManager._get_num_partsAs-���4�9�_�1�6��y�9I�9I�I�J�J�K�K�KrN)r'r(r)rDrqrRrVrZr^r`rcr�r�r�r�r*rrrsrs�s�������&�&��.�.��[�.����
�
�
�
G�G�G�
�
�
�0/�/�/�>���>�>�>�
L�L�L�
L�L�L�L�Lrrsc�@�eZdZdZed���Zd�Zd�Zd�Zd�Z	dS)�UploadSeekableInputManagerz&Upload utility for an open file objectc�>�t|��ot|��SrrrOs  rrRz(UploadSeekableInputManager.is_compatibleHs���
�&�&�B�8�M�+B�+B�Brc��|dkrdSdS)N�
put_objectFTr*rTs  rrVz0UploadSeekableInputManager.stores_body_in_memoryLs���\�)�)��5��4rc��|jjj}|���}|�dd��|���}|�|��|j�||z
��dS)Nr�)ryr{r0r;r7rZ)rrYr0�start_position�end_positions     rrZz0UploadSeekableInputManager.provide_transfer_sizeRs��!�&�0�8��!���������Q������|�|�~�~�����^�$�$�$���2�2��>�)�	
�	
�	
�	
�	
rc�t�|�|d��}t|��t|��fS)Nr�)r4r�len)rr0rB�datas    rr�zBUploadSeekableInputManager._get_upload_part_fileobj_with_full_size_s3���|�|�F�;�/�0�0���t�}�}�c�$�i�i�'�'rc�n�|jjj}|���|jjz}||fSr)ryr{r0r;r}r�s    rr�zAUploadSeekableInputManager._get_put_object_fileobj_with_full_sizens4��!�&�0�8���|�|�~�~�� 4� 9�9����}�rN)
r'r(r)rDrqrRrVrZr�r�r*rrr�r�Esr������0�0��C�C��[�C����
�
�
�
(�
(�
(�����rr�c�f��eZdZdZd
�fd�	Zed���Zd�Zd�Zd�Z	d�Z
d	�Zdd�Zd�Z
�xZS)�UploadNonSeekableInputManagerz7Upload utility for a file-like object that cannot seek.Nc�\��t���|||��d|_dS)Nr)�superr�
_initial_data)rrJr1rK�	__class__s    �rrz&UploadNonSeekableInputManager.__init__ys/���
������!5�7H�I�I�I� ����rc� �t|��Sr)rrOs  rrRz+UploadNonSeekableInputManager.is_compatible}s���
�&�&�&rc��dS)NTr*rTs  rrVz3UploadNonSeekableInputManager.stores_body_in_memory�s���trc��dSrr*rXs  rrZz3UploadNonSeekableInputManager.provide_transfer_size�s	��	�rc���|jj�|jj|jkS|jjj}|j}|�||d��|_t|j��|krdSdS)NFT)ryr}r~r{r0�_readr�r�)rrYr]r0rs     rr^z7UploadNonSeekableInputManager.requires_multipart_upload�sr����$�0�"�'�,��0J�J�J�"�&�0�8���.�	�!�Z�Z���E�B�B����t�!�"�"�Y�.�.��5��4rc���|�|��}|�|��}|jjj}|�|j|���z||��}d|_|Sr)rjrpryr{r0�
_wrap_datar�r4)rrYrr�r0�bodys      rr`z1UploadNonSeekableInputManager.get_put_object_body�so���0�0��A�A�	��3�3�I�>�>��!�&�0�8������������/��O�
�
��"����rc#�K�|jjj}d}	|�|��}|�|��}|dz
}|�||��}|sdS|�|||��}d}||fV��i)NrTr�)ryr{r0rjrpr�r�)	rrYrb�file_objectr�rr��part_content�part_objects	         rrcz6UploadNonSeekableInputManager.yield_upload_part_bodies�s�����%�*�4�<����
	+��4�4�_�E�E�I�"�7�7�	�B�B�O��1��K��:�:�k�9�=�=�L��
����/�/��i����K�
 �L��{�*�*�*�*�
	+rTc�X�t|j��dkr|�|��S|t|j��kr'|jd|�}|r|j|d�|_|S|t|j��z
}|j|�|��z}|rd|_|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.
        rNr)r�r�r4)rr0r5�truncater��amount_to_reads      rr�z#UploadNonSeekableInputManager._read�s���$�t�!�"�"�a�'�'��<�<��'�'�'��S��+�,�,�,�,��%�g�v�g�.�D��
A�%)�%7����%@��"��K�
 �#�d�&8�"9�"9�9���!�G�L�L��$@�$@�@���	%�!$�D���rc��|�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�)rgrrHr�r�)rr�rr�r0s     rr�z(UploadNonSeekableInputManager._wrap_data�sX�� �$�$�W�T�]�]�3�3���|�?�?���4�y�y��t�9�9��+�@�
�
�	
rr)T)r'r(r)rDrrqrRrVrZr^r`rcr�r��
__classcell__)r�s@rr�r�vs��������A�A�!�!�!�!�!�!��'�'��[�'�������
���"���+�+�+�((�(�(�(�T
�
�
�
�
�
�
rr�c�P�eZdZdZgd�Zgd�Zd�Z	dd�Zd�Zd�Z	d	�Z
d
�Zd�ZdS)
�UploadSubmissionTaskz.Task for submitting tasks to execute an upload)�ChecksumAlgorithm�SSECustomerKey�SSECustomerAlgorithm�SSECustomerKeyMD5�RequestPayer�ExpectedBucketOwner)r�r�r�r�r�c���tttg}|jjj}|D]}|�|��r|cS�td�|t|�������)aoRetrieves 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 {} of type: {} is not supported.)
rsr�r�ryr{r0rR�RuntimeError�format�type)rrY�upload_manager_resolver_chainr0�upload_manager_clss     r�_get_upload_input_manager_clsz2UploadSubmissionTask._get_upload_input_manager_clss���
'�&�)�)
�%�"�&�0�8��"?�	*�	*��!�/�/��8�8�
*�)�)�)�)�
*��4�;�;���g���
�
�
�
�	
rNc�*�|�|��||j|��}|jj�|�|��|�||��s|�||||||��dS|�||||||��dS)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�r/ryr}rZr^�_submit_upload_request�_submit_multipart_request)r�clientr]rJ�request_executorrYrK�upload_input_managers        r�_submitzUploadSubmissionTask._submit.s���6 
�t�A�A�� 
� 
�
�$�,�.?� A� A��
��$�,� �6�6��G�G�G�$�=�=��V�
�
�	�
�'�'���� ��$�

�
�
�
�
�
�*�*���� ��$�

�
�
�
�
rc��|jj}|�|d��}|j�|t|j||�|��|j|j|j	d�d���|���dS)Nr�)r�r0�bucket�key�
extra_argsT)r1�main_kwargs�is_final��tag)
ryr{�_get_upload_task_tagr/�submit�
PutObjectTaskr`r�r�r�)	rr�r]rJr�rYr�r{�put_object_tags	         rr�z+UploadSubmissionTask._submit_upload_requestgs���$�(�2�	��2�2� �,�
�
��
	
�"�)�)���%)�%?�$�3�G�G�'� � �(�.�$�=�"+�"6����
�
�
��	*�	
�	
�	
�	
�	
rc��|jj}|j�|t	|j||j|j|jd������}g}	|�|j��}
|�	|d��}|jj
}t��}
|
�|j
|��}|�||��}|D]]\}}|	�|j�|t!|j|||j|j||
d�d|i���|������^|�|j��}|j�|t%|j||j|j|d�||	d�d	�
����dS)N)r�r�r�r�)r1r��upload_part)r�r0r�r�r�r��	upload_id)r1r��pending_main_kwargsr�)r��partsT)r1r�r�r�)ryr{r/r�r	r�r�r��_extra_upload_part_argsr�r}r�adjust_chunksize�multipart_chunksizerc�append�UploadPartTask�_extra_complete_multipart_argsr)rr�r]rJr�rYr�r{�create_multipart_future�part_futures�extra_part_args�upload_part_tagr}�adjusterrb�
part_iteratorr�r0�complete_multipart_extra_argss                   rr�z.UploadSubmissionTask._submit_multipart_request�s��$�(�2�	�#'�"<�"C�"C��%�%)�%?�$�'�.�$�=�"+�"6�	��
�
�
�#
�#
�����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�)�%�%��

�

�

�	
�	
�	
�	
�	
rc�,�t||j��Sr)r�UPLOAD_PART_ARGS�rr�s  rr�z,UploadSubmissionTask._extra_upload_part_args�s��!��T�-B�C�C�Crc�,�t||j��Sr)r�COMPLETE_MULTIPART_ARGSr�s  rr�z3UploadSubmissionTask._extra_complete_multipart_args�s�� ��T�-I�J�J�Jrc�B�d}|�|��rt}|Sr)rVr)rr�rUr�s    rr�z)UploadSubmissionTask._get_upload_task_tag�s'�����5�5�n�E�E�	'�&�C��
rr)
r'r(r)rDr�r�r�r�r�r�r�r�r�r*rrr�r�s�������8�8���������
�
�
�B�7�7�7�7�r!
�!
�!
�FT
�T
�T
�lD�D�D�
K�K�K�����rr�c��eZdZdZd�ZdS)r�z Task to do a nonmultipart uploadc�^�|5}|jd|||d�|��ddd��dS#1swxYwYdS)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�)rr�r0r�r�r�r�s       r�_mainzPutObjectTask._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�	Os�"�&�&N�r'r(r)rDrr*rrr�r��s.������*�*�
O�
O�
O�
O�
Orr�c��eZdZdZd�ZdS)r�z+Task to upload a part in a multipart uploadc
���|5}|jd|||||d�|��}	ddd��n#1swxYwY|	d}
|
|d�}d|vr.|d���}d|��}
|
|	vr|	|
||
<|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)rrr��Checksumr*)r��upper)rr�r0r�r�r�r�r�r��response�etag�
part_metadata�algorithm_name�checksum_members              rrzUploadPartTask._mains���,�	��)�v�)����"�&�����
��H�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�����!%�[�A�A�
��*�,�,�'�(;�<�B�B�D�D�N�9��9�9�O��(�*�*�19�/�1J�
�o�.��s�#�'�'Nrr*rrr�r��s)������5�5�&�&�&�&�&rr�)r��ior�s3transfer.compatrr�s3transfer.futuresr�s3transfer.tasksrr	r
r�s3transfer.utilsrr
rrrr,rFrsr�r�r�r�r�r*rr�<module>rs�������������0�0�0�0�0�0�0�0�3�3�3�3�3�3���������������������������������B)�)�)�)�)�)�)�)�XxN�xN�xN�xN�xN�xN�xN�xN�vZL�ZL�ZL�ZL�ZL�!3�ZL�ZL�ZL�z.�.�.�.�.�!;�.�.�.�bG
�G
�G
�G
�G
�$6�G
�G
�G
�Tl�l�l�l�l�>�l�l�l�^
O�
O�
O�
O�
O�D�
O�
O�
O� )�)�)�)�)�T�)�)�)�)�)r