
    Ij=                         d dl Z d dlZd dlZdZ e j        e          Zd Zd Z G d de	          Z
 G d de          Z G d	 d
e	          Z G d de	          ZdS )    N   c                     t          | t                    r| S t          | t                    rt          j        |           S t          t          |                     S )zcCanonicalizes a potential path.

    Returns a binary string encoded into filesystem encoding.
    )
isinstancebytesstrosfsencodecanonicalize_path)paths    Z/workspace/show-city-briefing-agent/.venv/lib/python3.11/site-packages/fasteners/_utils.pyr
   r
      sQ    
 $ $ ,{4    T+++    c                      | D ]}||c S 	dS )zEReturns first of values that is *not* None (or None if all are/were).N )valuesvals     r   pick_first_not_noner   *   s)      ?JJJ 4r   c                   ,    e Zd ZdZddZd Zd Zd ZdS )	LockStackzSimple lock stack to get and release many locks.

    An instance of this should **not** be used by many threads at the
    same time, as the stack that is maintained will be corrupted and
    invalid if that is attempted.
    Nc                 H    g | _         t          |t                    | _        d S N)_stackr   LOG_logger)selfloggers     r   __init__zLockStack.__init__:   s    *6377r   c                 f    |                                 }|r| j                            |           |S r   )acquirer   append)r   lockgottens      r   acquire_lockzLockStack.acquire_lock>   s2     	%Kt$$$r   c                     | S r   r   r   s    r   	__enter__zLockStack.__enter__D   s    r   c                    t          | j                  }|}| j        ri| j                                        }	 |                                 n,# t          $ r | j                            d||           Y nw xY w|dz  }| j        gd S d S )Nz6Failed releasing lock %s from lock stack with %s locks   )lenr   poprelease	Exceptionr   	exception)r   exc_type	exc_valueexc_tbam_lefttot_amr    s          r   __exit__zLockStack.__exit__G   s    dk""k 	;??$$DP P P P&& (>?FP P P P PP qLG k 	 	 	 	 	s   A &A65A6r   )__name__
__module____qualname____doc__r   r"   r%   r2   r   r   r   r   r   2   s_         8 8 8 8    
 
 
 
 
r   r   c                       e Zd ZdZdS )
RetryAgainz1Exception to signal to retry helper to try again.N)r3   r4   r5   r6   r   r   r   r8   r8   T   s        ;;;;r   r8   c                   .    e Zd ZdZej        dfdZd ZdS )RetryzA little retry helper object.Nc                 L    || _         d| _        || _        || _        || _        d S )Nr   )delayattempts	max_delay
sleep_funcwatch)r   r<   r>   r?   r@   s        r   r   zRetry.__init__[   s)    
"$


r   c                 >   	 | xj         dz  c_         	  ||i |S # t          $ rv | j         | j        z  }|| j        k     r|}n| j        }t	          d|          }| j        #| j                                        }|||k     r|}|                     |           Y nw xY w)NTr'           )r=   r8   r<   r>   maxr@   leftoverr?   )r   fnargskwargsmaybe_delayactual_delayrD   s          r   __call__zRetry.__call__c   s    	.MMQMM.r4*6*** . . ."mdj8//#.LL#'>L"355:)#z2244H+<0G0G'/-----.		.s    A=BB)r3   r4   r5   r6   timesleepr   rJ   r   r   r   r:   r:   X   sF        '' !Jd   . . . . .r   r:   c                   >    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
dS )	StopWatchzA really basic stop watch.Nc                 0    || _         d | _        d | _        d S r   )duration
started_at
stopped_at)r   rP   s     r   r   zStopWatch.__init__y   s     r   c                 h    | j         d S t          d| j         |                                 z
            S NrB   )rP   rC   elapsedr$   s    r   rD   zStopWatch.leftover~   s.    = 436777r   c                 v    | j         | j         }nt          j                    }t          d|| j        z
            S rT   )rR   rK   	monotonicrC   rQ   )r   end_times     r   rU   zStopWatch.elapsed   s7    ?&HH~''H34?2333r   c                 .    |                                   | S r   )startr$   s    r   r%   zStopWatch.__enter__   s    

r   c                 6    t          j                    | _        d S r   )rK   rW   rR   )r   r-   r.   r/   s       r   r2   zStopWatch.__exit__   s    .**r   c                 D    t          j                    | _        d | _        d S r   )rK   rW   rQ   rR   r$   s    r   rZ   zStopWatch.start   s    .**r   c                 N    | j         dS |                                 | j         k    S )NF)rP   rU   r$   s    r   expiredzStopWatch.expired   s$    = 5<<>>DM11r   r   )r3   r4   r5   r6   r   rD   rU   r%   r2   rZ   r^   r   r   r   rN   rN   v   s        $$   
8 8 8
4 4 4  + + +  2 2 2 2 2r   rN   )loggingr   rK   BLATHER	getLoggerr3   r   r
   r   objectr   r+   r8   r:   rN   r   r   r   <module>rc      s  &  				  g!!
, 
, 
,         D< < < < < < < <. . . . .F . . .<#2 #2 #2 #2 #2 #2 #2 #2 #2 #2r   