U
    -e
                     @   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 P/var/www/html/Darija-Ai-Train/env/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   