U
    ¬9%eÆ	  ã                   @  sŠ   d dl mZ d dlZd dlZd dlmZ d dlmZ erDd dlmZ G dd„ dej	ƒZ
G dd	„ d	e
ƒZG d
d„ de
ƒZdddœdd„ZdS )é    )ÚannotationsN)ÚTYPE_CHECKING)Úmake_path_posix)ÚAnyc                   @  sD   e Zd ZdZejdddœdd„ƒZdddœd	d
„Zddœdd„ZdS )ÚAbstractCacheMapperzUAbstract super-class for mappers from remote URLs to local cached
    basenames.
    Ústr©ÚpathÚreturnc                 C  s   d S ©N© ©Úselfr	   r   r   úb/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/fsspec/implementations/cache_mapper.pyÚ__call__   s    zAbstractCacheMapper.__call__r   Úbool©Úotherr
   c                 C  s   t |t| ƒƒS r   )Ú
isinstanceÚtype©r   r   r   r   r   Ú__eq__   s    zAbstractCacheMapper.__eq__Úint©r
   c                 C  s   t t| ƒƒS r   )Úhashr   ©r   r   r   r   Ú__hash__   s    zAbstractCacheMapper.__hash__N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚabcÚabstractmethodr   r   r   r   r   r   r   r      s
   r   c                      sZ   e Zd ZdZdddœdd„Zdddœd	d
„Zdddœ‡ fdd„Zddœ‡ fdd„Z‡  ZS )ÚBasenameCacheMapperzóCache mapper that uses the basename of the remote URL and a fixed number
    of directory levels above this.

    The default is zero directory levels, meaning different paths with the same
    basename will have the same cached basename.
    r   r   )Údirectory_levelsc                 C  s    |dk rt dƒ‚|| _d| _d S )Nr   z>BasenameCacheMapper requires zero or positive directory_levelsz_@_)Ú
ValueErrorr$   Ú
_separator)r   r$   r   r   r   Ú__init__)   s    ÿzBasenameCacheMapper.__init__r   r   c                 C  s6   t |ƒ}| d| jd ¡^}}|r.| j |¡S |S d S )Nú/é   )r   Úrsplitr$   r&   Újoin)r   r	   ÚprefixÚbitsr   r   r   r   3   s
    zBasenameCacheMapper.__call__r   r   r   c                   s   t ƒ  |¡o| j|jkS r   )Úsuperr   r$   r   ©Ú	__class__r   r   r   ;   s    zBasenameCacheMapper.__eq__r   c                   s   t ƒ  ¡ t| jƒA S r   )r.   r   r   r$   r   r/   r   r   r   >   s    zBasenameCacheMapper.__hash__)r   )	r   r   r   r    r'   r   r   r   Ú__classcell__r   r   r/   r   r#   !   s
   
r#   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚHashCacheMapperz0Cache mapper that uses a hash of the remote URL.r   r   c                 C  s   t  | ¡ ¡ ¡ S r   )ÚhashlibÚsha256ÚencodeÚ	hexdigestr   r   r   r   r   E   s    zHashCacheMapper.__call__N)r   r   r   r    r   r   r   r   r   r2   B   s   r2   r   )Ú
same_namesr
   c                 C  s   | r
t ƒ S tƒ S dS )zŒFactory method to create cache mapper for backward compatibility with
    ``CachingFileSystem`` constructor using ``same_names`` kwarg.
    N)r#   r2   )r7   r   r   r   Úcreate_cache_mapperI   s    r8   )Ú
__future__r   r!   r3   Útypingr   Zfsspec.implementations.localr   r   ÚABCr   r#   r2   r8   r   r   r   r   Ú<module>   s   !