
    wgu	                        d dl mZ d dlZd dlZ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)make_path_posixc                  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     h/home/mcse/projects/flask/flask-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   objectr   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__.   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__6   s(    w~e$X)>)>%BXBX)XXr   c                L    t         |          t        | j                        z  S r   )r5   r   r   r*   )r   r6   s    r   r   zBasenameCacheMapper.__hash__9   s!    w!D)>)>$???r   )r   )r*   r   r   r   r   )	r    r!   r"   r#   r,   r   r   r   __classcell__)r6   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__@   s     ~~dkkm,6688r   Nr   )r    r!   r"   r#   r   r	   r   r   r:   r:   =   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_mapperrB   D   s     "$$  r   )rA   r   r   r   )
__future__r   r$   r<   fsspec.implementations.localr   ABCr   r'   r:   rB   r	   r   r   <module>rF      sC    " 
  8 #''  &@- @B9) 9!r   