o
    Ni                     @   sd   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dS )    N)Path)Optional)Beaker)BeakerChecksumFailedError)BeakerDatasetNotFound   )SchemeClientc                       sn   e Zd ZdZejef Zdeddf f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  ZS )BeakerClient)beakerresourcereturnNc              	      s   t  | t|dd }t|jdk rtd| dt C}z|j^}}}|j	
| d| | _	W n tyL   |j^}}|j	
|| _	Y nw d|| _|j	| j	| j| _W d    d S 1 shw   Y  d S )Nz://r      zInvalid beaker resource URL 'z'. Resources should be in the form 'beaker://{user_name}/{dataset_name}/{path_to_file}' or beaker://{dataset_id}/{path_to_file}./)super__init__r   splitlenparts
ValueErrorr   from_envdatasetgetr   joinfilepathget_file_info	file_info)selfr   pathr
   userdataset_namefilepath_parts
dataset_id	__class__ N/home/ubuntu/.local/lib/python3.10/site-packages/cached_path/schemes/beaker.pyr      s"   


"zBeakerClient.__init__c                 C   s   | j jd u rd S t| j jS N)r   digeststrr   r$   r$   r%   get_etag'   s   zBeakerClient.get_etagc                 C   s   | j jS r&   )r   sizer)   r$   r$   r%   get_size*   s   zBeakerClient.get_size	temp_filec                 C   sT   t  }|j| j| jD ]	}|r|| qW d    d S 1 s#w   Y  d S r&   )r   r   r   stream_filer   write)r   r-   r
   chunkr$   r$   r%   get_resource-   s   

"zBeakerClient.get_resource)__name__
__module____qualname__schemer   recoverable_errorsr   r(   r   r   r*   intr,   ioBufferedWriterr1   __classcell__r$   r$   r"   r%   r	      s    r	   )r8   pathlibr   typingr   r
   r   beaker.exceptionsr   r   scheme_clientr   r	   r$   r$   r$   r%   <module>   s    