o
    wvXj0-  ã                   @   s¬  d Z ddlmZmZ ddlZddlZddlZddlZddlm	Z	 z
ddl
mZmZ W n ey;   ddlmZmZ Y nw ddlmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZmZmZ d
dlmZ dZe ƒ Z!eG dd„ de ƒƒZ"G dd„ deƒZ#dde#fdd„Z$eG dd„ de ƒƒZ%dd„ Z&eefeffdd„Z'eeffdd„Z(d3dd„Z)dd„ Z*d4d!d"„Z+d5d$d%„Z,		&	d6d(d)„Z-d7d,d-„Z.d8d/d0„Z/d1d2„ Z0e%Z1e&Z2dS )9zFunctional Utilities.é    )Úabsolute_importÚunicode_literalsN)ÚOrderedDict)ÚIterableÚMapping)ÚcountÚrepeat)ÚsleepÚtime)Úwraps)ÚUserDictÚitemsÚkeysÚpython_2_unicode_compatibleÚstring_tÚPY3é   )Ú	safe_repr)ÚLRUCacheÚmemoizeÚlazyÚmaybe_evaluateÚis_listÚ
maybe_listÚ
dictfilterc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚChannelPromisec                 C   s
   || _ d S ©N)Ú__contract__)ÚselfÚcontract© r    úS/var/www/html/myproject/venv/lib/python3.10/site-packages/kombu/utils/functional.pyÚ__init__&   ó   
zChannelPromise.__init__c                 C   s.   z| j W S  ty   |  ¡  }| _ | Y S w r   )Ú	__value__ÚAttributeErrorr   )r   Úvaluer    r    r!   Ú__call__)   s   þzChannelPromise.__call__c                 C   s0   zt | jƒW S  ty   d t| jƒ¡ Y S w )Nz<promise: 0x{0:x}>)Úreprr$   r%   ÚformatÚidr   ©r   r    r    r!   Ú__repr__0   s
   ÿzChannelPromise.__repr__N)Ú__name__Ú
__module__Ú__qualname__r"   r'   r,   r    r    r    r!   r   #   s    r   c                   @   s¸   e Zd ZdZd%dd„Zdd„ Zdd„ Zd&d
d„Zdd„ Zdd„ Z	dd„ Z
e
Zdd„ ZeZdd„ ZeZd'dd„Zdd„ Zdd„ Zejd dkrNeZeZe
ZdS dd „ Zd!d"„ Zd#d$„ ZdS )(r   a?  LRU Cache implementation using a doubly linked list to track access.

    Arguments:
        limit (int): The maximum number of keys to keep in the cache.
            When a new key is inserted and the limit has been exceeded,
            the *Least Recently Used* key will be discarded from the
            cache.
    Nc                 C   s   || _ t ¡ | _tƒ | _d S r   )ÚlimitÚ	threadingÚRLockÚmutexr   Údata)r   r0   r    r    r!   r"   A   s   
zLRUCache.__init__c                 C   sB   | j � | j |¡ }| |< |W  d   ƒ S 1 sw   Y  d S r   )r3   r4   Úpop©r   Úkeyr&   r    r    r!   Ú__getitem__F   s   $þzLRUCache.__getitem__c                 O   sœ   | j �A | j| j}}|j|i |¤Ž |r,t|ƒ|kr4tt|ƒ| ƒD ]}|jdd� q#W d   ƒ d S W d   ƒ d S W d   ƒ d S 1 sGw   Y  d S )NF)Úlast)r3   r4   r0   ÚupdateÚlenÚrangeÚpopitem)r   ÚargsÚkwargsr4   r0   Ú_r    r    r!   r:   K   s   ýýý"ûzLRUCache.updateTc                 C   s6   | j � | j |¡W  d   ƒ S 1 sw   Y  d S r   )r3   r4   r=   )r   r9   r    r    r!   r=   T   s   
$ÿzLRUCache.popitemc                 C   sb   | j �$ | jrt| jƒ| jkr| j tt| jƒƒ¡ || j|< W d   ƒ d S 1 s*w   Y  d S r   )r3   r0   r;   r4   r5   ÚnextÚiterr6   r    r    r!   Ú__setitem__X   s
   "ýzLRUCache.__setitem__c                 C   s
   t | jƒS r   )rB   r4   r+   r    r    r!   Ú__iter___   r#   zLRUCache.__iter__c              
   c   s^   � | j �! | D ]}z
|| j| fV  W q ty   Y qw W d   ƒ d S 1 s(w   Y  d S r   ©r3   r4   ÚKeyError©r   Úkr    r    r!   Ú_iterate_itemsb   s   €ÿý"ÿzLRUCache._iterate_itemsc              
   c   sZ   � | j � | D ]}z| j| V  W q ty   Y qw W d   ƒ d S 1 s&w   Y  d S r   rE   rG   r    r    r!   Ú_iterate_valuesk   s   €ÿý"ÿzLRUCache._iterate_valuesc                 C   s4   | j � t| jƒW  d   ƒ S 1 sw   Y  d S r   )r3   r   r4   r+   r    r    r!   Ú_iterate_keysu   s   $ÿzLRUCache._iterate_keysr   c                 C   sN   | j � t| j |¡ƒ| }t|ƒ| |< |W  d   ƒ S 1 s w   Y  d S r   )r3   Úintr4   r5   Ústr)r   r7   ÚdeltaÚnewvalr    r    r!   Úincr{   s
   $ûzLRUCache.incrc                 C   s   t t| ƒƒ}| d¡ |S )Nr3   )ÚdictÚvarsr5   )r   Údr    r    r!   Ú__getstate__ƒ   s   
zLRUCache.__getstate__c                 C   s   || _ t ¡ | _d S r   )Ú__dict__r1   r2   r3   )r   Ústater    r    r!   Ú__setstate__ˆ   s   zLRUCache.__setstate__r   é   c                 C   ó   t |  ¡ ƒS r   )ÚlistrK   r+   r    r    r!   r   ’   ó   zLRUCache.keysc                 C   rY   r   )rZ   rJ   r+   r    r    r!   Úvalues•   r[   zLRUCache.valuesc                 C   rY   r   )rZ   rI   r+   r    r    r!   r   ˜   r[   zLRUCache.itemsr   )T)r   )r-   r.   r/   Ú__doc__r"   r8   r:   r=   rC   rD   rI   Ú	iteritemsrJ   Ú
itervaluesrK   ÚiterkeysrP   rT   rW   ÚsysÚversion_infor   r\   r   r    r    r    r!   r   7   s0    
	
	
r   c                    s   ‡ ‡‡fdd„}|S )z)Decorator to cache function return value.c                    sX   t  ¡ ‰ˆˆd�‰tˆƒ‡ ‡‡‡‡fdd„ƒ‰ ‡ ‡fdd„}d ˆ _ˆ _|ˆ _ˆˆ _ˆ S )N)r0   c                     sÎ   ˆrˆ| |ƒ}n| t f tt| ¡ ƒƒ }zˆ� ˆ| }W d   ƒ n1 s'w   Y  W n0 ty]   ˆ| i |¤Ž}ˆ  jd7  _ˆ� |ˆ|< W d   ƒ Y |S 1 sUw   Y  Y |S w ˆ  jd7  _|S )Nr   )ÚKEYWORD_MARKÚtupleÚsortedr   rF   ÚmissesÚhits)r>   r?   r7   r&   )Ú_MÚcacheÚfunÚkeyfunr3   r    r!   rh   ¢   s(   
ÿ€
ÿüùz%memoize.<locals>._memoize.<locals>._Mc                      s   ˆ  ¡  d ˆ _ˆ _dS )z+Clear the cache and reset cache statistics.r   N)Úclearrg   rf   r    )rh   ri   r    r!   rl   ´   s   z(memoize.<locals>._memoize.<locals>.clearr   )r1   ÚLockr   rg   rf   rl   Úoriginal_func)rj   rl   ©ÚCacherk   Úmaxsize)rh   ri   rj   r3   r!   Ú_memoizež   s   
zmemoize.<locals>._memoizer    )rq   rk   rp   rr   r    ro   r!   r   œ   s    r   c                   @   sr   e Zd Z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„ Zejd dk r7dd„ ZdS dS )r   a
  Holds lazy evaluation.

    Evaluated when called or if the :meth:`evaluate` method is called.
    The function is re-evaluated on every call.

    Overloaded operations that will evaluate the promise:
        :meth:`__str__`, :meth:`__repr__`, :meth:`__cmp__`.
    c                 O   s   || _ || _|| _d S r   ©Ú_funÚ_argsÚ_kwargs)r   rj   r>   r?   r    r    r!   r"   Ì   s   
zlazy.__init__c                 C   s   |   ¡ S r   )Úevaluater+   r    r    r!   r'   Ñ   s   zlazy.__call__c                 C   s   | j | ji | j¤ŽS r   rs   r+   r    r    r!   rw   Ô   s   zlazy.evaluatec                 C   ó
   t | ƒ ƒS r   )rM   r+   r    r    r!   Ú__str__×   r#   zlazy.__str__c                 C   rx   r   )r(   r+   r    r    r!   r,   Ú   r#   zlazy.__repr__c                 C   s
   | ƒ |kS r   r    ©r   Úrhsr    r    r!   Ú__eq__Ý   r#   zlazy.__eq__c                 C   s
   | ƒ |kS r   r    rz   r    r    r!   Ú__ne__à   r#   zlazy.__ne__c                 C   s   | |t | ƒ< | S r   )r*   )r   Úmemor    r    r!   Ú__deepcopy__ã   s   zlazy.__deepcopy__c                 C   s   | j | jf| j| jdœfS )N)ru   rv   )Ú	__class__rt   ru   rv   r+   r    r    r!   Ú
__reduce__ç   s   ÿzlazy.__reduce__r   rX   c                 C   s&   t || jƒrt|| ƒ ƒ S t| ƒ |ƒS r   )Ú
isinstancer€   Úcmprz   r    r    r!   Ú__cmp__í   s   zlazy.__cmp__N)r-   r.   r/   r]   r"   r'   rw   ry   r,   r|   r}   r   r�   ra   rb   r„   r    r    r    r!   r   Á   s    	þr   c                 C   s   t | tƒr	|  ¡ S | S )z9Evaluate value only if value is a :class:`lazy` instance.)r‚   r   rw   )r&   r    r    r!   r   ó   s   
r   c                 C   s   t | |ƒot | |p
dƒ S )znReturn true if the object is iterable.

    Note:
        Returns false if object is a mapping or string.
    r    )r‚   )ÚobjÚscalarsÚitersr    r    r!   r   ú   s   r   c                 C   s   | du s	t | |ƒr| S | gS )z0Return list of one element if ``l`` is a scalar.N)r   )r…   r†   r    r    r!   r     s   r   c                 K   s6   | du r|n|rt | fi |¤Žn| } dd„ t| ƒD ƒS )z=Remove all keys from dict ``d`` whose value is :const:`None`.Nc                 S   s   i | ]\}}|d ur||“qS r   r    ©Ú.0rH   Úvr    r    r!   Ú
<dictcomp>  s    zdictfilter.<locals>.<dictcomp>)rQ   r   )rS   Úkwr    r    r!   r     s   $r   c                 c   s4   � t | ƒ} tj}td ƒD ]}|| ƒ | d V  qd S )Nr   )rZ   ÚrandomÚshuffler   )ÚitrŽ   r@   r    r    r!   Úshufflecycle  s   €þr�   ç      ð?Fc                 c   s<   � | d }	 |r||kr|V  ||7 }n	|sd S || V  q)Nr‘   r    )ÚstartÚstopÚstepÚ
repeatlastÚcurr    r    r!   Úfxrange  s   €

ùr—   ç      Y@c                 c   sJ   � d| d }}	 ||krd S |V  |rt || |ƒ}n||7 }||7 }q	)Nr   r‘   )Úmin)r’   r“   r”   ÚmaxÚsum_r–   r    r    r!   Ú
fxrangemax"  s   €ørœ   é   é   c                 C   s
  |si n|}|s
g n|}t ||| |dd�}|
rtƒ |
 nd}tƒ D ]`}z
| |i |¤ŽW   S  |y‚ } zH|dur?||kr?‚ |rGtƒ |krG‚ |	rL|	ƒ  t|rU||||ƒnt|ƒƒ}|rxtt|ƒƒD ]}|	ri|	ƒ  tdƒ qbttt|ƒ| ƒƒ W Y d}~q"d}~ww dS )aï  Retry the function over and over until max retries is exceeded.

    For each retry we sleep a for a while before we try again, this interval
    is increased for every retry until the max seconds is reached.

    Arguments:
        fun (Callable): The function to try
        catch (Tuple[BaseException]): Exceptions to catch, can be either
            tuple or a single exception class.

    Keyword Arguments:
        args (Tuple): Positional arguments passed on to the function.
        kwargs (Dict): Keyword arguments passed on to the function.
        errback (Callable): Callback for when an exception in ``catch``
            is raised.  The callback must take three arguments:
            ``exc``, ``interval_range`` and ``retries``, where ``exc``
            is the exception instance, ``interval_range`` is an iterator
            which return the time in seconds to sleep next, and ``retries``
            is the number of previous retries.
        max_retries (int): Maximum number of retries before we give up.
            If neither of this and timeout is set, we will retry forever.
            If one of this and timeout is reached, stop.
        interval_start (float): How long (in seconds) we start sleeping
            between retries.
        interval_step (float): By how much the interval is increased for
            each retry.
        interval_max (float): Maximum number of seconds to sleep
            between retries.
        timeout (int): Maximum seconds waiting before we give up.
    T)r•   Nr‘   )	r—   r
   r   ÚfloatrA   r<   rL   r	   Úabs)rj   Úcatchr>   r?   ÚerrbackÚmax_retriesÚinterval_startÚinterval_stepÚinterval_maxÚcallbackÚtimeoutÚinterval_rangeÚendÚretriesÚexcÚttsr@   r    r    r!   Úretry_over_time/  s:   !þ
ÿ
€ñýr®   ú, ú{0}={1}c                    s   |  ‡ fdd„t| ƒD ƒ¡S )Nc                 3   s$   � | ]\}}ˆ   |t|ƒ¡V  qd S r   )r)   Ú
_safe_reprrˆ   ©Úfmtr    r!   Ú	<genexpr>l  s   €" zreprkwargs.<locals>.<genexpr>)Újoinr   )r?   Úsepr³   r    r²   r!   Ú
reprkwargsk  s   r·   r    c                 C   s>   |si n|}d  | | tt|pdƒ¡|r|r|pdt||ƒ¡S )Nz{0}({1}{2}{3})r    Ú )r)   rµ   Úmapr±   r·   )Únamer>   r?   r¶   r    r    r!   Úreprcallo  s   ýr»   c                 C   s:   t rt | ¡}||jv p||jv S t | ¡}|j}||v S r   )r   ÚinspectÚgetfullargspecr>   Ú
kwonlyargsÚ
getargspec)ÚfuncÚargument_nameÚargument_specÚargument_namesr    r    r!   Úaccepts_argumentx  s   

þ
rÄ   r   )r‘   Nr‘   F)r‘   Nr‘   r˜   )	NNNNr�   r�   rž   NN)r¯   r°   )r    Nr¯   )3r]   Ú
__future__r   r   r�   ra   r1   r¼   Úcollectionsr   Úcollections.abcr   r   ÚImportErrorÚ	itertoolsr   r   r
   r	   Ú
vine.utilsr   Ú
kombu.fiver   r   r   r   r   r   Úencodingr   r±   Ú__all__Úobjectrc   r   r   r   r   r   r   r   r   r�   r—   rœ   r®   r·   r»   rÄ   ÚpromiseÚmaybe_promiser    r    r    r!   Ú<module>   sR    ÿ e%1	



þ
<
	