
    vKgo                     &   S SK rS SKJr  S SKJr  S SKJrJrJ	r	J
r
  S rS rS rS rS	 rS
 r SS jr SS jr SS jr SS jr SS jr SS jr    SS jr     SS jr    SS jr SS jr SS jr SS jr SS jr SS jr SS jrg)    N)ClientError)utils)ProgressCallbackInvoker
S3TransferTransferConfigcreate_transfer_managerc                    [         R                  " U S[        5        [         R                  " U S[        5        [         R                  " U S[        5        [         R                  " U S[
        5        [         R                  " U S[        5        g 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.13/site-packages/boto3/s3/inject.pyinject_s3_transfer_methodsr      sf    	+]KH	+_mL	+VT:	+-=~N	,.>    c                 T   [         R                  " U S[        5        [         R                  " U S[        5        [         R                  " U S[        5        [         R                  " U S[
        5        [         R                  " U S[        5        [         R                  " U S[        5        g )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                    [         R                  " U S[        5        [         R                  " U S[        5        [         R                  " U S[        5        [         R                  " U S[
        5        [         R                  " U S[        5        g 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                 <    [         R                  " U S[        5        g )Nr   )r   r   object_summary_loadr   s     r   inject_object_summary_methodsr)   A   s    	+V5HIr   c                 `   0 U R                   l         U R                   R                  R                  5       nUS    H(  nUS   U R                  :X  d  M  X@R                   l          g   g! [
         a:  nUR                  R                  S0 5      R                  S5      S:X  d  e  SnAgSnAff = f)zQ
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-30B((B-c                     U R                   R                  R                  U R                  U R                  S9nSU;   a  UR                  S5      US'   X0R                   l        g)zU
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(   ^   sX    
 yy++TXX , H ("#<<8IINr   c           	      t    [        X5       nUR                  UUUUUS9sSSS5        $ ! , (       d  f       g= f)a  Upload a file to an S3 object.

Usage::

    import boto3
    s3 = boto3.client('s3')
    s3.upload_file('/tmp/hello.txt', 'amzn-s3-demo-bucket', '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
    :py:attr:`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   s=    J 
D	!X##  $ 
 
"	!	!   )
7c           	      t    [        X5       nUR                  UUUUUS9sSSS5        $ ! , (       d  f       g= f)a  Download an S3 object to a file.

Usage::

    import boto3
    s3 = boto3.client('s3')
    s3.download_file('amzn-s3-demo-bucket', '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
    :py:attr:`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      s=    J 
D	!X%%  & 
 
"	!	!rN   c           	      f    U R                   R                  R                  UU R                  UUUUS9$ )a  Upload a file to an S3 object.

Usage::

    import boto3
    s3 = boto3.resource('s3')
    s3.Bucket('amzn-s3-demo-bucket').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
    :py:attr:`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           	      f    U R                   R                  R                  U R                  UUUUUS9$ )a  Download an S3 object to a file.

Usage::

    import boto3
    s3 = boto3.resource('s3')
    s3.Bucket('amzn-s3-demo-bucket').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
    :py:attr:`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           	      z    U R                   R                  R                  UU R                  U R                  UUUS9$ )a  Upload a file to an S3 object.

Usage::

    import boto3
    s3 = boto3.resource('s3')
    s3.Object('amzn-s3-demo-bucket', '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
    :py:attr:`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           	      z    U R                   R                  R                  U R                  U R                  UUUUS9$ )a  Download an S3 object to a file.

Usage::

    import boto3
    s3 = boto3.resource('s3')
    s3.Object('amzn-s3-demo-bucket', '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
    :py:attr:`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           
         SnUb  [        U5      /nUn	U	c
  [        5       n	[        R                  " U	5      n
SU
l        [        X
5       nUR                  UUUUUUS9nUR                  5       sSSS5        $ ! , (       d  f       g= f)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': 'amzn-s3-demo-bucket1',
        'Key': 'mykey'
    }
    s3.meta.client.copy(copy_source, 'amzn-s3-demo-bucket2', '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
    :py:attr:`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(	 	2g" #&  
 }} 
3	2	2s   	$A77
Bc           
      h    U R                   R                  R                  UU R                  UUUUUS9$ )a7  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': 'amzn-s3-demo-bucket1',
        'Key': 'mykey'
    }
    bucket = s3.Bucket('amzn-s3-demo-bucket2')
    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
    :py:attr:`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           
      |    U R                   R                  R                  UU R                  U R                  UUUUS9$ )a  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': 'amzn-s3-demo-bucket1',
        'Key': 'mykey'
    }
    bucket = s3.Bucket('amzn-s3-demo-bucket2')
    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
    :py:attr:`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           	         [        US5      (       d  [        S5      eSnUb  [        U5      /nUnUc
  [        5       n[	        X5       n	U	R                  UUUUUS9n
U
R                  5       sSSS5        $ ! , (       d  f       g= f)aW  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, 'amzn-s3-demo-bucket', '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
    :py:attr:`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~!	 	.' #   
 }} 
/	.	.   #A55
Bc           	      f    U R                   R                  R                  UU R                  UUUUS9$ )a6  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('amzn-s3-demo-bucket')

    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
    :py:attr:`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           	      z    U R                   R                  R                  UU R                  U R                  UUUS9$ )a  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('amzn-s3-demo-bucket')
    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
    :py:attr:`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           	         [        US5      (       d  [        S5      eSnUb  [        U5      /nUnUc
  [        5       n[	        X5       n	U	R                  UUUUUS9n
U
R                  5       sSSS5        $ ! , (       d  f       g= f)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('amzn-s3-demo-bucket', '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
    :py:attr:`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~!	 	.'!! # " 
 }} 
/	.	.ro   c           	      f    U R                   R                  R                  U R                  UUUUUS9$ )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('amzn-s3-demo-bucket')

    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
    :py:attr:`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           	      z    U R                   R                  R                  U R                  U R                  UUUUS9$ )a*  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('amzn-s3-demo-bucket')
    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
    :py:attr:`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   