U
    xÊ¹j�
  ã                   @   s4   d dl Z d dlmZ d dlmZ G dd„ deƒZdS )é    N)ÚMutableMapping)Ú	lru_cachec                   @   sZ   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚDirCachea–  
    Caching of directory listings, in a structure like::

        {"path0": [
            {"name": "path0/file0",
             "size": 123,
             "type": "file",
             ...
            },
            {"name": "path0/file1",
            },
            ...
            ],
         "path1": [...]
        }

    Parameters to this class control listing expiry or indeed turn
    caching off
    TNc                    s@   i ˆ _ i ˆ _|r*t|d ƒ‡ fdd„ƒˆ _|ˆ _|ˆ _|ˆ _dS )a  

        Parameters
        ----------
        use_listings_cache: bool
            If False, this cache never returns items, but always reports KeyError,
            and setting items has no effect
        listings_expiry_time: int or float (optional)
            Time in seconds that a listing is considered valid. If None,
            listings do not expire.
        max_paths: int (optional)
            The number of most recent listings that are considered valid; 'recent'
            refers to when the entry was set.
        é   c                    s   ˆ j  | d ¡S ©N)Ú_cacheÚpop)Úkey©Úself© úN/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fsspec/dircache.pyÚ<lambda>3   ó    z#DirCache.__init__.<locals>.<lambda>N)r   Ú_timesr   Ú_qÚuse_listings_cacheÚlistings_expiry_timeÚ	max_paths)r   r   r   r   Úkwargsr   r
   r   Ú__init__   s    zDirCache.__init__c                 C   sJ   | j d k	r0| j |d¡t ¡  | j  k r0| j|= | jr@|  |¡ | j| S )Nr   )r   r   ÚgetÚtimer   r   r   ©r   Úitemr   r   r   Ú__getitem__8   s    

zDirCache.__getitem__c                 C   s   | j  ¡  d S r   )r   Úclearr
   r   r   r   r   @   s    zDirCache.clearc                 C   s
   t | jƒS r   )Úlenr   r
   r   r   r   Ú__len__C   s    zDirCache.__len__c                 C   s*   z| |  W dS  t k
r$   Y dS X d S )NTF)ÚKeyErrorr   r   r   r   Ú__contains__F   s
    zDirCache.__contains__c                 C   s@   | j s
d S | jr|  |¡ || j|< | jd k	r<t ¡ | j|< d S r   )r   r   r   r   r   r   r   )r   r	   Úvaluer   r   r   Ú__setitem__M   s    


zDirCache.__setitem__c                 C   s   | j |= d S r   )r   )r   r	   r   r   r   Ú__delitem__V   s    zDirCache.__delitem__c                    s   t ˆ jƒ}‡ fdd„|D ƒS )Nc                 3   s   | ]}|ˆ kr|V  qd S r   r   )Ú.0Úkr
   r   r   Ú	<genexpr>\   s      z$DirCache.__iter__.<locals>.<genexpr>)Úlistr   )r   Úentriesr   r
   r   Ú__iter__Y   s    
zDirCache.__iter__c                 C   s   t | j| j| jffS r   )r   r   r   r   r
   r   r   r   Ú
__reduce__^   s    þzDirCache.__reduce__)TNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r    r"   r#   r)   r*   r   r   r   r   r      s      ü
	r   )r   Úcollections.abcr   Ú	functoolsr   r   r   r   r   r   Ú<module>   s   