o
    Yi                     @   s   d dl Z d dlZd dlZd dlZd dlmZ ejd ZG dd dejZ	de
defdd	Zde
defd
dZdejdejf defddZeje
eef ZdedefddZdejdejf defddZdejdejf dejdejej f fddZdS )    N)	timedelta   c                
   @   s4   e Zd ZdZdededejdejdejf
ddZd	S )
LoggerProtocolz}
    Protocol used by utils expecting a logger (eg: before_log).

    Compatible with logging, structlog, loguru, etc...
    levelmsgargskwargsreturnc                O   s   d S N )selfr   r   r   r   r   r   I/home/kim/smarthome/.venv/lib/python3.10/site-packages/tenacity/_utils.pylog#   s   zLoggerProtocol.logN)	__name__
__module____qualname____doc__intstrtypingAnyr   r   r   r   r   r      s    r   pos_numr	   c                 C   sT   | dkrdS | dkrdS | dkrdS | dkrdS d	|   kr#d
kr$dS  t | d S )Nr   th   str   nd   rd      
   find_ordinalr   r   r   r   r"   (   s   r"   c                 C   s   |  t |  S r
   r!   r#   r   r   r   
to_ordinal8   s   r$   cb.c                 C   s   g }z| | j W n ty%   z| | j W n	 ty"   Y nw Y nw |s,t| S z| jr7|d| j W n	 tyA   Y nw d|S )znGet a callback fully-qualified name.

    If no name can be produced ``repr(cb)`` is called and returned.
    r   .)appendr   AttributeErrorr   reprr   insertjoin)r%   segmentsr   r   r   get_callback_name<   s*   
r-   	time_unitc                 C   s   t t| tr|  S | S r
   )float
isinstancer   total_seconds)r.   r   r   r   
to_secondsX   s
   r2   callc                 C   sH   t | rdS t | rdS t| tjo| j}|pt| dd }t |S )NFT__call__)inspectisclassiscoroutinefunctionr0   	functoolspartialfuncgetattr)r3   Zpartial_callZdunder_callr   r   r   is_coroutine_callable^   s   


r<   c                    s0   t  r S dtjdtjdtjf fdd}|S )Nr   r   r	   c                     s    | i |S r
   r   )r   r   r3   r   r   innern   s   z!wrap_to_async_func.<locals>.inner)r<   r   r   )r3   r>   r   r=   r   wrap_to_async_funch   s    r?   )r8   r5   sysr   datetimer   maxsizeZMAX_WAITProtocolr   r   r   r"   r$   Callabler   r-   Unionr/   Ztime_unit_typer2   boolr<   	Awaitabler?   r   r   r   r   <module>   s$   

