o
    Ni                     @   sx   d Z ddlZddlmZ ddlmZmZ ddlZddl	Z
ddlZ
ddlmZ ddlmZ G d	d
 d
eZedd ZdS )z	
AWS S3.
    N)cache)OptionalTuple   _split_cloud_path   )SchemeClientc                       s   e Zd Zejejjejjf ZdZ	de
ddf fddZdd Zdee
 fd	d
Zdee fddZdejddfddZdededefddZede
dee
e
f fddZ  ZS )S3Clients3resourcereturnNc                    s8   t  | t|\}}t }|||| _d| _d S )NF)super__init__r
   split_s3_path_get_s3_resource_clientObject	s3_object_loaded)selfr   bucket_names3_paths3_resource	__class__ J/home/ubuntu/.local/lib/python3.10/site-packages/cached_path/schemes/s3.pyr      s
   
zS3Client.__init__c              
   C   sh   | j s2z| j  d| _ W d S  tjjy1 } zt|jd d dkr,td	| j
| d }~ww d S )NTErrorCodei  zfile {} not found)r   r   loadbotocore
exceptionsClientErrorintresponseFileNotFoundErrorformatr   )r   excr   r   r   r      s   
zS3Client.loadc                 C      |    | jjS N)r   r   e_tagr   r   r   r   get_etag*      zS3Client.get_etagc                 C   r(   r)   )r   r   content_lengthr+   r   r   r   get_size.   r-   zS3Client.get_size	temp_filec                 C   s   |    | j| d S r)   )r   r   download_fileobj)r   r0   r   r   r   get_resource2   s   zS3Client.get_resourceindexlengthc                 C   s2   |    | jjd| d|| d  dd  S )Nzbytes=-r   )RangeBody)r   r   getread)r   r3   r4   r   r   r   get_bytes_range6   s   *zS3Client.get_bytes_rangeurlc                 C   s
   t | dS )Nr   r   )r;   r   r   r   r   :   s   
zS3Client.split_s3_path)__name__
__module____qualname__r	   recoverable_errorsr    r!   HTTPClientErrorConnectionErrorschemestrr   r   r   r,   r#   r/   ioBufferedWriterr2   bytesr:   staticmethodr   r   __classcell__r   r   r   r   r
      s    $r
   c                  C   sB   t j } |  d u r| jdtjjtjdd}|S | d}|S )Nr   )signature_version)config)	boto3sessionSessionget_credentialsr   r    clientConfigUNSIGNED)rL   resource_clientr   r   r   r   ?   s   

r   )__doc__rD   	functoolsr   typingr   r   boto3.sessionrK   botocore.clientr    botocore.exceptionscommonr   scheme_clientr	   r
   r   r   r   r   r   <module>   s    .