
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    \UV<  ã                   @   sx   d Z dZdZdZddlmZ ddlZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZ	e	Z
e	ZG dd„ de	ƒZeZeZdS )zDaniel Greenfeldzpydanny@gmail.comz1.3.0ÚBSDé    )ÚtimeNc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Úcached_propertya   
    A property that is only computed once per instance and then replaces itself
    with an ordinary attribute. Deleting the attribute resets the property.
    Source: https://github.com/bottlepy/bottle/commit/fa7733e075da0d790d809aa3d2f53071897e6f76
    c                 C   s   t |dƒ| _|| _d S ©NÚ__doc__)Úgetattrr   Úfunc©Úselfr   © r   ú@/opt/alt/python38/lib/python3.8/site-packages/cached_property.pyÚ__init__   s    zcached_property.__init__c                 C   s(   |d kr| S |   |¡ }|j| j j< |S ©N)r   Ú__dict__Ú__name__)r
   ÚobjÚclsÚvaluer   r   r   Ú__get__   s    zcached_property.__get__N©r   Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Úthreaded_cached_propertyú…
    A cached_property version for use in environments where multiple threads
    might concurrently try to access the property.
    c                 C   s    t |dƒ| _|| _t ¡ | _d S r   )r   r   r   Ú	threadingÚRLockÚlockr	   r   r   r   r   $   s    z!threaded_cached_property.__init__c              
   C   sz   |d kr| S |j }| jj}| j�P z|| W W  5 Q R £ S  tk
rj   | ||  |¡¡ Y W  5 Q R £ S X W 5 Q R X d S r   )r   r   r   r   ÚKeyErrorÚ
setdefault)r
   r   r   Úobj_dictÚnamer   r   r   r   )   s    z threaded_cached_property.__get__Nr   r   r   r   r   r      s   r   c                   @   sB   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S )Úcached_property_with_ttlz×
    A property that is only computed once per instance and then replaces itself
    with an ordinary attribute. Setting the ttl to a number expresses how long
    the property will last before being timed out.
    Nc                 C   s*   t |ƒr|}d }nd }|| _|  |¡ d S r   )ÚcallableÚttlÚ_prepare_func)r
   r#   r   r   r   r   r   ?   s    z!cached_property_with_ttl.__init__c                 C   s   |   |¡ | S r   )r$   r	   r   r   r   Ú__call__H   s    
z!cached_property_with_ttl.__call__c           	      C   sz   |d kr| S t ƒ }|j}| j}z|| \}}W n tk
rB   Y nX | joV| j|| k }|s`|S |  |¡}||f||< |S r   )r   r   r   r   r#   r   )	r
   r   r   Únowr   r    r   Zlast_updatedZttl_expiredr   r   r   r   L   s    
z cached_property_with_ttl.__get__c                 C   s   |j  | jd ¡ d S r   )r   Úpopr   )r
   r   r   r   r   Ú
__delete__`   s    z#cached_property_with_ttl.__delete__c                 C   s   |t ƒ f|j| j< d S r   )r   r   r   )r
   r   r   r   r   r   Ú__set__c   s    z cached_property_with_ttl.__set__c                 C   s&   || _ |r"|j| _|j| _|j| _d S r   )r   r   r   r   r	   r   r   r   r$   f   s
    z&cached_property_with_ttl._prepare_func)N)
r   r   r   r   r   r%   r   r(   r)   r$   r   r   r   r   r!   8   s   
	r!   c                       s.   e Zd ZdZd‡ fdd„	Z‡ fdd„Z‡  ZS )Ú!threaded_cached_property_with_ttlr   Nc                    s   t t| ƒ |¡ t ¡ | _d S r   )Úsuperr*   r   r   r   r   )r
   r#   ©Ú	__class__r   r   r   x   s    z*threaded_cached_property_with_ttl.__init__c              
      s0   | j �  tt| ƒ ||¡W  5 Q R £ S Q R X d S r   )r   r+   r*   r   )r
   r   r   r,   r   r   r   |   s    ÿz)threaded_cached_property_with_ttl.__get__)N)r   r   r   r   r   r   Ú__classcell__r   r   r,   r   r*   r   s   r*   )Ú
__author__Ú	__email__Ú__version__Ú__license__r   r   Úobjectr   r   r!   Zcached_property_ttlZtimed_cached_propertyr*   Zthreaded_cached_property_ttlZtimed_threaded_cached_propertyr   r   r   r   Ú<module>   s   6