o
    2jS                     @   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)unquote)AbstractFileSystem)stringify_pathc                       sp   e Zd ZdZdZ fddZedd Zddd	Zd
d Z					dddZ
eddededB fddZ  ZS )DataFileSystemzA 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di | dS )z!No parameters for this filesystemN )super__init__)selfkwargs	__class__r   V/var/www/html/whisper/venv/lib/python3.10/site-packages/fsspec/implementations/data.pyr	      s   zDataFileSystem.__init__c                    sX   t |tr fdd|D S t|}|dr|dd  }|S |dr*|dd  }|S )Nc                    s   g | ]}  |qS r   )_strip_protocol).0pclsr   r   
<listcomp>   s    z2DataFileSystem._strip_protocol.<locals>.<listcomp>zdata://   data:   )
isinstancelistr   
startswith)r   pathr   r   r   r      s   


zDataFileSystem._strip_protocolNc                 K   s@   | dd\}}|drt||| S t| || S )N,   base64)splitendswithr   	b64decoder   encode)r
   r   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|vrt dt| |S )NrzRead only filesystem)
ValueErrorioBytesIOr&   )r
   r   mode
block_size
autocommitcache_optionsr   r   r   r   _open4   s   	zDataFileSystem._openr/   c                 C   s   d|pd dt |   S )zFormat the given data into data-URL syntax

        This version always base64 encodes, even when the data is ascii/url-safe.
        r    z;base64,)r   	b64encodedecode)r   r/   r   r   r   r"   A   s   zDataFileSystem.encode)NN)r1   NTN)N)__name__
__module____qualname____doc__protocolr	   classmethodr   r&   r0   r:   staticmethodbytesstrr"   __classcell__r   r   r   r   r   	   s    

	
"r   )	r   r4   urllib.parser   fsspecr   fsspec.utilsr   r   r   r   r   r   <module>   s    