
    "h	                        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y)    )annotationsN)TYPE_CHECKING)make_path_posix)Anyc                  F    e Zd ZdZej
                  dd       ZddZddZy)	AbstractCacheMapperzUAbstract super-class for mappers from remote URLs to local cached
    basenames.
    c                     y N selfpaths     `/var/www/html/sandstorm/venv/lib/python3.12/site-packages/fsspec/implementations/cache_mapper.py__call__zAbstractCacheMapper.__call__   s        c                ,    t        |t        |             S r
   )
isinstancetype)r   others     r   __eq__zAbstractCacheMapper.__eq__   s     %d,,r   c                *    t        t        |             S r
   )hashr   )r   s    r   __hash__zAbstractCacheMapper.__hash__   s     DJr   Nr   strreturnr   r   r   r   boolr   int)	__name__
__module____qualname____doc__abcabstractmethodr   r   r   r   r   r   r   r      s+     	 -
 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.
    c                @    |dk  rt        d      || _        d| _        y )Nr   z>BasenameCacheMapper requires zero or positive directory_levelsz_@_)
ValueErrordirectory_levels
_separator)r   r+   s     r   __init__zBasenameCacheMapper.__init__)   s-    aP  !1  r   c                    t        |      }|j                  d| j                  dz         ^}}|r| j                  j	                  |      S |S )N/   )r   rsplitr+   r,   join)r   r   prefixbitss       r   r   zBasenameCacheMapper.__call__3   sH    t$C)>)>)BC??''--Mr   c                X    t         |   |      xr | j                  |j                  k(  S r
   )superr   r+   )r   r   	__class__s     r   r   zBasenameCacheMapper.__eq__;   s(    w~e$X)>)>%BXBX)XXr   c                L    t         |          t        | j                        z  S r
   )r6   r   r   r+   )r   r7   s    r   r   zBasenameCacheMapper.__hash__>   s!    w!D)>)>$???r   )r   )r+   r    r   r   r   )	r!   r"   r#   r$   r-   r   r   r   __classcell__)r7   s   @r   r(   r(   !   s$     Y@ @r   r(   c                      e Zd ZdZddZy)HashCacheMapperz0Cache mapper that uses a hash of the remote URL.c                d    t        j                  |j                               j                         S r
   )hashlibsha256encode	hexdigestr   s     r   r   zHashCacheMapper.__call__E   s     ~~dkkm,6688r   Nr   )r!   r"   r#   r$   r   r   r   r   r;   r;   B   s
    :9r   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;   )
same_namess    r   create_cache_mapperrC   I   s     "$$  r   )rB   r   r   r   )
__future__r   r%   r=   typingr   fsspec.implementations.localr   r   ABCr   r(   r;   rC   r   r   r   <module>rH      sL    " 
    8 #''  (@- @B9) 9!r   