U
    xÊ¹jr  ã                   @   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 krt ƒ S t| tƒr| S t| ƒS d S ©N)r   Ú
isinstancer   )Úclient© r   úZ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fsspec/implementations/dask.pyÚ_get_client
   s
    
r   c                   C   s
   t tjƒS r
   )Úboolr   Z
_instancesr   r   r   r   Ú
_in_worker   s    r   c                       sp   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                    sP   t ƒ jf |Ž |d k|d kA s&tdƒ‚|| _|| _d | _|| _|| _|  ¡  d S )NzKPlease provide one of filesystem instance (fs) or target_protocol, not both)	Ú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   s:   t | ƒ}d|kr2d|kr2d|d › d|d › �iS i S d S )NÚhostÚportr   ú:r   )ÚpathÚsor   r   r   Ú_get_kwargs_from_urls1   s    z*DaskWorkerFileSystem._get_kwargs_from_urlsc                 C   sP   t ƒ r.d| _| jd krLt| jf| jp&i Ž| _nd| _t| jƒ| _t 	| ¡| _
d S )NTF)r   r   r   r   r   r   r   r   ÚdaskZdelayedÚrfs©r   r   r   r   r   9   s    
ÿÿz&DaskWorkerFileSystem._determine_workerc                 O   s,   | j r| jj||Ž n| jj||Ž ¡  d S r
   )r   r   Úmkdirr&   Úcompute©r   Úargsr   r   r   r   r(   E   s    zDaskWorkerFileSystem.mkdirc                 O   s,   | j r| jj||Ž n| jj||Ž ¡  d S r
   )r   r   Úrmr&   r)   r*   r   r   r   r,   K   s    zDaskWorkerFileSystem.rmc                 O   s,   | j r| jj||Ž n| jj||Ž ¡  d S r
   )r   r   Úcopyr&   r)   r*   r   r   r   r-   Q   s    zDaskWorkerFileSystem.copyc                 O   s,   | j r| jj||Ž n| jj||Ž ¡  d S r
   )r   r   Úmvr&   r)   r*   r   r   r   r.   W   s    zDaskWorkerFileSystem.mvc                 O   s*   | j r| jj||ŽS | jj||Ž ¡ S d S r
   )r   r   Úlsr&   r)   r*   r   r   r   r/   ]   s    zDaskWorkerFileSystem.lsÚrbTc              	   K   sD   | j r$| jj|f||||dœ|—ŽS tf | |||||dœ|—ŽS d S )N)ÚmodeÚ
block_sizeÚ
autocommitÚcache_options)r   r"   r1   r2   r3   r4   )r   r   Ú_openÚDaskFile)r   r"   r1   r2   r3   r4   r   r   r   r   r5   c   s*    	ÿûú	úùzDaskWorkerFileSystem._openc              
   C   sZ   | j r@|  ||¡�&}| |¡ | || ¡W  5 Q R £ S Q R X n| j ||||¡ ¡ S d S r
   )r   r5   ÚseekÚreadr&   Úfetch_ranger)   )r   r"   r1   ÚstartÚendÚfr   r   r   r9   €   s
    
"z DaskWorkerFileSystem.fetch_range)NNNN)r0   NTN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústaticmethodr$   r   r(   r,   r-   r.   r/   r5   r9   Ú__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 )r6   r0   c                    s"   |dkrt dƒ‚tƒ jf |Ž d S )Nr0   z1Remote dask files can only be opened in "rb" mode)r   r   r   )r   r1   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   r9   r"   r1   )r   r:   r;   r   r   r   Ú_fetch_range–   s    zDaskFile._fetch_range)r0   )F)r=   r>   r?   r   rD   rE   rF   rB   r   r   r   r   r6   ‰   s   
r6   )r%   Zdistributed.clientr   r   Zdistributed.workerr   Zfsspecr   Zfsspec.specr   r   Zfsspec.utilsr	   r   r   r   r6   r   r   r   r   Ú<module>   s   
q