o
    €Ï  ã                   @   s<   d dl mZ ddlmZ G dd„ deƒZG dd„ deƒZdS )	é    )Úabsolute_importé   )ÚDefaultMappingc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_DefaultSizec                 C   ó   dS ©Nr   © ©ÚselfÚ_r   r   ú9/tmp/google-cloud-sdk/lib/third_party/cachetools/cache.pyÚ__getitem__   ó   z_DefaultSize.__getitem__c                 C   s   |dksJ ‚d S r   r   )r
   r   Úvaluer   r   r   Ú__setitem__   s   z_DefaultSize.__setitem__c                 C   r   r   r   r	   r   r   r   Úpop   r   z_DefaultSize.popN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s    r   c                   @   s„   e Zd ZdZeƒ 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edd„ ƒZedd„ ƒZedd„ ƒZdS )ÚCachez?Mutable mapping to serve as a simple cache or cache base class.Nc                 C   s6   |r|| _ | j tj urtƒ | _tƒ | _d| _|| _d S )Nr   )Ú	getsizeofr   ÚdictÚ_Cache__sizeÚ_Cache__dataÚ_Cache__currsizeÚ_Cache__maxsize)r
   Úmaxsizer   r   r   r   Ú__init__   s   
zCache.__init__c                 C   s"   d| j jt| j ¡ ƒ| j| jf S )Nz%s(%r, maxsize=%r, currsize=%r))Ú	__class__r   Úlistr   Úitemsr   r   ©r
   r   r   r   Ú__repr__    s   üzCache.__repr__c                 C   s*   z| j | W S  ty   |  |¡ Y S w ©N)r   ÚKeyErrorÚ__missing__©r
   Úkeyr   r   r   r   (   s
   ÿzCache.__getitem__c                 C   s    | j }|  |¡}||krtdƒ‚|| jvs| j| |k r.| j| |kr.|  ¡  | j| |ks#|| jv r;|| j|  }n|}|| j|< || j|< |  j|7  _d S )Nzvalue too large)r   r   Ú
ValueErrorr   r   r   Úpopitem)r
   r'   r   r   ÚsizeÚdiffsizer   r   r   r   .   s   
ÿ


zCache.__setitem__c                 C   s&   | j  |¡}| j|= |  j|8  _d S r#   )r   r   r   r   )r
   r'   r*   r   r   r   Ú__delitem__>   s   zCache.__delitem__c                 C   s
   || j v S r#   )r   r&   r   r   r   Ú__contains__C   ó   
zCache.__contains__c                 C   s   t |ƒ‚r#   )r$   r&   r   r   r   r%   F   s   zCache.__missing__c                 C   ó
   t | jƒS r#   )Úiterr   r!   r   r   r   Ú__iter__I   r.   zCache.__iter__c                 C   r/   r#   )Úlenr   r!   r   r   r   Ú__len__L   r.   zCache.__len__c                 C   ó   | j S )zThe maximum size of the cache.)r   r!   r   r   r   r   O   ó   zCache.maxsizec                 C   r4   )zThe current size of the cache.)r   r!   r   r   r   ÚcurrsizeT   r5   zCache.currsizec                 C   r   )z+Return the size of a cache element's value.r   r   )r   r   r   r   r   Y   s   zCache.getsizeofr#   )r   r   r   Ú__doc__r   r   r   r"   r   r   r,   r-   r%   r1   r3   Úpropertyr   r6   Ústaticmethodr   r   r   r   r   r      s$    
	

r   N)Ú
__future__r   Úabcr   Úobjectr   r   r   r   r   r   Ú<module>   s    