U
    2ÒtcF  ã                   @   s.   d dl mZ G dd„ dƒZG dd„ deƒZdS )é    )ÚMutableMappingc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_DefaultSize© c                 C   s   dS ©Né   r   ©ÚselfÚ_r   r   ú4/tmp/pip-unpacked-wheel-7ofpm20j/cachetools/cache.pyÚ__getitem__   s    z_DefaultSize.__getitem__c                 C   s   |dkst ‚d S r   )ÚAssertionError)r   r	   Úvaluer   r   r
   Ú__setitem__   s    z_DefaultSize.__setitem__c                 C   s   dS r   r   r   r   r   r
   Úpop   s    z_DefaultSize.popN)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r   r   r   r
   r      s   r   c                   @   sª   e Zd ZdZeƒ 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d"dd„Zefdd„Zd#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 k	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   s0   z| j | W S  tk
r*   |  |¡ Y S X d S ©N)r   ÚKeyErrorÚ__missing__©r   Úkeyr   r   r
   r   *   s    zCache.__getitem__c                 C   s”   | j }|  |¡}||kr tdƒ‚|| jks8| j| |k rP| j| |krP|  ¡  q8|| jkrj|| j|  }n|}|| j|< || j|< |  j|7  _d S )Nzvalue too large)r   r   Ú
ValueErrorr   r   r   Úpopitem)r   r&   r   r   ÚsizeZdiffsizer   r   r
   r   0   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 kS r"   )r   r%   r   r   r
   Ú__contains__E   s    zCache.__contains__c                 C   s   t |ƒ‚d S r"   )r#   r%   r   r   r
   r$   H   s    zCache.__missing__c                 C   s
   t | jƒS r"   )Úiterr   r    r   r   r
   Ú__iter__K   s    zCache.__iter__c                 C   s
   t | jƒS r"   )Úlenr   r    r   r   r
   Ú__len__N   s    zCache.__len__c                 C   s   || kr| | S |S d S r"   r   )r   r&   Údefaultr   r   r
   ÚgetQ   s    z	Cache.getc                 C   s4   || kr| | }| |= n|| j kr,t|ƒ‚n|}|S r"   )Ú_Cache__markerr#   ©r   r&   r0   r   r   r   r
   r   W   s    

z	Cache.popc                 C   s"   || kr| | }n| | |< }|S r"   r   r3   r   r   r
   Ú
setdefaulta   s    
zCache.setdefaultc                 C   s   | j S )zThe maximum size of the cache.)r   r    r   r   r
   r   h   s    zCache.maxsizec                 C   s   | j S )zThe current size of the cache.)r   r    r   r   r
   Úcurrsizem   s    zCache.currsizec                 C   s   dS )z+Return the size of a cache element's value.r   r   )r   r   r   r
   r   r   s    zCache.getsizeof)N)N)N)r   r   r   Ú__doc__Úobjectr2   r   r   r   r!   r   r   r*   r+   r$   r-   r/   r1   r   r4   Úpropertyr   r5   Ústaticmethodr   r   r   r   r
   r      s*   
	




r   N)Úcollections.abcr   r   r   r   r   r   r
   Ú<module>   s   