o
    QDi                     @  s   d dl mZ d dlZd dlmZ d dlmZ ddlmZ ddl	m	Z	 ddl
mZ d	d
lmZ G dd deZG dd dejZdS )    )annotationsN)Any)urlparse   )types)platform)Loader   )
AwsControlc                   @  s&   e Zd ZdZdZdd Zd
ddZd	S )S3LoaderzS3 loader implementation.Tc                 C  sV   t | jj}t| jjdd}tjjd|jd}|j	|j
|jdd  d}t|}|S )NFallow_fragmentss3endpoint_url   bucket_namekey)r
   from_dialectresourcedialectr   normpathr   boto3s3_endpoint_urlObjectnetlocpathS3ByteStream)selfcontrolpartsclientobjectbyte_stream r%   \/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/schemes/aws/loaders/s3.pyread_byte_stream_create   s   z S3Loader.read_byte_stream_creater$   types.IByteStreamc                 C  sZ   t | jj}t| jjdd}tjjd|jd}|j	|j
|jdd  d}|j|d d S )NFr   r   r   r   r   )Body)r
   r   r   r   r   r   r   r   r   r   r   r   put)r   r$   r    r!   r"   r#   r%   r%   r&   write_byte_stream_save   s
   zS3Loader.write_byte_stream_saveN)r$   r(   )__name__
__module____qualname____doc__remoter'   r+   r%   r%   r%   r&   r      s
    
r   c                   @  sj   e Zd ZdddZdd Zedd Zd	d
 Zdd Zdd Z	e
jfdddZddddZddddZdS )r   r#   r   c                 C  s   || _ d| _d S )Nr   )r#   position)r   r#   r%   r%   r&   __init__+   s   
zS3ByteStream.__init__c                 C  s   dt | j| jf S )Nz<%s object=%r>)typer,   r#   r   r%   r%   r&   __repr__/   s   zS3ByteStream.__repr__c                 C  s   | j jS N)r#   content_lengthr4   r%   r%   r&   size2   s   zS3ByteStream.sizec                 C     dS NTr%   r4   r%   r%   r&   readable6      zS3ByteStream.readablec                 C  r9   r:   r%   r4   r%   r%   r&   seekable9   r<   zS3ByteStream.seekablec                 C  s   | j S r6   )r1   r4   r%   r%   r&   tell<   s   zS3ByteStream.telloffsetintwhencec                 C  sj   |t jkr|| _| jS |t jkr|  j|7  _| jS |t jkr(| j| | _| jS td|t jt jt jf )Nz)invalid whence (%r, should be %d, %d, %d))ioSEEK_SETr1   SEEK_CURSEEK_ENDr8   
ValueError)r   r?   rA   r%   r%   r&   seek?   s   

	
zS3ByteStream.seekr8   c                 C  s   |dkr| j | jkrdS d| j  }| jdtjd n| j | }|| jkr(|  S d| j |d f }| j|tjd | jj|dd	  S )
NrH       z	bytes=%d-r   )r?   rA   zbytes=%d-%dr   )Ranger)   )	r1   r8   rG   rB   rE   readrD   r#   get)r   r8   range_headernew_positionr%   r%   r&   rK   N   s   


zS3ByteStream.readc                 C  s
   |  |S r6   )rK   )r   r8   r%   r%   r&   read1`   s   
zS3ByteStream.read1N)r#   r   )r?   r@   rA   r@   )rH   )r8   r@   )r,   r-   r.   r2   r5   propertyr8   r;   r=   r>   rB   rC   rG   rK   rO   r%   r%   r%   r&   r   *   s    

r   )
__future__r   rB   typingr   urllib.parser    r   r   systemr   r    r
   r   	RawIOBaser   r%   r%   r%   r&   <module>   s    