B
    uf                 @  sr   d Z ddlmZ ddlmZ ddlmZmZmZ er@ddl	m	Z	 G dd dZ
G dd	 d	e
ZG d
d de
ZdS )zb
The cache object API for implementing caches. The default is a thread
safe in-memory dictionary.
    )annotations)Lock)IOTYPE_CHECKINGMutableMapping)datetimec               @  sP   e Zd ZdddddZddddd	d
ddZdd	dddZd	dddZdS )	BaseCachestrzbytes | None)keyreturnc             C  s
   t  d S )N)NotImplementedError)selfr
    r   T/home/ankuromar296_gmail_com/myenv/lib/python3.7/site-packages/cachecontrol/cache.pyget   s    zBaseCache.getNbyteszint | datetime | NoneNone)r
   valueexpiresr   c             C  s
   t  d S )N)r   )r   r
   r   r   r   r   r   set   s    zBaseCache.setc             C  s
   t  d S )N)r   )r   r
   r   r   r   delete   s    zBaseCache.delete)r   c             C  s   d S )Nr   )r   r   r   r   close   s    zBaseCache.close)N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   r   c               @  sT   e Zd ZddddddZddd	d
dZddddddddZddd	ddZdS )	DictCacheNz!MutableMapping[str, bytes] | Noner   )	init_dictr   c             C  s   t  | _|pi | _d S )N)r   lockdata)r   r   r   r   r   __init__#   s    zDictCache.__init__r	   zbytes | None)r
   r   c             C  s   | j |d S )N)r   r   )r   r
   r   r   r   r   '   s    zDictCache.getr   zint | datetime | None)r
   r   r   r   c          	   C  s&   | j  | j||i W d Q R X d S )N)r   r   update)r   r
   r   r   r   r   r   r   *   s    zDictCache.setc          	   C  s,   | j  || jkr| j| W d Q R X d S )N)r   r   pop)r   r
   r   r   r   r   0   s    
zDictCache.delete)N)N)r   r   r   r   r   r   r   r   r   r   r   r   "   s   r   c               @  s2   e Zd ZdZddddddZddd	d
dZdS )SeparateBodyBaseCacheag  
    In this variant, the body is not stored mixed in with the metadata, but is
    passed in (as a bytes-like object) in a separate call to ``set_body()``.

    That is, the expected interaction pattern is::

        cache.set(key, serialized_metadata)
        cache.set_body(key)

    Similarly, the body should be loaded separately via ``get_body()``.
    r	   r   r   )r
   bodyr   c             C  s
   t  d S )N)r   )r   r
   r#   r   r   r   set_bodyC   s    zSeparateBodyBaseCache.set_bodyzIO[bytes] | None)r
   r   c             C  s
   t  dS )z6
        Return the body as file-like object.
        N)r   )r   r
   r   r   r   get_bodyF   s    zSeparateBodyBaseCache.get_bodyN)r   r   r   __doc__r$   r%   r   r   r   r   r"   6   s   r"   N)r&   
__future__r   	threadingr   typingr   r   r   r   r   r   r"   r   r   r   r   <module>   s   