o
    
jt                     @  sB  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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#G dd dej$Z%dOd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#ej,Z-	dPdQd'd(Z.ej/dPdRd*d+Z0ej/	dPdSd/d0Z1ej/	dPdSd1d2Z2ej/	dPdTd5d6Z3G d7d8 d8Z4dUdVd@dAZ5dWdDdEZ6ej7dFkr
ddl8Z8ej/dXdHdIZ9dYdKdLZ:dS ddl;Z;ddl<Z<ej/dXdMdIZ9dYdNdLZ:dS )Zz
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Vc                   @  s   e Zd ZU ded< dS )_BufferedTextPagerStreamz
t.BinaryIObufferN)__name__
__module____qualname____annotations__ r   r   E/home/kuhnn/.local/lib/python3.10/site-packages/click/_termui_impl.pyr   $   s   
 r   streamt.BinaryIO | t.TextIOreturn%t.TypeGuard[_BufferedTextPagerStream]c                 C  s   t | dd d uS )Nr   )getattr)r   r   r   r   _has_binary_buffer(   s   r    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widthr   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.   r0   r1   r2   r3   r5   r6   r8   r9   r;   r   r   r=   r?   r@   _completed_intervalsrB   	autowidthoperatorrE   	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.   r0   r1   r2   r3   r5   r6   r8   r9   r;   r=   r?   r@   rB   rE   r   r   r   __init__9   sV   




zProgressBar.__init__ProgressBar[V]c                 C  s   d| _ |   | S )NT)rW   render_progressr[   r   r   r   	__enter__   s   zProgressBar.__enter__exc_typetype[BaseException] | None	exc_valueBaseException | NonetbTracebackType | Nonec                 C  s   |    d S N)render_finish)r[   ra   rc   re   r   r   r   __exit__      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.)rW   RuntimeErrorr^   	generatorr_   r   r   r   __iter__   s   zProgressBar.__iter__r   c                 C  s   t t| S rg   )nextrN   r_   r   r   r   __next__   rj   zProgressBar.__next__c                 C  s*   | j s| jsd S | jt | j  d S rg   )r3   rY   r=   write	AFTER_BARflushr_   r   r   r   rh      s   zProgressBar.render_finishfloatc                 C  s(   | j rdS t| jt| jpdpd dS )N      ?r   )rU   minrO   ru   r,   r_   r   r   r   pct   s   zProgressBar.pctc                 C  s"   | j sdS t| j tt| j  S Ng        )rP   sumru   lenr_   r   r   r   time_per_iteration   s   zProgressBar.time_per_iterationc                 C  s&   | j d ur| js| j| j | j  S dS ry   )r,   rU   r|   rO   r_   r   r   r   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)r   	day_labelhms02:rD   )rT   rA   r}   format_)r[   rK   secondsminuteshoursr   r   r   
format_eta   s$   
zProgressBar.format_etac                 C  s(   t | j}| jd ur|d| j 7 }|S )N/)r/   rO   r,   )r[   rO   r   r   r   
format_pos   s   

zProgressBar.format_posc                 C  s   t | jd dddd  S )Nd   z 4%r   )rA   rx   r_   r   r   r   
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      ?rD   )r,   rA   rx   rB   r.   r0   rU   listr|   mathcosrO   join)r[   
bar_lengthbarcharsr   r   r   
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)r6   r,   r8   appendr   r   r5   rT   rU   r   r9   rX   r1   r;   r   r2   r   rstrip)r[   r6   	info_bits	item_infor   r   r   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=   r?   r   r&   rD   F)r=   r?   nl)r3   rY   rZ   r;   r   r=   r?   rH   shutilrB   r   r   maxget_terminal_sizecolumnsrV   r   
BEFORE_BARr   rt   )	r[   bufr   	old_widthclutter_length	new_widthclear_widthlineline_lenr   r   r   r^      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 )NTrv   i)rO   r,   rU   rQ   rS   rR   rP   rT   )r[   r   stepr   r   r   	make_step-  s   
zProgressBar.make_steprX   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   )rX   rG   r@   r   r^   )r[   r   rX   r   r   r   updateC  s   
zProgressBar.updatec                 C  s   d| _ d | _d| _d S )NFT)rT   rX   rU   r_   r   r   r   finish]  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.
        rl   Nr   r   )	rW   rm   rY   rN   rX   rG   r^   r   r   )r[   rvr   r   r   rn   b  s   

zProgressBar.generator)Nr%   r&   r'   r(   FTNFNNNNr   r)   )"r*   r+   r,   r-   r.   r/   r0   r/   r1   r/   r2   r/   r3   r4   r5   r4   r6   r7   r8   r4   r9   r:   r;   r<   r=   r>   r?   r7   r@   rA   rB   rA   r   rC   )r   r]   )ra   rb   rc   rd   re   rf   r   rC   )r   rk   )r   r   )r   rC   )r   ru   r   r/   )r   rA   r   rC   rg   )r   rA   rX   r   r   rC   )r   r   r   r\   r`   ri   ro   rq   rh   propertyrx   r|   r}   r   r   r   r   r   r^   r   r   r   rn   r   r   r   r   r$   8   sL    
G










.
r$   c                      s,   e Zd Zd fddZd fddZ  ZS )MaybeStripAnsir   t.IO[bytes]r?   r4   kwargst.Anyc                  s   t  j|fi | || _d S rg   )superr\   r?   )r[   r   r?   r   	__class__r   r   r\     s   
zMaybeStripAnsi.__init__textr/   r   rA   c                   s   | j st|}t |S rg   )r?   r   r   rr   r[   r   r   r   r   rr     s   zMaybeStripAnsi.write)r   r   r?   r4   r   r   )r   r/   r   rA   )r   r   r   r\   rr   __classcell__r   r   r   r   r     s    r   r?   r7   9t.ContextManager[tuple[t.BinaryIO | t.TextIO, str, bool]]c                 C  s   t  }|du r
t }ttjrt|st|| S ttj	
dd}|r0tr+t|| S t|| S tj	
ddv r=t|| S tsEtjdrKtdg| S tdg| S )	z2Decide what method to use for paging through text.NPAGERrD   TERM)dumbemacsos2moreless)r   r   r   sysstdin
_nullpagershlexsplitosenvirongetr   _tempfilepager
_pipepagerplatform
startswith)r?   stdoutpager_cmd_partsr   r   r   _pager_contextmanager  s   



r   !t.Generator[t.TextIO, None, None]c              	   c  s    t | d5\}}} t|rt|j| |d}nt|tjr$t|| |d}z	|V  W |  n|  w W d   dS 1 s>w   Y  dS )zContext manager.
    Yields a writable file-like object which can be used as an output pager.
    .. versionadded:: 8.4
    :param color: controls if the pager supports ANSI colors or not.  The
                  default is autodetection.
    )r?   )r?   encodingN)r   r    r   r   
isinstancerK   BinaryIOrt   )r?   r   r   r   r   r   get_pager_file  s   "r   	cmd_parts	list[str]3t.Iterator[tuple[t.BinaryIO | t.TextIO, str, bool]]c                 c  s   | st  pt }|ddfV  dS ddl}| d }| dd }||}|s4t  p+t }|ddfV  dS t| }|j}ddl}	tt	j
}
|du ro|dkrot	j
dd d	| }|sed
|
d< d}n
d|v smd|v rod}|du rud}|	jt|g| d|	j|
ddd}ttj|j}t|}zGz|||fV  W n ty   Y n ty } 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
    produced by :func:`shlex.split`. The command is resolved to an absolute
    path with :func:`shutil.which` as recommended by the
    :mod:`subprocess` docs for Windows compatibility.

    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.
    utf-8FNr   r   r   LESSrD   r&   -RTrRreplace)shellr   enverrorsr   )r   r   r   whichr   absolutename
subprocessdictr   r   r   r   Popenr/   PIPErK   rL   r   r   r   BrokenPipeError	Exception	terminateclosewaitKeyboardInterrupt)r   r?   r   r   cmd
cmd_paramscmd_filepathcmd_pathcmd_namer   r   
less_flagscr   r   er   r   r   r     s   

	

r   c              	   c  s    | st  pt }|ddfV  dS ddl}ddl}| d }||}|s2t  p)t }|ddfV  dS t| }ddl}tt	j
}	|du rGd}|jddd}
z&ttj|
|	|fV  |
  |
  |t||
jg W t|
j dS t|
j w )a   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 resolved to an absolute path with
    :func:`shutil.which`.
    r   FNr   wb)modedelete)r   r   r   r   r   r   r   tempfiler   r   r   NamedTemporaryFilerK   rL   r   rt   r   callr/   r   r   unlink)r   r?   r   r   r   r   r   r   r   r   fr   r   r   r   .  s2   

r   t.TextIO&t.Iterator[tuple[t.TextIO, str, bool]]c                 c  s&    t | }|du rd}| ||fV  dS )z>Simply print unformatted text.  This is the ultimate fallback.NFr
   )r   r?   r   r   r   r   r   a  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_saver4   	extensionr/   r   rC   c                 C  s   || _ || _|| _|| _d S rg   )r	  r   r  r  )r[   r	  r   r  r  r   r   r   r\   m  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   )r[   keyr   r   r	  r   r   r   
get_editory  s   
zEditor.get_editor	filenamescabc.Iterable[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)	r[   r  r   r   r	  r   r   	exit_coder   r   r   r   
edit_files  s4   
zEditor.edit_filesr   bytes | bytearraybytes | Nonec                 C     d S rg   r   r   r   r   r   edit     zEditor.editc                 C  r  rg   r   r   r   r   r   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-sigr   zeditor-)prefixsuffixr      rb)r   r   bytes	bytearrayendswithr   r   encodemkstempr  r   fdopenrr   utimepathgetatimegetmtimer  r  r  openreaddecode)	r[   r   r   datafdr   r  	timestampr   r   r   r   r    s:   
$

)NNTr  )
r	  r<   r   r
  r  r4   r  r/   r   rC   r   )r  r  r   rC   )r   r  r   r  )r   r<   r   r<   )r   r!  r   r"  )	r   r   r   r\   r  r  rK   overloadr  r   r   r   r   r  l  s    

r  Furlr/   r   r4   locaterA   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rr|r_|| } dd|  g}z|	|W S  t
y^   Y dS w zt|  W dS  t
yq   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   r9  r/   r   c                 S  s*   ddl m} | dr|| dd  } | S )Nr   )unquotezfile://   )urllib.parser;  r   )r9  r;  r   r   r   _unquote_file  s   
zopen_url.<locals>._unquote_filedarwinr2  z-Wr   z	/dev/nullw)stderrexplorerz/select,   cygstartz-w.zxdg-open)zhttp://zhttps://r   )r9  r/   r   r/   )r   r   r   r   r2  r   r   r   r   r  r  r   	startfiler	   r/  dirnamer   
webbrowser)	r9  r   r:  r   r>  r  nullr   rH  r   r   r   open_url  sp   








rJ  chrC   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)rK  r   r   r   _translate_ch_to_exc&  s   rP  win32cabc.Iterator[int]c                   c  s    dV  d S )NrF   r   r   r   r   r   raw_terminal4  s   
rS  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)    à)rK   rL   Callabler/   msvcrtgetwchegetwchrP  )r   funcr   r   r   r   getchar8  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   r2  filenotermios	tcgetattrttysetraw	tcsetattr	TCSADRAINr   rt   r   error)r  r6  old_settingsr   r   r   rS  j  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   )rS  r   r3  r4  r   r   r   r   r   rr   rP  )r   r6  rK  r   r   r   r[    s   $)r   r   r   r   rg   )r?   r7   r   r   )r?   r7   r   r   )r   r   r?   r7   r   r   )r   r  r?   r7   r   r  )FF)r9  r/   r   r4   r:  r4   r   rA   )rK  r/   r   rC   )r   rR  )r   r4   r   r/   )=__doc__
__future__r   collections.abcabccabc
contextlibior   r   r   r   rQ   typingrK   r   r   r   pathlibr   typesr   _compatr   r	   r   r   r   r   r   
exceptionsr   utilsr   TypeVarr   Protocolr   r    r   r   rs   Genericr$   TextIOWrapperr   r   contextmanagerr   r   r   r   r  rJ  rP  r   rW  rS  r[  r]  r_  r   r   r   r   <module>   s|    


  Ng2
t
F/