
    *:jS                     N    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y)    N)unquote)AbstractFileSystem)stringify_pathc                   v     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        |   di | y)z!No parameters for this filesystemN )super__init__)selfkwargs	__class__s     ]/var/www/html/tokenscope/api/venv/lib/python3.12/site-packages/fsspec/implementations/data.pyr   zDataFileSystem.__init__   s    "6"    c                     t        |t              r|D cg c]  }| j                  |       c}S t        |      }|j	                  d      r|dd  }|S |j	                  d      r|dd  }|S c c}w )Nzdata://   data:   )
isinstancelist_strip_protocolr   
startswith)clspathps      r   r   zDataFileSystem._strip_protocol   su    dD!489qC''*99d#??9%8D
 	 __W%8D  :s   A+Nc                     |j                  dd      \  }}|j                  d      rt        j                  |      || S t	        |      j                         || S )N,   base64)splitendswithr    	b64decoder   encode)r   r   startendr   prefr   s          r   cat_filezDataFileSystem.cat_file(   sT    ZZQ'
d=="##D)%44t}##%eC00r   c                     |j                  dd      \  }}| j                  |      }|j                  dd      d   j                  dd      d   }|t        |      d|dS )Nr   r   :;r   file)namesizetypemimetype)r!   r(   len)r   r   r   r'   r-   r   mimes          r   infozDataFileSystem.info.   s^    ZZQ'
d}}T"zz#q!!$**3215c$iTRRr   c                 h    d|vrt        d      t        j                  | j                  |            S )NrzRead only filesystem)
ValueErrorioBytesIOr(   )r   r   mode
block_size
autocommitcache_optionsr   s          r   _openzDataFileSystem._open4   s/     d?344zz$---..r   r2   c                 \    d|xs d dt        j                  |       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   r2   s     r   r$   zDataFileSystem.encodeA   s0     tzrl(6+;+;D+A+H+H+J*KLLr   )NN)rbNTN)N)__name__
__module____qualname____doc__protocolr   classmethodr   r(   r3   r=   staticmethodbytesstrr$   __classcell__)r   s   @r   r   r   	   sp    	 H# 
 
1S / MU M#* M Mr   r   )	r    r7   urllib.parser   fsspecr   fsspec.utilsr   r   r
   r   r   <module>rP      s#     	   % '>M' >Mr   