
    ̒ge	                        d dl mZ d dlZd dlZd dlmZ d dlmZ erd dlmZ  G d dej	                  Z
 G d d	e
          Z G d
 de
          ZddZdS )    )annotationsN)TYPE_CHECKING)make_path_posix)Anyc                  D    e Zd ZdZej        dd            Zdd	ZddZdS )AbstractCacheMapperzUAbstract super-class for mappers from remote URLs to local cached
    basenames.
    pathstrreturnc                    d S N selfr	   s     Clib/python3.11/site-packages/fsspec/implementations/cache_mapper.py__call__zAbstractCacheMapper.__call__   s        otherr   boolc                <    t          |t          |                     S r   )
isinstancetype)r   r   s     r   __eq__zAbstractCacheMapper.__eq__   s     %d,,,r   intc                :    t          t          |                     S r   )hashr   )r   s    r   __hash__zAbstractCacheMapper.__hash__   s     DJJr   Nr	   r
   r   r
   r   r   r   r   r   r   )	__name__
__module____qualname____doc__abcabstractmethodr   r   r   r   r   r   r   r      sj          	   - - - -
           r   r   c                  B     e Zd ZdZdddZdd	Zd fdZd fdZ xZS )BasenameCacheMapperzCache 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   directory_levelsr   c                L    |dk     rt          d          || _        d| _        d S )Nr   z>BasenameCacheMapper requires zero or positive directory_levelsz_@_)
ValueErrorr)   
_separator)r   r)   s     r   __init__zBasenameCacheMapper.__init__)   s9    aP   !1  r   r	   r
   r   c                    t          |          }|                    d| j        dz             ^}}|r| j                            |          S |S )N/   )r   rsplitr)   r,   join)r   r	   prefixbitss       r   r   zBasenameCacheMapper.__call__3   sQ    t$$C)>)BCC 	?''---Mr   r   r   r   c                f    t                                          |          o| j        |j        k    S r   )superr   r)   )r   r   	__class__s     r   r   zBasenameCacheMapper.__eq__;   s)    ww~~e$$X)>%BX)XXr   c                n    t                                                      t          | j                  z  S r   )r6   r   r   r)   )r   r7   s    r   r   zBasenameCacheMapper.__hash__>   s)    ww!!D)>$?$???r   )r   )r)   r   r   r   r    )	r!   r"   r#   r$   r-   r   r   r   __classcell__)r7   s   @r   r(   r(   !   s                     Y Y Y Y Y Y@ @ @ @ @ @ @ @ @ @r   r(   c                      e Zd ZdZddZdS )HashCacheMapperz0Cache mapper that uses a hash of the remote URL.r	   r
   r   c                r    t          j        |                                                                          S r   )hashlibsha256encode	hexdigestr   s     r   r   zHashCacheMapper.__call__E   s&    ~dkkmm,,66888r   Nr   )r!   r"   r#   r$   r   r   r   r   r;   r;   B   s.        ::9 9 9 9 9 9r   r;   
same_namesr   r   c                >    | rt                      S t                      S )zFactory method to create cache mapper for backward compatibility with
    ``CachingFileSystem`` constructor using ``same_names`` kwarg.
    )r(   r;   )rA   s    r   create_cache_mapperrC   I   s$      !"$$$   r   )rA   r   r   r   )
__future__r   r%   r=   typingr   fsspec.implementations.localr   r   ABCr   r(   r;   rC   r   r   r   <module>rH      s   " " " " " " 



              8 8 8 8 8 8          #'      (@ @ @ @ @- @ @ @B9 9 9 9 9) 9 9 9! ! ! ! ! !r   