o
    J                     @   s   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ dZdZeedd dd drEejZndd ZejdfddZejdfddZdS )z0Extensible memoizing collections and decorators.    )absolute_importN   )keys)Cache)LFUCache)LRUCache)RRCache)TTLCache)r   r   r   r   r	   cachedcachedmethodz3.1.1c                 C   s   |  S N )fr   r   </tmp/google-cloud-sdk/lib/third_party/cachetools/__init__.py<lambda>   s    r   c                   C   s   dS )N*   r   r   r   r   r   r      s    __wrapped__c                 C   s   t | | || _| S r   )	functoolsupdate_wrapperr   )wrapperwrappedr   r   r   _update_wrapper   s   r   c                        fdd}|S )z`Decorator to wrap a function with a memoizing callable that saves

    results in a cache.

    c                    sL   d u r fdd}nd u r fdd}n	 fdd}t | S )Nc                     s    | i |S r   r   )argskwargsfuncr   r   r   '   s   z*cached.<locals>.decorator.<locals>.wrapperc                     s^   | i |}z | W S  t y   Y nw | i |}z| |< W |S  ty.   Y |S w r   KeyError
ValueErrorr   r   kv)cacher   keyr   r   r   +   s   

c                     s   | i |}z  | W  d    W S 1 sw   Y  W n	 t y)   Y nw | i |}z | |< W d    W |S 1 sEw   Y  W |S  tyV   Y |S w r   r   r    )r#   r   r$   lockr   r   r   9   s(   &
r   )r   r   r#   r$   r%   r   r   	decorator$   s   
zcached.<locals>.decoratorr   r#   r$   r%   r(   r   r'   r   r
      s   &r
   c                    r   )zpDecorator to wrap a class or instance method with a memoizing

    callable that saves results in a cache.

    c                    s6   d u r fdd}n	 fdd}t | S )Nc                    s    | }|d u r| g|R i |S |i |}z|| W S  t y(   Y nw | g|R i |}z|||< W |S  tyE   Y |S w r   r   selfr   r   cr!   r"   )r#   r$   methodr   r   r   W   s"   

z0cachedmethod.<locals>.decorator.<locals>.wrapperc                    s    | }|d u r| g|R i |S |i |}z|  || W  d    W S 1 s/w   Y  W n	 t y>   Y nw | g|R i |}z|  |||< W d    W |S 1 s`w   Y  W |S  tyq   Y |S w r   r   r*   )r#   r$   r%   r-   r   r   r   h   s.   
&

r&   )r-   r   r'   )r-   r   r(   T   s   
zcachedmethod.<locals>.decoratorr   r)   r   r'   r   r   M   s   (r   )__doc__
__future__r   r    r   r#   r   lfur   lrur   rrr   ttlr	   __all____version__hasattrr   r   hashkeyr
   r   r   r   r   r   <module>   s     0