
    `2f-n                        d dl Zd dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d Zd Zd Zd Zd	 Zd
 Z	 ddZ	 ddZ	 ddZ	 ddZ	 ddZ	 ddZ	 	 	 	 ddZ 	 	 	 	 ddZ	 	 	 	 ddZ	 ddZ	 ddZ	 ddZ	 ddZ	 ddZ	 ddZy)    N)ClientError)utils)ProgressCallbackInvoker
S3TransferTransferConfigcreate_transfer_managerc                    t        j                  | dt               t        j                  | dt               t        j                  | dt               t        j                  | dt
               t        j                  | dt               y Nupload_filedownload_filecopyupload_fileobjdownload_fileobj)r   inject_attributer   r   r   r   r   class_attributeskwargss     O/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/boto3/s3/inject.pyinject_s3_transfer_methodsr      sf    	+]KH	+_mL	+VT:	+-=~N	,.>    c                 H   t        j                  | dt               t        j                  | dt               t        j                  | dt               t        j                  | dt
               t        j                  | dt               t        j                  | dt               y )Nloadr   r   r   r   r   )r   r   bucket_loadbucket_upload_filebucket_download_filebucket_copybucket_upload_fileobjbucket_download_fileobjr   s     r   inject_bucket_methodsr   $   s    	+V[A	+]<NO	/+? 
+V[A	*,A 
,.Er   c                    t        j                  | dt               t        j                  | dt               t        j                  | dt               t        j                  | dt
               t        j                  | dt               y r
   )r   r   object_upload_fileobject_download_fileobject_copyobject_upload_fileobjobject_download_fileobjr   s     r   inject_object_methodsr&   3   sq    	+]<NO	/+? 
+V[A	*,A 
,.Er   c                 :    t        j                  | dt               y )Nr   )r   r   object_summary_loadr   s     r   inject_object_summary_methodsr)   A   s    	+V5HIr   c                 X   i | j                   _        	 | j                   j                  j                         }|d   D ]'  }|d   | j                  k(  s|| j                   _         y y# t
        $ r9}|j                  j                  di       j                  d      dk(  s Y d}~yd}~ww xY w)z]
    Calls s3.Client.list_buckets() to update the attributes of the Bucket
    resource.
    BucketsNameErrorCodeAccessDeniedN)metadataclientlist_bucketsnamer   responseget)selfargsr   r5   bucket_dataes         r   r   r   E   s     DIIN99##002#I. 	K6"dii/!,			  zz~~gr*..v6.H Is#   >A' A' %A' '	B)0/B$$B)c                     | j                   j                  j                  | j                  | j                        }d|v r|j                  d      |d<   || j                   _        y)za
    Calls s3.Client.head_object to update the attributes of the ObjectSummary
    resource.
    )BucketKeyContentLengthSizeN)r0   r2   head_objectbucket_namekeypopr1   )r7   r8   r   r5   s       r   r(   r(   ^   sZ    
 yy++TXX , H ("#<<8DIINr   c                 r    t        | |      5 }|j                  |||||      cddd       S # 1 sw Y   yxY w)aM  Upload a file to an S3 object.

    Usage::

        import boto3
        s3 = boto3.client('s3')
        s3.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')

    Similar behavior as S3Transfer's upload_file() method, except that
    argument names are capitalized. Detailed examples can be found at
    :ref:`S3Transfer's Usage <ref_s3transfer_usage>`.

    :type Filename: str
    :param Filename: The path to the file to upload.

    :type Bucket: str
    :param Bucket: The name of the bucket to upload to.

    :type Key: str
    :param Key: The name of the key to upload to.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed upload arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the upload.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        transfer.
    )filenamebucketrB   
extra_argscallbackN)r   r   )r7   Filenamer<   r=   	ExtraArgsCallbackConfigtransfers           r   r   r   k   sH    J 
D&	! 
X##  $ 

 
 
   -6c                 r    t        | |      5 }|j                  |||||      cddd       S # 1 sw Y   yxY w)ap  Download an S3 object to a file.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

    Similar behavior as S3Transfer's download_file() method,
    except that parameters are capitalized. Detailed examples can be found at
    :ref:`S3Transfer's Usage <ref_s3transfer_usage>`.

    :type Bucket: str
    :param Bucket: The name of the bucket to download from.

    :type Key: str
    :param Key: The name of the key to download from.

    :type Filename: str
    :param Filename: The path to the file to download to.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the download.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        transfer.
    )rF   rB   rE   rG   rH   N)r   r   )r7   r<   r=   rI   rJ   rK   rL   rM   s           r   r   r      sH    J 
D&	! 
X%%  & 

 
 
rN   c                 l    | j                   j                  j                  || j                  ||||      S )a  Upload a file to an S3 object.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        s3.Bucket('mybucket').upload_file('/tmp/hello.txt', 'hello.txt')

    Similar behavior as S3Transfer's upload_file() method,
    except that parameters are capitalized. Detailed examples can be found at
    :ref:`S3Transfer's Usage <ref_s3transfer_usage>`.

    :type Filename: str
    :param Filename: The path to the file to upload.

    :type Key: str
    :param Key: The name of the key to upload to.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed upload arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the upload.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        transfer.
    rI   r<   r=   rJ   rK   rL   )r0   r2   r   r4   )r7   rI   r=   rJ   rK   rL   s         r   r   r      s=    D 99''yy (  r   c                 l    | j                   j                  j                  | j                  |||||      S )a  Download an S3 object to a file.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        s3.Bucket('mybucket').download_file('hello.txt', '/tmp/hello.txt')

    Similar behavior as S3Transfer's download_file() method,
    except that parameters are capitalized. Detailed examples can be found at
    :ref:`S3Transfer's Usage <ref_s3transfer_usage>`.

    :type Key: str
    :param Key: The name of the key to download from.

    :type Filename: str
    :param Filename: The path to the file to download to.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the download.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        transfer.
    r<   r=   rI   rJ   rK   rL   )r0   r2   r   r4   )r7   r=   rI   rJ   rK   rL   s         r   r   r      s=    D 99))yy *  r   c                     | j                   j                  j                  || j                  | j                  |||      S )a  Upload a file to an S3 object.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        s3.Object('mybucket', 'hello.txt').upload_file('/tmp/hello.txt')

    Similar behavior as S3Transfer's upload_file() method,
    except that parameters are capitalized. Detailed examples can be found at
    :ref:`S3Transfer's Usage <ref_s3transfer_usage>`.

    :type Filename: str
    :param Filename: The path to the file to upload.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed upload arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the upload.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        transfer.
    rQ   )r0   r2   r   rA   rB   r7   rI   rJ   rK   rL   s        r   r!   r!   !  sB    > 99''HH (  r   c                     | j                   j                  j                  | j                  | j                  ||||      S )a  Download an S3 object to a file.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        s3.Object('mybucket', 'hello.txt').download_file('/tmp/hello.txt')

    Similar behavior as S3Transfer's download_file() method,
    except that parameters are capitalized. Detailed examples can be found at
    :ref:`S3Transfer's Usage <ref_s3transfer_usage>`.

    :type Filename: str
    :param Filename: The path to the file to download to.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the download.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        transfer.
    rS   )r0   r2   r   rA   rB   rU   s        r   r"   r"   J  sB    > 99))HH *  r   c           	         d}|t        |      g}|}	|	
t               }	t        j                  |	      }
d|
_        t        | |
      5 }|j                  ||||||      }|j                         cddd       S # 1 sw Y   yxY w)a  Copy an object from one S3 location to another.

    This is a managed transfer which will perform a multipart copy in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        copy_source = {
            'Bucket': 'mybucket',
            'Key': 'mykey'
        }
        s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')

    :type CopySource: dict
    :param CopySource: The name of the source bucket, key name of the
        source object, and optional version ID of the source object. The
        dictionary format is:
        ``{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}``. Note
        that the ``VersionId`` key is optional and may be omitted.

    :type Bucket: str
    :param Bucket: The name of the bucket to copy to

    :type Key: str
    :param Key: The name of the key to copy to

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the copy.

    :type SourceClient: botocore or boto3 Client
    :param SourceClient: The client to be used for operation that
        may happen at the source object. For example, this client is
        used for the head_object that determines the size of the copy.
        If no client is provided, the current client is used as the client
        for the source object.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        copy.
    Nclassic)copy_sourcerF   rB   rG   subscriberssource_client)r   r   python_copyr   preferred_transfer_clientr   result)r7   
CopySourcer<   r=   rJ   rK   SourceClientrL   rZ   config
new_configmanagerfutures                r   r   r   s  s    t K.x89F~! !!&)J+4J(	 z	2 	g" #&  
 }}	 	 	s   'A88Bc           	      n    | j                   j                  j                  || j                  |||||      S )a  Copy an object from one S3 location to an object in this bucket.

    This is a managed transfer which will perform a multipart copy in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        copy_source = {
            'Bucket': 'mybucket',
            'Key': 'mykey'
        }
        bucket = s3.Bucket('otherbucket')
        bucket.copy(copy_source, 'otherkey')

    :type CopySource: dict
    :param CopySource: The name of the source bucket, key name of the
        source object, and optional version ID of the source object. The
        dictionary format is:
        ``{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}``. Note
        that the ``VersionId`` key is optional and may be omitted.

    :type Key: str
    :param Key: The name of the key to copy to

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the copy.

    :type SourceClient: botocore or boto3 Client
    :param SourceClient: The client to be used for operation that
        may happen at the source object. For example, this client is
        used for the head_object that determines the size of the copy.
        If no client is provided, the current client is used as the client
        for the source object.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        copy.
    r_   r<   r=   rJ   rK   r`   rL   )r0   r2   r   r4   )r7   r_   r=   rJ   rK   r`   rL   s          r   r   r     s@    n 99  yy! !  r   c           	          | j                   j                  j                  || j                  | j                  ||||      S )ap  Copy an object from one S3 location to this object.

    This is a managed transfer which will perform a multipart copy in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        copy_source = {
            'Bucket': 'mybucket',
            'Key': 'mykey'
        }
        bucket = s3.Bucket('otherbucket')
        obj = bucket.Object('otherkey')
        obj.copy(copy_source)

    :type CopySource: dict
    :param CopySource: The name of the source bucket, key name of the
        source object, and optional version ID of the source object. The
        dictionary format is:
        ``{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}``. Note
        that the ``VersionId`` key is optional and may be omitted.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the copy.

    :type SourceClient: botocore or boto3 Client
    :param SourceClient: The client to be used for operation that
        may happen at the source object. For example, this client is
        used for the head_object that determines the size of the copy.
        If no client is provided, the current client is used as the client
        for the source object.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        copy.
    rf   )r0   r2   r   rA   rB   )r7   r_   rJ   rK   r`   rL   s         r   r#   r#     sF    h 99  HH! !  r   c                     t        |d      st        d      d}|t        |      g}|}|
t               }t	        | |      5 }	|	j                  |||||      }
|
j                         cddd       S # 1 sw Y   yxY w)a  Upload a file-like object to S3.

    The file-like object must be in binary mode.

    This is a managed transfer which will perform a multipart upload in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.client('s3')

        with open('filename', 'rb') as data:
            s3.upload_fileobj(data, 'mybucket', 'mykey')

    :type Fileobj: a file-like object
    :param Fileobj: A file-like object to upload. At a minimum, it must
        implement the `read` method, and must return bytes.

    :type Bucket: str
    :param Bucket: The name of the bucket to upload to.

    :type Key: str
    :param Key: The name of the key to upload to.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed upload arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the upload.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        upload.
    readzFileobj must implement readN)fileobjrF   rB   rG   rZ   )hasattr
ValueErrorr   r   r   uploadr^   )r7   Fileobjr<   r=   rJ   rK   rL   rZ   ra   rc   rd   s              r   r   r   F  s    R 7F#677K.x89F~!	 v	. ' #   
 }}     &A22A;c                 l    | j                   j                  j                  || j                  ||||      S )a  Upload a file-like object to this bucket.

    The file-like object must be in binary mode.

    This is a managed transfer which will perform a multipart upload in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        bucket = s3.Bucket('mybucket')

        with open('filename', 'rb') as data:
            bucket.upload_fileobj(data, 'mykey')

    :type Fileobj: a file-like object
    :param Fileobj: A file-like object to upload. At a minimum, it must
        implement the `read` method, and must return bytes.

    :type Key: str
    :param Key: The name of the key to upload to.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed upload arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the upload.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        upload.
    rn   r<   r=   rJ   rK   rL   )r0   r2   r   r4   )r7   rn   r=   rJ   rK   rL   s         r   r   r     s=    N 99**yy +  r   c                     | j                   j                  j                  || j                  | j                  |||      S )aW  Upload a file-like object to this object.

    The file-like object must be in binary mode.

    This is a managed transfer which will perform a multipart upload in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        bucket = s3.Bucket('mybucket')
        obj = bucket.Object('mykey')

        with open('filename', 'rb') as data:
            obj.upload_fileobj(data)

    :type Fileobj: a file-like object
    :param Fileobj: A file-like object to upload. At a minimum, it must
        implement the `read` method, and must return bytes.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed upload arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the upload.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        upload.
    rq   )r0   r2   r   rA   rB   r7   rn   rJ   rK   rL   s        r   r$   r$     sC    J 99**HH +  r   c                     t        |d      st        d      d}|t        |      g}|}|
t               }t	        | |      5 }	|	j                  |||||      }
|
j                         cddd       S # 1 sw Y   yxY w)a  Download an object from S3 to a file-like object.

    The file-like object must be in binary mode.

    This is a managed transfer which will perform a multipart download in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.client('s3')

        with open('filename', 'wb') as data:
            s3.download_fileobj('mybucket', 'mykey', data)

    :type Bucket: str
    :param Bucket: The name of the bucket to download from.

    :type Key: str
    :param Key: The name of the key to download from.

    :type Fileobj: a file-like object
    :param Fileobj: A file-like object to download into. At a minimum, it must
        implement the `write` method and must accept bytes.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the download.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        download.
    writezFileobj must implement writeN)rF   rB   rj   rG   rZ   )rk   rl   r   r   r   downloadr^   )r7   r<   r=   rn   rJ   rK   rL   rZ   ra   rc   rd   s              r   r   r     s    R 7G$788K.x89F~!	 v	. '!! # " 
 }}  ro   c                 l    | j                   j                  j                  | j                  |||||      S )a  Download an object from this bucket to a file-like-object.

    The file-like object must be in binary mode.

    This is a managed transfer which will perform a multipart download in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        bucket = s3.Bucket('mybucket')

        with open('filename', 'wb') as data:
            bucket.download_fileobj('mykey', data)

    :type Fileobj: a file-like object
    :param Fileobj: A file-like object to download into. At a minimum, it must
        implement the `write` method and must accept bytes.

    :type Key: str
    :param Key: The name of the key to download from.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the download.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        download.
    r<   r=   rn   rJ   rK   rL   )r0   r2   r   r4   )r7   r=   rn   rJ   rK   rL   s         r   r   r   $  s=    N 99,,yy -  r   c                     | j                   j                  j                  | j                  | j                  ||||      S )at  Download this object from S3 to a file-like object.

    The file-like object must be in binary mode.

    This is a managed transfer which will perform a multipart download in
    multiple threads if necessary.

    Usage::

        import boto3
        s3 = boto3.resource('s3')
        bucket = s3.Bucket('mybucket')
        obj = bucket.Object('mykey')

        with open('filename', 'wb') as data:
            obj.download_fileobj(data)

    :type Fileobj: a file-like object
    :param Fileobj: A file-like object to download into. At a minimum, it must
        implement the `write` method and must accept bytes.

    :type ExtraArgs: dict
    :param ExtraArgs: Extra arguments that may be passed to the
        client operation. For allowed download arguments see
        boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS.

    :type Callback: function
    :param Callback: A method which takes a number of bytes transferred to
        be periodically called during the download.

    :type Config: boto3.s3.transfer.TransferConfig
    :param Config: The transfer configuration to be used when performing the
        download.
    rx   )r0   r2   r   rA   rB   rs   s        r   r%   r%   U  sC    J 99,,HH -  r   )NNN)NNNN)r   r\   botocore.exceptionsr   boto3r   boto3.s3.transferr   r   r   r   r   r   r&   r)   r   r(   r   r   r   r   r!   r"   r   r#   r   r   r$   r   r   r%    r   r   <module>r~      s    +  J2
 HL,
` HL,
` @D)Z @D)Z ;?&T ;?&\ Ol ?J <@ GK<@ ?C.d :>,` GK<@ ?C.d :>,r   