a
    h                     @   sR   d dl Z d dlZd dlZd dlZd dlZG dd dejZG dd dejjZ	dS )    Nc                       s^   e Zd ZdZdZd fdd	ZdddZdd	d
Zdd ZdddZ	dd Z
dddZ  ZS )JupyterFileSystemz?View of the files as seen by a Jupyter server (notebook or lab))ZjupyterZjlabNc              
      s   d|v rd|du rTzt d|d }W n. tyR } ztd|W Y d}~n
d}~0 0 |ddd }|dd | _t | _	|rd	| | j	j
d
< t jf i | dS )aD  

        Parameters
        ----------
        url : str
            Base URL of the server, like "http://127.0.0.1:8888". May include
            token in the string, which is given by the process when starting up
        tok : str
            If the token is obtained separately, can be given here
        kwargs
        ?Nztoken=([a-z0-9]+)r   zCould not determine token   /z/api/contentsztoken Authorization)refindall
IndexError
ValueErrorsplitrstripurlrequestsSessionsessionheaderssuper__init__)selfr   tokkwargse	__class__ L/var/www/auris/lib/python3.9/site-packages/fsspec/implementations/jupyter.pyr      s     
zJupyterFileSystem.__init__Tc                 K   s   |  |}| j| j d| }|jdkr4t|S |  | }|d dkrZ|d }n|g}|D ]0}|d|d< |d |d dkrdd	|d< qd|r|S d
d |D S )Nr     type	directorycontentpathnameZnotebookfilec                 S   s   g | ]}|d  qS )r!   r   ).0or   r   r   
<listcomp><       z(JupyterFileSystem.ls.<locals>.<listcomp>)	_strip_protocolr   getr   status_codeFileNotFoundErrorraise_for_statusjsonpop)r   r    Zdetailr   routr$   r   r   r   ls)   s"    




zJupyterFileSystem.lsc                 K   sx   |  |}| j| j d| }|jdkr4t|S |  | }|d dkr^|d  }nt	
|d }||| S )Nr   r   formattextr   )r'   r   r(   r   r)   r*   r+   r,   encodebase64	b64decode)r   r    startendr   r.   r/   br   r   r   cat_file>   s    

zJupyterFileSystem.cat_filec                 K   sV   |  |}|ddd |t|t| ddd}| jj| j d| |d d S )Nr   r   r4   r"   )r!   r    sizer   r1   r   r,   )	r'   rsplitlenr4   	b64encodedecoder   putr   )r   r    value_r,   r   r   r   	pipe_fileL   s    
zJupyterFileSystem.pipe_filec                 K   sj   |  |}|r.d|v r.| |ddd d |ddd |d d dd}| jj| j d| |d d S )	Nr   r   r   Tr:   r   )r!   r    r;   r   r   r<   )r'   mkdirr=   r   rA   r   )r   r    Zcreate_parentsr   r,   r   r   r   rE   X   s    
zJupyterFileSystem.mkdirc                 C   s&   |  |}| j| j d|  d S )Nr   )r'   r   deleter   )r   r    r   r   r   _rme   s    
zJupyterFileSystem._rmrbc                 K   s8   |  |}|dkr&| |}t|S t| |ddS d S )NrH   wb)mode)r'   r9   ioBytesIOSimpleFileWriter)r   r    rJ   r   datar   r   r   _openi   s
    


zJupyterFileSystem._open)N)T)NN)T)rH   )__name__
__module____qualname____doc__protocolr   r0   r9   rD   rE   rG   rO   __classcell__r   r   r   r   r   
   s   


r   c                   @   s   e Zd ZdddZdS )rM   Fc                 C   s6   |du rdS | j d | j  }| j| j| dS )zWNever uploads a chunk until file is done

        Not suitable for large files
        Fr   N)bufferseekreadfsrD   r    )r   finalrN   r   r   r   _upload_chunks   s
    
zSimpleFileWriter._upload_chunkN)F)rP   rQ   rR   r[   r   r   r   r   rM   r   s   rM   )
r4   rK   r   r   ZfsspecZAbstractFileSystemr   specZAbstractBufferedFilerM   r   r   r   r   <module>   s   h