
    YjS                     V    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e          ZdS )    N)unquote)AbstractFileSystem)stringify_pathc                        e Zd ZdZdZ fdZed             ZddZd Z		 	 	 	 dd
Z
eddededz  fd            Z x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                 :     t                      j        di | dS )z!No parameters for this filesystemN )super__init__)selfkwargs	__class__s     _/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/fsspec/implementations/data.pyr   zDataFileSystem.__init__   s&    ""6"""""    c                      t          |t                    r fd|D             S t          |          }|                    d          r|dd          }n|                    d          r
|dd          }|S )Nc                 :    g | ]}                     |          S r
   )_strip_protocol).0pclss     r   
<listcomp>z2DataFileSystem._strip_protocol.<locals>.<listcomp>   s'    999qC''**999r   zdata://   data:   )
isinstancelistr   
startswith)r   paths   ` r   r   zDataFileSystem._strip_protocol   s    dD!! 	:9999D9999d##??9%% 	8DD__W%% 	8D r   Nc                     |                     dd          \  }}|                    d          rt          j        |          ||         S t	          |                                          ||         S )N,   base64)splitendswithr#   	b64decoder   encode)r   r   startendr   prefr   s          r   cat_filezDataFileSystem.cat_file(   sh    ZZQ''
d=="" 	5#D))%)44t}}##%%eCi00r   c                     |                     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*   r0   r   mimes          r   infozDataFileSystem.info.   so    ZZQ''
d}}T""zz#q!!!$**32215c$iiTRRRr   rbTc                 v    d|vrt          d          t          j        |                     |                    S )NrzRead only filesystem)
ValueErrorioBytesIOr+   )r   r   mode
block_size
autocommitcache_optionsr   s          r   _openzDataFileSystem._open4   s8     d??3444z$----...r   r5   c                 ^    d|pd dt          j        |                                            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   r5   s     r   r'   zDataFileSystem.encodeA   s6     MtzrLL6+;D+A+A+H+H+J+JLLLr   )NN)r7   NTN)N)__name__
__module____qualname____doc__protocolr   classmethodr   r+   r6   rA   staticmethodbytesstrr'   __classcell__)r   s   @r   r   r   	   s        	 	 H# # # # # 
 
 [
1 1 1 1S S S / / / / M MU M#* M M M \M M M M Mr   r   )	r#   r;   urllib.parser   fsspecr   fsspec.utilsr   r   r
   r   r   <module>rS      s     				             % % % % % % ' ' ' ' ' '>M >M >M >M >M' >M >M >M >M >Mr   