a
    h                     @   sT  d Z ddlmZ ddlZddlmZ dd ZdeiZd)dd	Z	d*ddZ
e	de
d zddlmZ W n eyv   Y n0 e	ded z&ddlmZ d+ddZe	ded W n. ey   ddlmZ e	ddd d Y n0 z(ddlmZ e	ded e	ded W n ey   Y n0 z0ddlZe	dejddd e	dejddd W n ey\   Y n0 G dd deZz"ddlZed e	d eg  W n eeefy   Y n0 zddlZe	d!ejjd! W n ey   Y n0 zdd"lmZ e	d#ed$ W nL eyF   z"ddl Z!d,d%d&Z"e	d#e"d$ W n ey@   Y n0 Y n0 d'd( Z#dS )-z9Helper functions for a standard streaming compression API    )ZipFileN)AbstractBufferedFilec                 K   s   | S N )filemodekwargsr   r   @/var/www/auris/lib/python3.9/site-packages/fsspec/compression.py	noop_file	   s    r
   Fc                 C   s|   t |tr|g}| tv r*|s*td|  |D ]*}|tjjv r.|s.td| d|  dq.|t| < |D ]}| tjj|< qfdS )aA  Register an "inferable" file compression type.

    Registers transparent file compression type for use with fsspec.open.
    Compression can be specified by name in open, or "infer"-ed for any files
    ending with the given extensions.

    Args:
        name: (str) The compression type name. Eg. "gzip".
        callback: A callable of form (infile, mode, **kwargs) -> file-like.
            Accepts an input file-like object, the target mode and kwargs.
            Returns a wrapped file-like object.
        extensions: (str, Iterable[str]) A file extension, or list of file
            extensions for which to infer this compression scheme. Eg. "gz".
        force: (bool) Force re-registration of compression type or extensions.

    Raises:
        ValueError: If name or extensions already registered, and not force.

    z$Duplicate compression registration: z&Duplicate compression file extension: z ()N)
isinstancestrcompr
ValueErrorfsspecutilscompressions)namecallback
extensionsforceextr   r   r	   register_compression   s    
r   rbc                    s|   d|vrJ|pd}t | fddi|  j|dd}|jf fdd	|_|S t |  |d u rf  d } j|fddi|S )	Nrr   r   w)r   c                    s   |  p   S r   )close)closerzr   r	   <lambda><       zunzip.<locals>.<lambda>r   )r   openr   namelist)infiler   filenamer   for   r   r	   unzip7   s    r'   zip)BZ2Filebz2)igzipc                 K   s   t jf | |d|S )N)fileobjr   )r+   Z	IGzipFile)r$   r   r   r   r   r	   isalP   s    r-   gzipgzGzipFilec                 K   s   t f d| i|S )Nr,   r0   )fr   r   r   r	   r    X   r!   r    )LZMAFilelzmaxzT)r   c                       s@   e Zd Z fddZdddZdddZd	d
 Zdd Z  ZS )
SnappyFilec                    sV   dd l }t jf d d|dd dd| || _d|v rH| | _n
| | _d S )Nr   snappybiɚ;)fspathr   sizer   )r7   super__init__stripr$   ZStreamDecompressorcodecZStreamCompressor)selfr$   r   r   r7   	__class__r   r	   r=   m   s    zSnappyFile.__init__Fc                 C   s.   | j d | j| j  }| j| dS )Nr   T)bufferseekr?   Z	add_chunkreadr$   write)r@   finaloutr   r   r	   _upload_chunky   s    zSnappyFile._upload_chunkr   c                 C   s   t dd S )NzSnappyFile is not seekable)NotImplementedError)r@   locwhencer   r   r	   rD      s    zSnappyFile.seekc                 C   s   dS )NFr   )r@   r   r   r	   seekable   s    zSnappyFile.seekablec                 C   s   | j || }| j|S )z*Get the specified set of bytes from remote)r$   rE   r?   
decompress)r@   startenddatar   r   r	   _fetch_range   s    zSnappyFile._fetch_range)F)r   )	__name__
__module____qualname__r=   rI   rD   rM   rR   __classcell__r   r   rA   r	   r6   l   s
   

r6   r!   r7   lz4)ZstdFilezstdZzstc                 C   s4   d|v rt  }|| S t jdd}|| S d S )Nr   
   )level)rY   ZZstdDecompressorZstream_readerZZstdCompressorZstream_writer)r$   r   Zcctxr   r   r	   zstandard_file   s
    
r\   c                   C   s   t tS )z.Return a list of the implemented compressions.)listr   r   r   r   r	   available_compressions   s    r^   )F)r   N)r   )r   )$__doc__zipfiler   Zfsspec.utilsr   Zfsspec.specr   r
   r   r   r'   r*   r)   ImportErrorr-   r+   r.   r1   r4   r3   Zlzmaffir6   r7   compress	NameErrorAttributeErrorZ	lz4.framerW   framer"   Zcompression.zstdrX   Z	zstandardrY   r\   r^   r   r   r   r	   <module>   sr   
%





