U
    xÊ¹jz  ã                   @   sH   d dl Z d dlZd dlmZ d dlmZ d dlmZ G dd„ deƒZdS )é    N)ÚOptional)Úunquote)ÚAbstractFileSystemc                       sZ   e Zd ZdZdZ‡ fdd„Zddd„Zdd	„ Zddd„Ze	de
ee dœdd„ƒZ‡  ZS )ÚDataFileSystemzüA handy decoder for data-URLs

    Example
    -------
    >>> with fsspec.open("data:,Hello%2C%20World%21") as f:
    ...     print(f.read())
    b"Hello, World!"

    See https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs
    Údatac                    s   t ƒ jf |Ž dS )z!No parameters for this filesystemN)ÚsuperÚ__init__)ÚselfÚkwargs©Ú	__class__© úZ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fsspec/implementations/data.pyr      s    zDataFileSystem.__init__Nc                 K   s@   |  dd¡\}}| d¡r,t |¡||… S t|ƒ ¡ ||… S )Nú,é   Úbase64)ÚsplitÚendswithr   Ú	b64decoder   Úencode)r	   ÚpathÚstartÚendr
   Úprefr   r   r   r   Úcat_file   s    
zDataFileSystem.cat_filec                 K   sH   |  dd¡\}}|  |¡}|  dd¡d   dd¡d }|t|ƒd|dœS )Nr   r   ú:ú;r   Úfile)ÚnameÚsizeÚtypeÚmimetype)r   r   Úlen)r	   r   r
   r   r   r   Úmimer   r   r   Úinfo!   s    
zDataFileSystem.infoÚrbTc                 K   s    d|krt dƒ‚t |  |¡¡S )NÚrzRead only filesystem)Ú
ValueErrorÚioÚBytesIOr   )r	   r   ÚmodeÚ
block_sizeZ
autocommitZcache_optionsr
   r   r   r   Ú_open'   s    	zDataFileSystem._open©r   r#   c                 C   s   d|pd› dt  | ¡ ¡ › �S )z†Format the given data into data-URL syntax

        This version always base64 encodes, even when the data is ascii/url-safe.
        zdata:Ú z;base64,)r   Ú	b64encodeÚdecoder-   r   r   r   r   4   s    zDataFileSystem.encode)NN)r%   NTN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úprotocolr   r   r$   r,   ÚstaticmethodÚbytesr   Ústrr   Ú__classcell__r   r   r   r   r   	   s   
	    ú
r   )	r   r(   Útypingr   Úurllib.parser   Zfsspecr   r   r   r   r   r   Ú<module>   s
   