o
    Vh                     @  s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ er>d dlmZ d dlmZ d d	lmZ G d
d dZdS )    )annotationsN)contextmanager)TYPE_CHECKING)format_time)IO)Iterator)Match)Outputc                   @  s   e Zd ZdZdZdZdZdZdZdZ				d>d?ddZ
ed@ddZdAddZedBddZdCddZdDddZdEdFd#d$ZedGd(d)ZdDd*d+ZdDd,d-ZdHd0d1ZdCd2d3ZdBd4d5ZdId6d7ZdBd8d9Zd@d:d;ZdBd<d=ZdS )JProgressIndicatorz
    A process indicator.
    z {indicator} {message}z
 {message}z% {indicator} {message} ({elapsed:6s})z {message} ({elapsed:6s})Nd   ioIO | Outputfmt
str | Noneintervalintvalueslist[str] | NonereturnNonec                 C  s   t |tr|j}|| _|d u r|  }|| _|d u rg d}t|dk r(td|| _|| _	d | _
d | _d| _d| _d | _d | _d | _d| _d S )N)-\|/   zGThe progress indicator must have at least 2 indicator value characters.Fr   )
isinstancer   error_output_io_determine_best_format_fmtlen
ValueError	_interval_values_message_update_time_started_current_auto_running_auto_thread_start_time_last_message_length)selfr   r   r   r    r-   n/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/cleo/ui/progress_indicator.py__init__!   s,   

zProgressIndicator.__init__c                 C     | j S N)r$   r,   r-   r-   r.   messageI   s   zProgressIndicator.messager3   c                 C  s   || _ |   d S r1   )r$   _displayr,   r3   r-   r-   r.   set_messageM   s   zProgressIndicator.set_messagestrc                 C  s   | j | jt| j   S r1   )r#   r'   r    r2   r-   r-   r.   current_valueR   s   zProgressIndicator.current_valuec                 C  sF   | j rtd|| _d| _ t | _|  | j | _d| _| 	  d S )Nz#Progress indicator already started.Tr   )
r&   RuntimeErrorr$   timer*   !_get_current_time_in_millisecondsr"   r%   r'   r4   r5   r-   r-   r.   startV   s   
zProgressIndicator.startc                 C  sb   | j std| j sd S |  }| jd ur|| jk rd S || j | _|  jd7  _|   d S )N,Progress indicator has not yet been started.   )	r&   r9   r   is_decoratedr;   r%   r"   r'   r4   )r,   current_timer-   r-   r.   advanceb   s   
zProgressIndicator.advanceFreset_indicatorboolc                 C  sd   | j std| jd u s| jd u s| j  | j  || _|r#d| _|   | j	
d d| _ d S )Nr=   r    F)r&   r9   r)   r(   setjoinr$   r'   r4   r   
write_line)r,   r3   rB   r-   r-   r.   finishr   s   


zProgressIndicator.finishstart_messageend_messageIterator[ProgressIndicator]c              	   c  s    t  | _t j| jd| _| | | j  z| V  W n ttfy7   | j	
d | j  | j   w | j|dd dS )z 
        Auto progress.
        )targetrD   T)rB   N)	threadingEventr(   Thread_spinr)   r<   	ExceptionKeyboardInterruptr   rG   rE   rF   rH   )r,   rI   rJ   r-   r-   r.   auto   s   





zProgressIndicator.autoc                 C  sJ   | j d u s| j  s#|   td | j d u s!| j  r
d S d S d S d S )Ng?)r(   is_setrA   r:   sleepr2   r-   r-   r.   rP      s   
$zProgressIndicator._spinc                 C  s*   | j  rd S | td| j| j d S )Nz(?i){([a-z\-_]+)(?::([^}]+))?})r   is_quiet
_overwriteresub_overwrite_callbackr   r2   r-   r-   r.   r4      s   

zProgressIndicator._displaymatches
Match[str]c                 C  s<   t | d|d rtt| d|d  S |dS )N_formatter_r>   r   )hasattrgroupr7   getattr)r,   r[   r-   r-   r.   rZ      s   
z%ProgressIndicator._overwrite_callbackc                 C  s6   | j  r| j d | j | dS | j | dS )z>
        Overwrites a previous message to the output.
        z[2KN)r   r?   writerG   r5   r-   r-   r.   rW      s   
zProgressIndicator._overwritec                 C  sN   | j  }| j  r|r| jS | jS | j  r|r| jS | jS |r$| jS | jS r1   )	r   r?   is_very_verboseVERY_VERBOSEVERY_VERBOSE_NO_ANSI
is_verboseVERBOSE_NO_ANSINORMALNORMAL_NO_ANSI)r,   	decoratedr-   r-   r.   r      s   


z(ProgressIndicator._determine_best_formatc                 C  s   t t d S )Ni  )roundr:   r2   r-   r-   r.   r;      s   z3ProgressIndicator._get_current_time_in_millisecondsc                 C  r0   r1   )r8   r2   r-   r-   r.   _formatter_indicator      z&ProgressIndicator._formatter_indicatorc                 C  r0   r1   )r3   r2   r-   r-   r.   _formatter_message   rl   z$ProgressIndicator._formatter_messagec                 C  s    | j d usJ tt | j  S r1   )r*   r   r:   r2   r-   r-   r.   _formatter_elapsed   s   z$ProgressIndicator._formatter_elapsed)Nr   N)
r   r   r   r   r   r   r   r   r   r   )r   r   )r3   r   r   r   )r   r7   )r3   r7   r   r   )r   r   )F)r3   r7   rB   rC   r   r   )rI   r7   rJ   r7   r   rK   )r[   r\   r   r7   )r   r   )__name__
__module____qualname____doc__rg   rh   VERBOSErf   rc   rd   r/   propertyr3   r6   r8   r<   rA   rH   r   rS   rP   r4   rZ   rW   r   r;   rk   rm   rn   r-   r-   r-   r.   r
      s>    (












r
   )
__future__r   rX   rM   r:   
contextlibr   typingr   cleo._utilsr   
cleo.io.ior   r   r   cleo.io.outputs.outputr	   r
   r-   r-   r-   r.   <module>   s    