o
    êÕÊc=  ã                   @   sz   d dl Z d dlZd dlZdZe  e¡Zdd„ Zdd„ ZG dd„ de	ƒZ
G d	d
„ d
eƒZG dd„ de	ƒZG dd„ de	ƒZdS )é    Né   c                 C   s0   	 t | tƒr| S t | tƒrt | ¡S tt| ƒƒS ©N)Ú
isinstanceÚbytesÚstrÚosÚfsencodeÚcanonicalize_path)Úpath© r   úTG:\Development\the-witcher-3-mod-manager\.venv\lib\site-packages\fasteners\_utils.pyr	      s   


r	   c                  G   s    	 | D ]
}|d ur|  S qd S r   r   )ÚvaluesÚvalr   r   r   Úpick_first_not_none*   s   ÿr   c                   @   s0   e Zd Z	 d
dd„Zdd„ Zdd„ Zdd	„ ZdS )Ú	LockStackNc                 C   s   g | _ t|tƒ| _d S r   )Ú_stackr   ÚLOGÚ_logger)ÚselfÚloggerr   r   r   Ú__init__:   s   zLockStack.__init__c                 C   s   |  ¡ }|r| j |¡ |S r   )Úacquirer   Úappend)r   ÚlockÚgottenr   r   r   Úacquire_lock>   s   zLockStack.acquire_lockc                 C   s   | S r   r   ©r   r   r   r   Ú	__enter__D   s   zLockStack.__enter__c                 C   sd   t | jƒ}|}| jr0| j ¡ }z| ¡  W n ty&   | j d||¡ Y nw |d8 }| js
d S d S )Nz6Failed releasing lock %s from lock stack with %s locksé   )Úlenr   ÚpopÚreleaseÚ	Exceptionr   Ú	exception)r   Úexc_typeÚ	exc_valueÚexc_tbZam_leftZtot_amr   r   r   r   Ú__exit__G   s   

ÿÿùzLockStack.__exit__r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r'   r   r   r   r   r   2   s    
r   c                   @   s   e Zd ZdS )Ú
RetryAgainN)r(   r)   r*   r   r   r   r   r+   T   s    r+   c                   @   s&   e Zd Z	 ejdfdd„Zdd„ ZdS )ÚRetryNc                 C   s"   || _ d| _|| _|| _|| _d S )Nr   )ÚdelayÚattemptsÚ	max_delayÚ
sleep_funcÚwatch)r   r-   r/   r0   r1   r   r   r   r   [   s
   
zRetry.__init__c                 O   s”   	 |  j d7  _ z||i |¤ŽW S  tyH   | j | j }|| jk r%|}n| j}td|ƒ}| jd urA| j ¡ }|d urA||k rA|}|  |¡ Y nw q)NTr   ç        )r.   r+   r-   r/   Úmaxr1   Úleftoverr0   )r   ÚfnÚargsÚkwargsZmaybe_delayZactual_delayr4   r   r   r   Ú__call__c   s"   



õüzRetry.__call__)r(   r)   r*   ÚtimeÚsleepr   r8   r   r   r   r   r,   X   s
    
ÿr,   c                   @   sH   e Zd Z	 ddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )Ú	StopWatchNc                 C   s   || _ d | _d | _d S r   )ÚdurationÚ
started_atÚ
stopped_at)r   r<   r   r   r   r   y   s   
zStopWatch.__init__c                 C   s"   | j d u rd S td| j |  ¡  ƒS ©Nr2   )r<   r3   Úelapsedr   r   r   r   r4   ~   s   
zStopWatch.leftoverc                 C   s*   | j d ur	| j }nt ¡ }td|| j ƒS r?   )r>   r9   Ú	monotonicr3   r=   )r   Úend_timer   r   r   r@   ƒ   s   
zStopWatch.elapsedc                 C   s   |   ¡  | S r   )Ústartr   r   r   r   r   Š   s   zStopWatch.__enter__c                 C   s   t  ¡ | _d S r   )r9   rA   r>   )r   r$   r%   r&   r   r   r   r'   Ž   s   zStopWatch.__exit__c                 C   s   t  ¡ | _d | _d S r   )r9   rA   r=   r>   r   r   r   r   rC   ‘   s   

zStopWatch.startc                 C   s   | j d u rdS |  ¡ | j kS )NF)r<   r@   r   r   r   r   Úexpired•   s   
zStopWatch.expiredr   )
r(   r)   r*   r   r4   r@   r   r'   rC   rD   r   r   r   r   r;   v   s    
r;   )Úloggingr   r9   ÚBLATHERÚ	getLoggerr(   r   r	   r   Úobjectr   r"   r+   r,   r;   r   r   r   r   Ú<module>   s   
"