
    çgr                         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dS )    N)Client_get_global_client)Worker)
filesystem)AbstractBufferedFileAbstractFileSysteminfer_storage_optionsc                 n    | t                      S t          | t                    r| S t          |           S N)r   
isinstancer   )clients    W/var/www/html/ai-engine/env/lib/python3.11/site-packages/fsspec/implementations/dask.py_get_clientr   
   s8    ~!###	FF	#	#  f~~    c                  4    t          t          j                  S r   )boolr   
_instances r   r   
_in_workerr      s    !"""r   c                   v     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.
    Nc                      t                      j        di | |d u |d u z  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__s         r   r   zDaskWorkerFileSystem.__init__!   s     	""6"""d
$67 	-    /,     r   c                 ^    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   sF    "4((R<<FbLLF::bj::;;Ir   c                     t                      r0d| _        | j         t          | j        fi | j        pi | _        d S d S d| _        t          | j                  | _        t          j	        |           | _
        d S )NTF)r   r   r    r   r   r   r   r   daskdelayedrfsr"   s    r   r!   z&DaskWorkerFileSystem._determine_worker9   s    << 		*DKw$( -1-@-FB  
  DK%dk22DK|D))DHHHr   c                     | j         r | j        j        |i | d S  | j        j        |i |                                 d S r   )r   r    mkdirr/   computer"   argsr#   s      r   r2   zDaskWorkerFileSystem.mkdirE   sV    ; 	6DGM4*6*****DHND+F++3355555r   c                     | j         r | j        j        |i | d S  | j        j        |i |                                 d S r   )r   r    rmr/   r3   r4   s      r   r7   zDaskWorkerFileSystem.rmK   V    ; 	3DGJ''''''DHK(((0022222r   c                     | j         r | j        j        |i | d S  | j        j        |i |                                 d S r   )r   r    copyr/   r3   r4   s      r   r:   zDaskWorkerFileSystem.copyQ   sV    ; 	5DGL$)&)))))DHM4*6**2244444r   c                     | j         r | j        j        |i | d S  | j        j        |i |                                 d S r   )r   r    mvr/   r3   r4   s      r   r<   zDaskWorkerFileSystem.mvW   r8   r   c                 |    | j         r | j        j        |i |S  | j        j        |i |                                S r   )r   r    lsr/   r3   r4   s      r   r>   zDaskWorkerFileSystem.ls]   sJ    ; 	:47:t.v...48;///77999r   rbTc           
      f    | j         r | j        j        |f||||d|S t          d| |||||d|S )N)mode
block_size
autocommitcache_options)r    r)   rA   rB   rC   rD   r   )r   r    _openDaskFile)r"   r)   rA   rB   rC   rD   r#   s          r   rE   zDaskWorkerFileSystem._openc   s     ; 	 47=%%+      %%+    r   c                 (   | j         r]|                     ||          5 }|                    |           |                    ||z
            cd d d            S # 1 swxY w Y   d S | j                            ||||                                          S r   )r   rE   seekreadr/   fetch_ranger3   )r"   r)   rA   startendfs         r   rJ   z DaskWorkerFileSystem.fetch_range   s    ; 	JD$'' +1uvvcEk**+ + + + + + + + + + + + + + + + + + 8''dE3??GGIIIs   -AAA)NNNN)r?   NTN)__name__
__module____qualname____doc__r   staticmethodr+   r!   r2   r7   r:   r<   r>   rE   rJ   __classcell__r$   s   @r   r   r      s          JN! ! ! ! ! !    \
* 
* 
*6 6 63 3 35 5 53 3 3: : :    :J J J J J J Jr   r   c                   4     e Zd Zd fd	ZddZd Zd Z xZS )	rF   r?   c                 d    |dk    rt          d           t                      j        di | d S )Nr?   z1Remote dask files can only be opened in "rb" moder   )r   r   r   )r"   rA   r#   r$   s      r   r   zDaskFile.__init__   s>    4<<PQQQ""6"""""r   Fc                     d S r   r   )r"   finals     r   _upload_chunkzDaskFile._upload_chunk   s    r   c                     dS )zCreate remote file/uploadNr   r0   s    r   _initiate_uploadzDaskFile._initiate_upload   s    r   c                 P    | j                             | j        | j        ||          S )z*Get the specified set of bytes from remote)r    rJ   r)   rA   )r"   rK   rL   s      r   _fetch_rangezDaskFile._fetch_range   s"    w""49diDDDr   )r?   )F)rN   rO   rP   r   rY   r[   r]   rS   rT   s   @r   rF   rF      sv        # # # # # #
     E E E E E E Er   rF   )r-   distributed.clientr   r   distributed.workerr   fsspecr   fsspec.specr   r   fsspec.utilsr
   r   r   r   rF   r   r   r   <module>rc      s    9 9 9 9 9 9 9 9 % % % % % %       @ @ @ @ @ @ @ @ . . . . . .  # # #nJ nJ nJ nJ nJ- nJ nJ nJbE E E E E# E E E E Er   