o
    h
                     @   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                   @   s`   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 c/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fsspec/dircache.py<lambda>3   s    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 ur| j|dt  | j  k r| 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 y   Y dS w )NTF)KeyErrorr   r   r   r   __contains__F   s   zDirCache.__contains__c                 C   sD   | j sd S | jr| | || j|< | jd ur t | j|< d S 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    | ]	}| v 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    