
    wgr                         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 Zd Z G d	 d
e
      Z G d de	      Zy)    N)Client_get_global_client)Worker)
filesystem)AbstractBufferedFileAbstractFileSysteminfer_storage_optionsc                 T    | 
t               S t        | t              r| S t        |       S N)r   
isinstancer   )clients    `/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/fsspec/implementations/dask.py_get_clientr   
   s+    ~!##	FF	# f~    c                  4    t        t        j                        S r   )boolr   
_instances r   r   
_in_workerr      s    !!""r   c                   p     e Zd ZdZ	 d fd	Zed        Zd Zd Zd Z	d Z
d Zd	 Z	 	 	 	 dd
Zd Z x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.
    c                     t        |   di | |d u |d u z  st        d      || _        || _        d | _        || _        || _        | j                          y )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__s         r   r   zDaskWorkerFileSystem.__init__!   sk     	"6"d
$67-   /, r   c                 J    t        |       }d|v rd|v rd|d    d|d    iS i S )Nhostportr   :r	   )pathsos     r   _get_kwargs_from_urlsz*DaskWorkerFileSystem._get_kwargs_from_urls1   s<    "4(R<FbLFAbj\:;;Ir   c                 
   t               r>d| _        | j                  *t        | j                  fi | j
                  xs i | _        y y d| _        t        | j                        | _        t        j                  |       | _
        y )NTF)r   r   r    r   r   r   r   r   daskdelayedrfsr"   s    r   r!   z&DaskWorkerFileSystem._determine_worker9   sm    <DKww$((-1-@-@-FB 
  DK%dkk2DK||D)DHr   c                     | j                   r | j                  j                  |i | y  | j                  j                  |i |j	                          y r   )r   r    mkdirr/   computer"   argsr#   s      r   r2   zDaskWorkerFileSystem.mkdirE   s@    ;;DGGMM4*6*DHHNND+F+335r   c                     | j                   r | j                  j                  |i | y  | j                  j                  |i |j	                          y r   )r   r    rmr/   r3   r4   s      r   r7   zDaskWorkerFileSystem.rmK   @    ;;DGGJJ''DHHKK((002r   c                     | j                   r | j                  j                  |i | y  | j                  j                  |i |j	                          y r   )r   r    copyr/   r3   r4   s      r   r:   zDaskWorkerFileSystem.copyQ   s@    ;;DGGLL$)&)DHHMM4*6*224r   c                     | j                   r | j                  j                  |i | y  | j                  j                  |i |j	                          y r   )r   r    mvr/   r3   r4   s      r   r<   zDaskWorkerFileSystem.mvW   r8   r   c                     | j                   r | j                  j                  |i |S  | j                  j                  |i |j	                         S r   )r   r    lsr/   r3   r4   s      r   r>   zDaskWorkerFileSystem.ls]   sF    ;;477::t.v..488;;//7799r   c           
          | j                   r" | j                  j                  |f||||d|S t        d| |||||d|S )N)mode
block_size
autocommitcache_options)r    r)   r@   rA   rB   rC   r   )r   r    _openDaskFile)r"   r)   r@   rA   rB   rC   r#   s          r   rD   zDaskWorkerFileSystem._openc   sp     ;; 477==%%+    %%+  r   c                    | j                   rA| j                  ||      5 }|j                  |       |j                  ||z
        cd d d        S | j                  j                  ||||      j                         S # 1 sw Y   y xY wr   )r   rD   seekreadr/   fetch_ranger3   )r"   r)   r@   startendfs         r   rI   z DaskWorkerFileSystem.fetch_range   st    ;;D$' +1uvvcEk*+ + 88''dE3?GGII	+ +s   %A::B)NNNN)rbNTN)__name__
__module____qualname____doc__r   staticmethodr+   r!   r2   r7   r:   r<   r>   rD   rI   __classcell__r$   s   @r   r   r      s_     JN!   
*6353: :Jr   r   c                   4     e Zd Zd fd	ZddZd Zd Z xZS )rE   c                 D    |dk7  rt        d      t        |   di | y )NrM   z1Remote dask files can only be opened in "rb" moder   )r   r   r   )r"   r@   r#   r$   s      r   r   zDaskFile.__init__   s&    4<PQQ"6"r   c                      y r   r   )r"   finals     r   _upload_chunkzDaskFile._upload_chunk   s    r   c                      y)zCreate remote file/uploadNr   r0   s    r   _initiate_uploadzDaskFile._initiate_upload   s    r   c                 f    | j                   j                  | j                  | j                  ||      S )z*Get the specified set of bytes from remote)r    rI   r)   r@   )r"   rJ   rK   s      r   _fetch_rangezDaskFile._fetch_range   s%    ww""499diiDDr   )rM   )F)rN   rO   rP   r   rY   r[   r]   rS   rT   s   @r   rE   rE      s    #
Er   rE   )r-   distributed.clientr   r   distributed.workerr   fsspecr   fsspec.specr   r   fsspec.utilsr
   r   r   r   rE   r   r   r   <module>rc      sB     9 %  @ .#nJ- nJbE# Er   