U
    ,jgR	                     @   s,   d dl mZ d dlmZ G dd deZdS )    )AbstractFileSystem)tokenizec                   @   s>   e Zd ZdZdd ZeZdd Zdd Zdd	 ZdddZ	dS )AbstractArchiveFileSystema(  
    A generic superclass for implementing Archive-based filesystems.

    Currently, it is shared amongst
    :class:`~fsspec.implementations.zip.ZipFileSystem`,
    :class:`~fsspec.implementations.libarchive.LibArchiveFileSystem` and
    :class:`~fsspec.implementations.tar.TarFileSystem`.
    c                 C   s   dt | j dt|  dS )Nz<Archive-like object z at >)type__name__idself r   2/tmp/pip-unpacked-wheel-ojcr9xjz/fsspec/archive.py__str__   s    z!AbstractArchiveFileSystem.__str__c                 C   s   t || j| jS N)r   foprotocol)r
   pathr   r   r   ukey   s    zAbstractArchiveFileSystem.ukeyc                    s:   t |dkrt S  fdd|D  jh }| |B S )zReturns *all* directory names for each path in paths, including intermediate
        ones.

        Parameters
        ----------
        paths: Iterable of path strings
        r   c                    s   h | ]}  |qS r   )_parent).0r   r	   r   r   	<setcomp>"   s     z:AbstractArchiveFileSystem._all_dirnames.<locals>.<setcomp>)lensetZroot_marker_all_dirnames)r
   pathsdirnamesr   r	   r   r      s    z'AbstractArchiveFileSystem._all_dirnamesc                 K   sh   |    | |}|dkr,| jr,ddddS || jkr@| j| S |d | jkr\| j|d  S t|d S )N>    /r   	directoryr   )namer   sizer   )	_get_dirsZ_strip_protocol	dir_cacheFileNotFoundError)r
   r   kwargsr   r   r   info%   s    


zAbstractArchiveFileSystem.infoTc           
   	   K   s   |    i }| j D ]\}}|d}d|krB|ddd }nd}||dkr^|||< qtdd t|ddg|dd D r|dddd }||kr|ddd}	|	||< q|rt	|
 d	d
 d}	|	S t	|S d S )Nr      r   r   c                 s   s   | ]\}}||kV  qd S r   r   )r   abr   r   r   	<genexpr><   s   z/AbstractArchiveFileSystem.ls.<locals>.<genexpr>r   )r   r   r   c                 S   s   | d S )Nr   r   )_r   r   r   <lambda>F       z.AbstractArchiveFileSystem.ls.<locals>.<lambda>)key)r    r!   itemsrstriprsplitallzipsplitstripsortedvalues)
r
   r   Zdetailr#   r   pfrootZppathoutr   r   r   ls1   s(    

 
zAbstractArchiveFileSystem.lsN)T)
r   
__module____qualname____doc__r   __repr__r   r   r$   r:   r   r   r   r   r      s   	r   N)Zfsspecr   Zfsspec.utilsr   r   r   r   r   r   <module>   s   