o
    hr                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ dd Zd	d
 ZG dd de
ZG dd de	ZdS )    N)Client_get_global_client)Worker)
filesystem)AbstractBufferedFileAbstractFileSysteminfer_storage_optionsc                 C   s$   | d u rt  S t| tr| S t| S N)r   
isinstancer   )client r   o/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fsspec/implementations/dask.py_get_client
   s
   
r   c                   C   s
   t tjS r
   )boolr   
_instancesr   r   r   r   
_in_worker   s   
r   c                       sz   e Zd ZdZ	d fdd	Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Z				dddZdd Z  ZS )DaskWorkerFileSystema)  View files accessible to a worker as any other remote file-system

    When instances are run on the worker, uses the real filesystem. When
    run on the client, they call the worker to provide information or data.

    **Warning** this implementation is experimental, and read-only for now.
    Nc                    sT   t  jdi | |d u |d u A std|| _|| _d | _|| _|| _|   d S )NzKPlease provide one of filesystem instance (fs) or target_protocol, not bothr   )	super__init__
ValueErrortarget_protocoltarget_optionsworkerr   fs_determine_worker)selfr   r   r   r   kwargs	__class__r   r   r   !   s   zDaskWorkerFileSystem.__init__c                 C   s6   t | }d|v rd|v rd|d  d|d  iS i S )Nhostportr   :r   )pathsor   r   r   _get_kwargs_from_urls1   s   z*DaskWorkerFileSystem._get_kwargs_from_urlsc                 C   sZ   t  rd| _| jd u rt| jfi | jpi | _d S d S d| _t| j| _t	| | _
d S )NTF)r   r   r   r   r   r   r   r   daskdelayedrfsr   r   r   r   r   9   s   
z&DaskWorkerFileSystem._determine_workerc                 O   6   | j r| jj|i | d S | jj|i |  d S r
   )r   r   mkdirr(   computer   argsr   r   r   r   r+   E      zDaskWorkerFileSystem.mkdirc                 O   r*   r
   )r   r   rmr(   r,   r-   r   r   r   r0   K   r/   zDaskWorkerFileSystem.rmc                 O   r*   r
   )r   r   copyr(   r,   r-   r   r   r   r1   Q   r/   zDaskWorkerFileSystem.copyc                 O   r*   r
   )r   r   mvr(   r,   r-   r   r   r   r2   W   r/   zDaskWorkerFileSystem.mvc                 O   s.   | j r| jj|i |S | jj|i | S r
   )r   r   lsr(   r,   r-   r   r   r   r3   ]   s   zDaskWorkerFileSystem.lsrbTc              	   K   s@   | j r| jj|f||||d|S td| |||||d|S )N)mode
block_size
autocommitcache_options)r   r#   r5   r6   r7   r8   r   )r   r   _openDaskFile)r   r#   r5   r6   r7   r8   r   r   r   r   r9   c   s*   		zDaskWorkerFileSystem._openc                 C   sd   | j r'| ||}|| ||| W  d    S 1 s w   Y  d S | j|||| S r
   )r   r9   seekreadr(   fetch_ranger,   )r   r#   r5   startendfr   r   r   r=      s   
$z DaskWorkerFileSystem.fetch_range)NNNN)r4   NTN)__name__
__module____qualname____doc__r   staticmethodr%   r   r+   r0   r1   r2   r3   r9   r=   __classcell__r   r   r   r   r      s$    	
	
r   c                       s8   e Zd Zd fdd	ZdddZdd Zd	d
 Z  ZS )r:   r4   c                    s&   |dkrt dt jdi | d S )Nr4   z1Remote dask files can only be opened in "rb" moder   )r   r   r   )r   r5   r   r   r   r   r      s   zDaskFile.__init__Fc                 C   s   d S r
   r   )r   finalr   r   r   _upload_chunk   s   zDaskFile._upload_chunkc                 C   s   dS )zCreate remote file/uploadNr   r)   r   r   r   _initiate_upload   s   zDaskFile._initiate_uploadc                 C   s   | j | j| j||S )z*Get the specified set of bytes from remote)r   r=   r#   r5   )r   r>   r?   r   r   r   _fetch_range   s   zDaskFile._fetch_range)r4   )F)rA   rB   rC   r   rH   rI   rJ   rF   r   r   r   r   r:      s
    
r:   )r&   distributed.clientr   r   distributed.workerr   fsspecr   fsspec.specr   r   fsspec.utilsr	   r   r   r   r:   r   r   r   r   <module>   s    
q