o
    c                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
 d dlmZ eeZG dd dZG dd deZG d	d
 d
eZG dd dZe jdedeeddf fddZdZdZe jdee ded fddZdS )    N)IO	GeneratorOptional)WINDOWS)get_indentationc                   @   s(   e Zd ZdddZdeddfddZdS )	SpinnerInterfacereturnNc                 C      t  NNotImplementedErrorself r   G/opt/certbot/lib/python3.10/site-packages/pip/_internal/cli/spinners.pyspin      zSpinnerInterface.spinfinal_statusc                 C   r	   r
   r   r   r   r   r   r   finish   r   zSpinnerInterface.finishr   N)__name__
__module____qualname__r   strr   r   r   r   r   r      s    
r   c                	   @   sd   e Zd Z			ddedeee  dedefdd	Zd
eddfddZdddZ	deddfddZ
dS )InteractiveSpinnerN-\|/      ?messagefile
spin_charsmin_update_interval_secondsc                 C   s\   || _ |d u r
tj}|| _t|| _d| _t|| _	| j
dt  | j  d  d| _d S )NF z ... r   )_messagesysstdout_fileRateLimiter_rate_limiter	_finished	itertoolscycle_spin_cyclewriter   _width)r   r   r   r    r!   r   r   r   __init__   s   

zInteractiveSpinner.__init__statusr   c                 C   s\   | j rJ d| j }| j|d| j  |  | j| t|| _| j  | j  d S )Nr"   )r)   r.   r&   r-   lenflushr(   reset)r   r0   backupr   r   r   _write+   s   



zInteractiveSpinner._writec                 C   s,   | j rd S | j sd S | t| j d S r
   )r)   r(   readyr6   nextr,   r   r   r   r   r   7   s
   
zInteractiveSpinner.spinr   c                 C   s4   | j rd S | | | jd | j  d| _ d S )N
T)r)   r6   r&   r-   r3   r   r   r   r   r   >   s   


zInteractiveSpinner.finish)Nr   r   r   )r   r   r   r   r   r   floatr/   r6   r   r   r   r   r   r   r      s     


r   c                   @   sR   e Zd ZddededdfddZdeddfd	d
ZdddZdeddfddZdS )NonInteractiveSpinner      N@r   r!   r   Nc                 C   s$   || _ d| _t|| _| d d S )NFstarted)r#   r)   r'   r(   _update)r   r   r!   r   r   r   r/   L   s   
zNonInteractiveSpinner.__init__r0   c                 C   s(   | j rJ | j  td| j| d S )Nz%s: %s)r)   r(   r4   loggerinfor#   )r   r0   r   r   r   r>   R   s   

zNonInteractiveSpinner._updatec                 C   s&   | j rd S | j sd S | d d S )Nzstill running...)r)   r(   r7   r>   r   r   r   r   r   W   s
   
zNonInteractiveSpinner.spinr   c                 C   s&   | j rd S | d| d d| _ d S )Nzfinished with status ''T)r)   r>   r   r   r   r   r   ^   s   
zNonInteractiveSpinner.finish)r<   r   )	r   r   r   r   r:   r/   r>   r   r   r   r   r   r   r;   K   s
    
r;   c                   @   s6   e Zd ZdeddfddZdefddZd
dd	ZdS )r'   r!   r   Nc                 C   s   || _ d| _d S )Nr   )_min_update_interval_seconds_last_update)r   r!   r   r   r   r/   f   s   
zRateLimiter.__init__c                 C   s   t   }|| j }|| jkS r
   )timerC   rB   )r   nowdeltar   r   r   r7   j   s   

zRateLimiter.readyc                 C   s   t   | _d S r
   )rD   rC   r   r   r   r   r4   o   s   zRateLimiter.resetr   )r   r   r   r:   r/   boolr7   r4   r   r   r   r   r'   e   s    r'   r   r   c                 c   s    t j rt tjkrt| }nt| }zt	t j |V  W d    n1 s*w   Y  W n t
y=   |d   tyI   |d  w |d d S )Ncancelederrordone)r$   r%   isattyr?   getEffectiveLevelloggingINFOr   r;   hidden_cursorKeyboardInterruptr   	Exception)r   spinnerr   r   r   open_spinners   s"   


rS   z[?25lz[?25hr   )NNNc              	   c   s^    t rd V  d S |  rt tjkrd V  d S | t zd V  W | t d S | t w r
   )	r   rK   r?   rL   rM   rN   r-   HIDE_CURSORSHOW_CURSOR)r   r   r   r   rO      s   


rO   )
contextlibr*   rM   r$   rD   typingr   r   r   pip._internal.utils.compatr   pip._internal.utils.loggingr   	getLoggerr   r?   r   r   r;   r'   contextmanagerr   rS   rT   rU   rO   r   r   r   r   <module>   s&    
5 