o
    Tj{                     @  sN  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! ddl m"Z" e#dZ$G dd dej%Z&dPd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.	dQdRd(d)Z/ej0dQdSd+d,Z1ej0	dQdTd0d1Z2ej0	dQdTd2d3Z3ej0	dQdUd6d7Z4G d8d9 d9Z5dVdWdAdBZ6dXdEdFZ7ej8dGkrddl9Z9ej0dYdIdJZ:dZdLdMZ;dS ddl<Z<ddl=Z=ej0dYdNdJZ:dZdOdMZ;d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)KeepOpenFileVc                   @  s   e Zd ZU ded< dS )_BufferedTextPagerStreamz
t.BinaryIObufferN)__name__
__module____qualname____annotations__ r   r   H/var/www/html/ssl_env/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__:   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   updateD  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   c  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$   9   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Y\}}} d}t|rt|j| |d}|}z"ttj|V  W z|  W |dur2|  n$|dur<|  w w z|  W |durL|  w w |durV|  w w W d   dS 1 sbw   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.
    )r?   N)r?   encoding)	r   r    r   r   rK   rL   TextIOrt   detach)r?   r   r   wrapperr   r   r   get_pager_file  s2   





"r   	cmd_parts	list[str]3t.Iterator[tuple[t.BinaryIO | t.TextIO, str, bool]]c                 c  sL   | s$t  pt }t||}|V  W d   dS 1 sw   Y  dS ddl}| d }| dd }||}|sZt  p>t }t||}|V  W d   dS 1 sSw   Y  dS t| }|j}	ddl}
t	t
j}|du r|	dkrt
jdd d| }|sd|d< d	}n
d
|v sd|v rd	}|du rd}|
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.
    Nr   r   r   LESSrD   r&   -RTrRFreplace)shellr   enverrorsr   )r   r   r   r   whichr   absolutename
subprocessdictr   r   r   r   Popenr/   PIPErK   rL   BinaryIOr   r
   BrokenPipeError	Exception	terminateclosewaitKeyboardInterrupt)r   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  sD   | s$t  pt }t||}|V  W d   dS 1 sw   Y  dS ddl}ddl}| d }||}|sXt  p<t }t||}|V  W d   dS 1 sQw   Y  dS t| }ddl}	t	t
j}
|du rmd}|	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`.
    Nr   Fwb)modedelete)r   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  r   fr   r   r   r   C  sB   



r   t.TextIO&t.Iterator[tuple[t.TextIO, str, bool]]c                 c  s*    t | }|du rd}t| ||fV  dS )a  Simply print unformatted text. This is the ultimate fallback. Don't close the
    output stream in this case, since it's coming from elsewhere rather than our
    internal helpers.

    The stream is wrapped in :class:`~click.utils.KeepOpenFile` so that, as a
    borrowed stream, it is not closed by a ``with`` block. The wrapper that
    :func:`get_pager_file` builds around it is detached rather than closed.
    NF)r
   r   )r   r?   r   r   r   r   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_saver4   	extensionr/   r   rC   c                 C  s   || _ || _|| _|| _d S rg   )r
  r   r  r  )r[   r
  r   r  r  r   r   r   r\     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_editor  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-sigzutf-8zeditor-)prefixsuffixr      rb)r  
isinstance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    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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/   r   c                 S  s*   ddl m} | dr|| dd  } | S )Nr   )unquotezfile://   )urllib.parser=  r   )r;  r=  r   r   r   _unquote_file  s   
zopen_url.<locals>._unquote_filedarwinr4  z-Wr   z	/dev/nullw)stderrexplorerz/select,   cygstartz-w.zxdg-open)zhttp://zhttps://r   )r;  r/   r   r/   )r   r   r   r   r4  r   r   r   r   r  r  r   	startfiler	   r1  dirnamer   
webbrowser)	r;  r   r<  r   r@  r  nullr   rJ  r   r   r   open_url  sp   









rL  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)rM  r   r   r   _translate_ch_to_excJ  s   rR  win32cabc.Iterator[int]c                   c  s    dV  d S )NrF   r   r   r   r   r   raw_terminalX  s   
rU  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getwchrR  )r   funcr   r   r   r   getchar\  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   r4  filenotermios	tcgetattrttysetraw	tcsetattr	TCSADRAINr   rt   r   error)r  r8  old_settingsr   r   r   rU    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   )rU  r   r5  r6  r
   r   r   r   r   rr   rR  )r   r8  rM  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)r;  r/   r   r4   r<  r4   r   rA   )rM  r/   r   rC   )r   rT  )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   r   TypeVarr   Protocolr   r    r   r   rs   Genericr$   TextIOWrapperr   r   contextmanagerr   r   r   r   r  rL  rR  r   rY  rU  r]  r_  ra  r   r   r   r   <module>   s~    


  N%m8t
F/