o
    j%                     @  s,  d Z ddlmZ ddlmZ ddlZddlZ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 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! e"dZ#ej$dkrdZ%dZ&ndZ%dZ&G dd dej'e# Z(G dd dZ)dQd d!Z*	dRdSd%d&Z+ej,dRdTd(d)Z-dUd.d/Z.ej,	dRdVd3d4Z/ej,	dRdVd5d6Z0ej,	dRdWd9d:Z1G d;d< d<Z2dXdYdBdCZ3dZdFdGZ4e
j5dHkrddl6Z6ej,d[dJdKZ7d\dMdNZ8dS ddl9Z9ddl:Z:ej,d[dOdKZ7d\dPdNZ8dS )]z
This module contains implementations for the termui module. To keep the
import time of Click down, some infrequently used functionality is
placed in this module and only imported as needed.
    )annotationsN)gettext)StringIO)Path)TracebackType   )_default_text_stdout)CYGWIN)get_best_encoding)isatty)
strip_ansi)term_len)WIN)ClickException)echoVnt
z[?25lz[?25h
c                   @  s   e Zd Z																dXdYd%d&ZdZd(d)Zd[d0d1Zd\d3d4Zd]d6d7Zd^d8d9Ze	d_d;d<Z
e	d_d=d>Ze	d_d?d@Zd`dAdBZd`dCdDZd`dEdFZd`dGdHZd`dIdJZd^dKdLZdadNdOZdbdcdRdSZd^dTdUZd\dVdWZdS )dProgressBarN# %(bar)s  FTr      iterablecabc.Iterable[V] | Nonelength
int | None	fill_charstr
empty_charbar_templateinfo_sephiddenboolshow_etashow_percentbool | Noneshow_positem_show_func)t.Callable[[V | None], str | None] | Nonelabel
str | Nonefilet.TextIO | Nonecolorupdate_min_stepsintwidthreturnNonec                 C  s>  || _ || _|| _|| _|| _|| _|	| _|
| _|| _|pd| _	|d u r.t
 }|d u r.t }|| _|| _|| _d| _|| _|dk| _|d u rWddlm} ||d}|dkrWd }|d u rk|d u rctdtdt|}t|| _|| _d| _g | _|  |  t  | _| _d| _d| _ d | _!d| _"d | _#t$| j| _%d | _&d S )N r   )length_hintziterable or length is requiredzcabc.Iterable[V]F)'r   r!   r"   r#   r$   r&   r'   r)   r*   r,   r   r   r.   r0   r1   _completed_intervalsr3   	autowidthoperatorr7   	TypeErrortcastrangeiterr   posavgtimestartlast_eta	eta_knownfinished	max_widthenteredcurrent_itemr   _is_atty
_last_line)selfr   r   r   r!   r"   r#   r$   r&   r'   r)   r*   r,   r.   r0   r1   r3   r7    rN   P/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/click/_termui_impl.py__init__,   sV   




zProgressBar.__init__ProgressBar[V]c                 C  s   d| _ |   | S )NT)rI   render_progressrM   rN   rN   rO   	__enter__s   s   zProgressBar.__enter__exc_typetype[BaseException] | None	exc_valueBaseException | NonetbTracebackType | Nonec                 C  s   |    d S N)render_finish)rM   rU   rW   rY   rN   rN   rO   __exit__x      zProgressBar.__exit__cabc.Iterator[V]c                 C  s   | j std|   |  S )N.You need to use progress bars in a with block.)rI   RuntimeErrorrR   	generatorrS   rN   rN   rO   __iter__   s   zProgressBar.__iter__r   c                 C  s   t t| S r[   )nextr@   rS   rN   rN   rO   __next__   r^   zProgressBar.__next__c                 C  sJ   | j r| | j  d| _ |   | js| jsd S | jt | j  d S )Nr   )	r9   	make_steprR   r$   rK   r.   write	AFTER_BARflushrS   rN   rN   rO   r\      s   zProgressBar.render_finishfloatc                 C  s(   | j rdS t| jt| jpdpd dS )N      ?r   )rG   minrA   rj   r   rS   rN   rN   rO   pct   s   zProgressBar.pctc                 C  s"   | j sdS t| j tt| j  S Ng        )rB   sumrj   lenrS   rN   rN   rO   time_per_iteration   s   zProgressBar.time_per_iterationc                 C  s&   | j d ur| js| j| j | j  S dS rn   )r   rG   rq   rA   rS   rN   rN   rO   eta   s   zProgressBar.etac                 C  s~   | j r=t| j}|d }|d }|d }|d }|d }|d }|dkr0dj|td|||dS |dd|dd|dS d	S )
N<      r   z#{d}{day_label} {h:02}:{m:02}:{s:02}d)ru   	day_labelhms02:r6   )rF   r2   rr   format_)rM   r=   secondsminuteshoursrN   rN   rO   
format_eta   s$   
zProgressBar.format_etac                 C  s(   t | j}| jd ur|d| j 7 }|S )N/)r    rA   r   )rM   rA   rN   rN   rO   
format_pos   s   

zProgressBar.format_posc                 C  s   t | jd dddd  S )Nd   z 4%r   )r2   rm   rS   rN   rN   rO   
format_pct   s   zProgressBar.format_pctc                 C  s   | j d urt| j| j }| j| }|| j| j|  7 }|S | jr)| j| j }|S t| j| jp0d }| jdkrM| j|tt	
| j| j d d | j < d|}|S )Nr   r   g       @g      ?r6   )r   r2   rm   r3   r   r!   rG   listrq   mathcosrA   join)rM   
bar_lengthbarcharsrN   rN   rO   
format_bar   s(   



zProgressBar.format_barc                 C  s   | j }g }| jd ur|d u r| j }| jr||   |r%||   | jr5| jr5| js5|| 	  | j
d urI| 
| j}|d urI|| | j| j|  | j|d  S )N)r,   r   info)r'   r   r)   appendr   r   r&   rF   rG   r   r*   rJ   r"   r,   r   r#   r   rstrip)rM   r'   	info_bits	item_inforN   rN   rO   format_progress_line   s,   


z ProgressBar.format_progress_linec           	      C  sX  | j rd S | js| j| jkr| j| _t| j| j| jd d S g }| jrYdd l}| j	}d| _	t
|  }td| j| }||k rV| jd urV|t |d| j  || _|| _	| j	}| jd urd| j}|t |  }t
|}| jd u s{| j|k r~|| _|| |d||   d|}|| jkr|| _t|| j| jdd | j  d S d S )N)r.   r0   r   r   r6   F)r.   r0   nl)r$   rK   rL   r,   r   r.   r0   r:   shutilr3   r   r   maxget_terminal_sizecolumnsrH   r   
BEFORE_BARr   ri   )	rM   bufr   	old_widthclutter_length	new_widthclear_widthlineline_lenrN   rN   rO   rR      sF   





zProgressBar.render_progressn_stepsc                 C  s   |  j |7  _ | jd ur| j | jkrd| _t | j dk r d S t | _| j r3t | j | j  }nt | j }| jdd  |g | _| jd u| _d S )NTrk   i)rA   r   rG   rC   rE   rD   rB   rF   )rM   r   steprN   rN   rO   rf   (  s   
zProgressBar.make_steprJ   V | Nonec                 C  sJ   |dur|| _ |  j|7  _| j| jkr#| | j |   d| _dS dS )a  Update the progress bar by advancing a specified number of
        steps, and optionally set the ``current_item`` for this new
        position.

        :param n_steps: Number of steps to advance.
        :param current_item: Optional item to set as ``current_item``
            for the updated position.

        .. versionchanged:: 8.0
            Added the ``current_item`` optional parameter.

        .. versionchanged:: 8.0
            Only render when the number of steps meets the
            ``update_min_steps`` threshold.
        Nr   )rJ   r9   r1   rf   rR   )rM   r   rJ   rN   rN   rO   update>  s   
zProgressBar.updatec                 C  s   d| _ d | _d| _d S )NFT)rF   rJ   rG   rS   rN   rN   rO   finishX  s   
zProgressBar.finishc                 c  sn    | j std| js| jE dH  dS | jD ]}|| _| jdkr$|   |V  | d q|   |   dS )zReturn a generator which yields the items added to the bar
        during construction, and updates the progress bar *after* the
        yielded block returns.
        r`   Nr   r   )	rI   ra   rK   r@   rJ   r9   rR   r   r   )rM   rvrN   rN   rO   rb   ]  s   

zProgressBar.generator)Nr   r   r   r   FTNFNNNNr   r   )"r   r   r   r   r   r    r!   r    r"   r    r#   r    r$   r%   r&   r%   r'   r(   r)   r%   r*   r+   r,   r-   r.   r/   r0   r(   r1   r2   r3   r2   r4   r5   )r4   rQ   )rU   rV   rW   rX   rY   rZ   r4   r5   )r4   r_   )r4   r   r4   r5   )r4   rj   r4   r    )r   r2   r4   r5   r[   )r   r2   rJ   r   r4   r5   )__name__
__module____qualname__rP   rT   r]   rc   re   r\   propertyrm   rq   rr   r   r   r   r   r   rR   rf   r   r   rb   rN   rN   rN   rO   r   +   sL    
G










.
r   c                   @  sL   e Zd ZdZddd	ZdddZdddZdddZdddZd ddZ	dS )!_PagerWriteraL  Wrap a pager's output stream to strip ANSI styling when colors are
    disabled.

    The wrapped stream is owned by the pager strategy that produced it, so this
    wrapper never closes it: ``_pipepager`` closes its pipe to signal EOF to the
    pager process, ``_tempfilepager`` closes and removes its temporary file, and
    ``_nullpager`` leaves an external stream such as ``sys.stdout`` untouched.

    The ``color`` attribute lets :func:`click.echo` detect that ANSI stripping
    is handled here, so it doesn't strip a second time (see
    :func:`._compat.should_strip_ansi`).
    streamt.TextIOr0   r%   r4   r5   c                 C  s   || _ || _d S r[   )_streamr0   )rM   r   r0   rN   rN   rO   rP     s   
z_PagerWriter.__init__textr    r2   c                 C  s   | j st|}| j|S r[   )r0   r   r   rg   rM   r   rN   rN   rO   rg     s   z_PagerWriter.writelinescabc.Iterable[str]c                 C  s   |D ]}|  | qd S r[   )rg   )rM   r   r   rN   rN   rO   
writelines  s   z_PagerWriter.writelinesc                 C     | j   d S r[   r   ri   rS   rN   rN   rO   ri     s   z_PagerWriter.flushc                 C  r   r[   r   rS   rN   rN   rO   close  s   z_PagerWriter.closenamet.Anyc                 C  s   t | j|S r[   )getattrr   )rM   r   rN   rN   rO   __getattr__  s   z_PagerWriter.__getattr__N)r   r   r0   r%   r4   r5   )r   r    r4   r2   )r   r   r4   r5   r   )r   r    r4   r   )
r   r   r   __doc__rP   rg   r   ri   r   r   rN   rN   rN   rO   r     s    




r   	cmd_parts	list[str]r4   tuple[Path, list[str]] | Nonec                 C  s>   | sdS ddl }|| d }|sdS t| | dd fS )a  Resolve a pager ``argv`` to an absolute command path and its parameters.

    The command is looked up with :func:`shutil.which`, which the
    :mod:`subprocess` docs recommend on every platform for an unqualified name:
    https://docs.python.org/3/library/subprocess.html#popen-constructor

    Returns ``None`` when there is no command to run or it is not on the path,
    leaving the caller to pick a fallback.
    Nr   r   )r   whichr   absolute)r   r   cmd_filepathrN   rN   rO   _resolve_pager_command  s   
r   r0   r(   .t.ContextManager[tuple[t.TextIO, bool | None]]c                 C  s   t  }|du r
t }ttjrt|st|| S ttj	
dd}|r't}ntj	
ddv r4t|| S tp;tjd}|rAdgndg}t|}|du rQt|| S |\}}|r]t||| S t||| S )	z2Decide what method to use for paging through text.NPAGERr6   TERM)dumbemacsos2moreless)r   r   r   sysstdin
_nullpagershlexsplitosenvirongetr   platform
startswithr   _tempfilepager
_pipepager)r0   stdoutpager_cmd_partsuse_tempfileresolvedcmd_path
cmd_paramsrN   rN   rO   _pager_contextmanager  s&   


r   !t.Generator[t.TextIO, None, None]c              	   c  sn    t | d'\}} t|t| d}zttj|V  W |  n|  w W d   dS 1 s0w   Y  dS )zContext manager.

    Yields a writable file-like object which can be used as an output pager.

    .. versionadded:: 8.4.0

    :param color: controls if the pager supports ANSI colors or not.  The
                  default is autodetection.
    )r0   N)r   r   r%   r=   r>   TextIOri   )r0   r   writerrN   rN   rO   get_pager_file  s   "r   less_envr    r   r%   c                 C  s   zt | }W n ty   |  }Y nw || }|D ])}|dr,| dkr+ dS q|drDt|dkrDd|dd  v rD dS qdS )	aw  Detect a raw-control-characters request in a ``less`` invocation.

    Parses the tokens of the ``LESS`` environment variable and the command
    line: only short-option clusters (``-R``, ``-rX``, ``-XrY``) and the
    ``--raw-control-chars`` long option request raw mode. Filenames and
    long-option values may carry the letter ``r`` without being such a
    request.
    z--z--raw-control-charsT-r   rNF)r   r   
ValueErrorr   casefoldrp   )r   r   
env_tokenstokenstokenrN   rN   rO   _less_uses_raw_mode  s    	
r   r   r   (t.Iterator[tuple[t.TextIO, bool | None]]c           
      c  sn   ddl }ttj}| j}tr| }|du r4|dkr4tjdd}t||r*d}n
|s4|s4d|d< d}|j	t
| g| d|j|d	dd
}ttj|j}zFz||fV  W n ty^   Y n tyo }	 z|  |	d}	~	ww W z|  W n	 ty   Y nw 	 z|  W dS  ty   Y nw qz|  W n	 ty   Y nw 	 z|  W 	 w  ty   Y nw q)a$  Page through text by feeding it to another program.

    Invokes the pager via :class:`subprocess.Popen` with an ``argv`` list.

    Invoking a pager through this might support colors: if piping to
    ``less`` and the user hasn't decided on colors, ``LESS=-R`` is set
    automatically.
    r   Nr   LESSr6   T-RFreplace)shellr   enverrorsr   )
subprocessdictr   r   stemr   r   r   r   Popenr    PIPEr=   r>   r   r   BrokenPipeError	Exception	terminater   waitKeyboardInterrupt)
r   r   r0   r   r   cmd_namer   cr   erN   rN   rO   r   $  sv   


	

r   c              	   c  s    ddl }ddl}ttj}|jd|ddd}z,ttj||fV  |	  |
  |t| g||j W |
  t|j dS |
  t|j w )a8  Page through text by invoking a program on a temporary file.

    Used as the primary pager strategy on Windows (where piping to
    ``more`` adds spurious ``\r\n``), and as a fallback on other
    platforms. The command is invoked with any parameters from ``PAGER``
    followed by the temporary file name.
    r   Nwr   F)modeencodingr   delete)r   tempfiler
   r   r   NamedTemporaryFiler=   r>   r   ri   r   callr    r   r   unlink)r   r   r0   r   r  r  frN   rN   rO   r   {  s    
r   r   r   c                 c  s    | |fV  dS )a&  Simply print unformatted text. This is the ultimate fallback.

    The stream comes from elsewhere (typically ``sys.stdout``), so its lifecycle
    is left untouched: :class:`_PagerWriter` never closes what it wraps, and it
    is the only thing :func:`get_pager_file` hands to the caller.
    NrN   )r   r0   rN   rN   rO   r     s   
r   c                   @  s^   e Zd Z				dd ddZd!ddZd"ddZejd#ddZejd$ddZd%ddZdS )&EditorNT.txteditorr-   r   cabc.Mapping[str, str] | Nonerequire_saver%   	extensionr    r4   r5   c                 C  s   || _ || _|| _|| _d S r[   )r  r   r  r  )rM   r  r   r  r  rN   rN   rO   rP     s   
zEditor.__init__c                 C  sh   | j d ur| j S dD ]}tj|}|r|  S q
trdS ddlm} dD ]}||d ur1|  S q%dS )N)VISUALEDITORnotepadr   )r   )zsensible-editorvimnanovi)r  r   r   r   r   r   r   )rM   keyr   r   r  rN   rN   rO   
get_editor  s   
zEditor.get_editor	filenames%cabc.Iterable[str | os.PathLike[str]]c           	   
   C  s   ddl }ddl}|  }d}| jrtj }|| j z#|j|	|t
| |d}| }|dkr=ttdj|dW dS  tyW } zttdj||d|d}~ww )z Open files in the user's editor.r   N)argsr   z{editor}: Editing failed)r  z{editor}: Editing failed: {e})r  r  )r   r   r  r   r   r   copyr   r   r   r   r   r   r}   r|   OSError)	rM   r  r   r   r  r   r   	exit_coder  rN   rN   rO   
edit_files  s4   
zEditor.edit_filesr   bytes | bytearraybytes | Nonec                 C     d S r[   rN   r   rN   rN   rO   edit     zEditor.editc                 C  r"  r[   rN   r   rN   rN   rO   r#    r$  str | bytes | bytearray | Nonestr | bytes | Nonec           	   	   C  s  dd l }|d u rd}n&t|ttfr|}n|r |ds |d7 }tr,|ddd}n|d}|jd| j	d\}}zt
|d	}|| W d    n1 sRw   Y  t
|t
j|t
j|d
 f t
j|}| |f | jrt
j||krW t
| d S t|d}| }W d    n1 sw   Y  t|ttfr|W t
| S |dddW t
| S t
| w )Nr       r   z
z	utf-8-sigzutf-8zeditor-)prefixsuffixwb   rb)r  
isinstancebytes	bytearrayendswithr   r   encodemkstempr  r   fdopenrg   utimepathgetatimegetmtimer  r  r	  openreaddecode)	rM   r   r  datafdr   r
  	timestampr   rN   rN   rO   r#    s:   
$

)NNTr  )
r  r-   r   r  r  r%   r  r    r4   r5   r   )r  r  r4   r5   )r   r   r4   r!  )r   r-   r4   r-   )r   r%  r4   r&  )	r   r   r   rP   r  r  r=   overloadr#  rN   rN   rN   rO   r    s    

r  Furlr   locater2   c           	      C  s  dd l }ddd}tjdkr?dg}|r|d	 |r|d
 |||  tdd}z|j||d W |  S |  w trp|r]|| } dd| g}z|	|W S  t
y\   Y dS w zt|  W dS  t
yo   Y dS w tr|r|| } dtj| g}ndg}|r|d ||  z|	|W S  t
y   Y dS w z"|rtj|| pd} n|| } |d| g}|r| W S W dS  t
y   | dr|s|sdd l}||  Y dS Y dS w )Nr   r?  r    r4   c                 S  s*   ddl m} | dr|| dd  } | S )Nr   )unquotezfile://   )urllib.parserA  r   )r?  rA  rN   rN   rO   _unquote_file"  s   
zopen_url.<locals>._unquote_filedarwinr8  z-Wr   z	/dev/nullr  )stderrexplorerz/select,   cygstartz-w.zxdg-open)zhttp://zhttps://r   )r?  r    r4   r    )r   r   r   r   r8  r   r   r   r   r  r  r   	startfiler	   r5  dirnamer   
webbrowser)	r?  r   r@  r   rD  r  nullr   rM  rN   rN   rO   open_url  sp   









rO  chr5   c                 C  s:   | dkrt  | dkrtst | dkrtrt d S d S )N)r   r   EOFError)rP  rN   rN   rO   _translate_ch_to_exce  s   rU  win32cabc.Iterator[int]c                   c  s    dV  d S )Nr8   rN   rN   rN   rN   rO   raw_terminals  s   
rX  r   c                 C  sZ   | rt t jg tf tj}nt t jg tf tj}| }|dv r'|| 7 }t| |S )N)    à)r=   r>   Callabler    msvcrtgetwchegetwchrU  )r   funcr   rN   rN   rO   getcharw  s   
r`  c                  c  s    t tjstd} |  }ntj }d } zAt|}z$t| |V  W t	|tj
| tj  | d ur>|   W d S W d S t	|tj
| tj  | d urW|   w w  tjyb   Y d S w )Nz/dev/tty)r   r   r   r8  filenotermios	tcgetattrttysetraw	tcsetattr	TCSADRAINr   ri   r   error)r
  r<  old_settingsrN   rN   rO   rX    s0   







c                 C  sj   t  (}t|dttjd}| rttjrtj	| t
| |W  d    S 1 s.w   Y  d S )N    r   )rX  r   r9  r:  r
   r   r   r   r   rg   rU  )r   r<  rP  rN   rN   rO   r`    s   $)r   r   r4   r   r[   )r0   r(   r4   r   )r0   r(   r4   r   )r   r    r   r   r4   r%   )r   r   r   r   r0   r(   r4   r   )r   r   r0   r(   r4   r   )FF)r?  r    r   r%   r@  r%   r4   r2   )rP  r    r4   r5   )r4   rW  )r   r%   r4   r    );r   
__future__r   collections.abcabccabc
contextlibr   r   r   r   rC   typingr=   r   r}   ior   pathlibr   typesr   _compatr   r	   r
   r   r   r   r   
exceptionsr   utilsr   TypeVarr   r   r   rh   Genericr   r   r   r   contextmanagerr   r   r   r   r   r  rO  rU  r   r\  rX  r`  rb  rd  rN   rN   rN   rO   <module>   sz    

  V
(-
V"t
F
/