o
    +ca[                  	   @   sL  d 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 edZejdkrkdZdZndZdZG dd deje Zd6deje dej e! ddfddZ"deje dedej e! ddfddZ#deje dedej e! ddfdd Z$d!ej%deje dej e! ddfd"d#Z&G d$d% d%Z'd7d'ed(e!d)e!de(fd*d+Z)d,edej e* fd-d.Z+erddl,Z,ej-dej.e( fd/d0Z/d1e!defd2d3Z0dS ddl1Z1ddl2Z2ej-dej.e( fd4d0Z/d1e!defd5d3Z0dS )8z
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.
    N)gettext   )_default_text_stdout)CYGWIN)get_best_encoding)isatty)open_stream)
strip_ansi)term_len)WIN)ClickException)echoVnt
z[?25lz[?25h
c                !   @   s  e Zd Z															dBd
ejeje  deje dedededede	deje	 de	dejej
eje geje f  deje dejej deje	 dededdf ddZdCddZdd Zdeje fd d!Zdefd"d#ZdDd$d%Zedefd&d'Zedefd(d)Zedefd*d+Zdefd,d-Zdefd.d/Zdefd0d1Zdefd2d3Zdefd4d5ZdDd6d7Zd8eddfd9d:ZdEd8ed;eje ddfd<d=ZdDd>d?Z deje fd@dAZ!dS )FProgressBarN# %(bar)s  TFr      iterablelength	fill_char
empty_charbar_templateinfo_sepshow_etashow_percentshow_positem_show_funclabelfilecolorupdate_min_stepswidthreturnc                 C   s*  || _ || _|| _|| _|| _|| _|	| _|
| _|pd| _|d u r$t	 }|| _
|| _|| _d| _|| _|dk| _|d u rMddlm} ||d}|dkrMd }|d u rd|d u rYtdttjt t|}t|| _|| _d| _g | _t  | _| _d| _d| _ d | _!d| _"d | _#t$| j
 | _%d | _&d S )N r   )length_hintziterable or length is requiredF)'r   r   r   r   r   r   r    r!   r"   r   r#   r$   r%   _completed_intervalsr&   	autowidthoperatorr)   	TypeErrortcastIterabler   rangeiterr   posavgtimestartlast_eta	eta_knownfinished	max_widthenteredcurrent_itemr   	is_hidden
_last_line)selfr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r)    rA   4/usr/lib/python3/dist-packages/click/_termui_impl.py__init__$   sL   




zProgressBar.__init__c                 C   s   d| _ |   | S )NT)r<   render_progressr@   rA   rA   rB   	__enter__`   s   zProgressBar.__enter__c                 C   s   |    d S N)render_finish)r@   exc_type	exc_valuetbrA   rA   rB   __exit__e   s   zProgressBar.__exit__c                 C   s   | j std|   |  S )N.You need to use progress bars in a with block.)r<   RuntimeErrorrD   	generatorrE   rA   rA   rB   __iter__h   s   zProgressBar.__iter__c                 C   s   t t| S rG   )nextr3   rE   rA   rA   rB   __next__n   s   zProgressBar.__next__c                 C   s$   | j rd S | jt | j  d S rG   )r>   r#   write	AFTER_BARflushrE   rA   rA   rB   rH   v   s   zProgressBar.render_finishc                 C   s(   | j rdS t| jt| jpdpd dS )N      ?r   )r:   minr4   floatr   rE   rA   rA   rB   pct|   s   zProgressBar.pctc                 C   s"   | j sdS t| j tt| j  S Ng        )r5   sumrX   lenrE   rA   rA   rB   time_per_iteration   s   zProgressBar.time_per_iterationc                 C   s&   | j d ur| js| j| j | j  S dS rZ   )r   r:   r]   r4   rE   rA   rA   rB   eta   s   zProgressBar.etac                 C   s   | j rAt| j}|d }|d }|d }|d }|d }|d }|dkr4| d|dd|dd|dS |dd|dd|dS dS )N<      r   zd 02:r(   )r9   intr^   )r@   r/   secondsminuteshoursrA   rA   rB   
format_eta   s   
 zProgressBar.format_etac                 C   s(   t | j}| jd ur|d| j 7 }|S )N/)strr4   r   )r@   r4   rA   rA   rB   
format_pos   s   

zProgressBar.format_posc                 C   s   t | jd dddd  S )Nd   z 4%r   )rc   rY   rE   rA   rA   rB   
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      ?r(   )r   rc   rY   r&   r   r   r:   listr]   mathcosr4   join)r@   
bar_lengthbarcharsrA   rA   rB   
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"   rs   info)r   r   r    appendrj   rm   r   r9   r:   rg   r!   r=   r   r"   ru   r   rq   rstrip)r@   r   	info_bits	item_inforA   rA   rB   format_progress_line   s,   


z ProgressBar.format_progress_linec           	      C   sD  dd l }| jr| j| jkr| j| _t| j| j| jd d S g }| jrO| j}d| _t	| 
 }td| j| }||k rL|t |d| j  || _|| _| j}| jd urZ| j}|t | 
 }t	|}| jd u sq| j|k rt|| _|| |d||   d|}|| jkr|| _t|| j| jdd | j  d S d S )Nr   )r#   r$   r   r(   F)r#   r$   nl)shutilr>   r?   r"   r   r#   r$   r,   r&   r
   r{   maxget_terminal_sizecolumnsrw   
BEFORE_BARr;   rq   rU   )	r@   r}   buf	old_widthclutter_length	new_widthclear_widthlineline_lenrA   rA   rB   rD      sB   





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)r4   r   r:   r6   r8   r7   r5   r9   )r@   r   steprA   rA   rB   	make_step  s   
zProgressBar.make_stepr=   c                 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   )r=   r+   r%   r   rD   )r@   r   r=   rA   rA   rB   update  s   
zProgressBar.updatec                 C   s   d| _ d | _d| _d S )NFT)r9   r=   r:   rE   rA   rA   rB   finish1  s   
zProgressBar.finishc                 c   sn    | j std| jr| 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.
        rM   Nr   r   )	r<   rN   r>   r3   r=   r+   rD   r   r   )r@   rvrA   rA   rB   rO   6  s   

zProgressBar.generator)Nr   r   r   r   TNFNNNNr   r   )r'   r   )r'   NrG   )"__name__
__module____qualname__r/   Optionalr1   r   rc   ri   boolCallableTextIOrC   rF   rL   IteratorrP   rR   rH   propertyrX   rY   r]   r^   rg   rj   rm   ru   r{   rD   r   r   r   rO   rA   rA   rA   rB   r   #   s    	
 


<

-
r   rO   r$   r'   c              	   C   s2  t  }ttjrt|st|| |S tjddpd }|r-t	r't
| ||S t| ||S tjddv r;t|| |S t	sCtjdrIt
| d|S ttdr[td	d
kr[t| d|S d
dl}| \}}t| z(ttdrtd| dd
krt| d|W t| S t|| |W t| S t| w )z2Decide what method to use for paging through text.PAGERNr(   TERM)dumbemacsos2zmore <systemz(less) 2>/dev/nullr   lesszmore ""more)r   r   sysstdin
_nullpagerosenvirongetstripr   _tempfilepager
_pipepagerplatform
startswithhasattrr   tempfilemkstempcloseunlink)rO   r$   stdout	pager_cmdr   fdfilenamerA   rA   rB   pagerX  s.   
 r   cmdc              	   C   s"  ddl }ttj}|ddd  }|du rB|d dkrBtjdd d	|dd  }|s8d
|d< d}n
d|v s@d|v rBd}|j|d|j	|d}t
t
j|j}t|}	z| D ]}
|sct|
}
||
|	d q[W n ttfyy   Y nw |  	 z|  W dS  ty   Y nw q)zqPage through text by feeding it to another program.  Invoking a
    pager through this might support colors.
    r   Nrh   r   r*   r   LESSr(   r   -RTrR)shellr   envreplace)
subprocessdictr   r   rsplitsplitr   rq   PopenPIPEr/   r0   BinaryIOr   r   r	   rS   encodeOSErrorKeyboardInterruptr   wait)rO   r   r$   r   r   
cmd_detail
less_flagscr   encodingtextrA   rA   rB   r   u  s>   
$

r   c           	   	   C   s   ddl }| \}}d| }|st|}ttj}t|dd }||	| W d   n1 s4w   Y  zt
| d| d W t
| t
| dS t
| t
| w )z<Page through text by invoking a program on a temporary file.r   Nr(   wb "r   )r   r   rq   r	   r   r   r   r   rS   r   r   r   r   r   )	rO   r   r$   r   r   r   r   r   frA   rA   rB   r     s   



r   streamc                 C   s$   |D ]}|s
t |}| | qdS )z>Simply print unformatted text.  This is the ultimate fallback.N)r	   rS   )r   rO   r$   r   rA   rA   rB   r     s
   r   c                   @   s   e Zd Z				ddeje dejejeef  dededdf
d	d
ZdefddZ	deddfddZ
dejej dejej fddZdS )EditorNT.txteditorr   require_save	extensionr'   c                 C   s   || _ || _|| _|| _d S rG   )r   r   r   r   )r@   r   r   r   r   rA   rA   rB   rC     s   
zEditor.__init__c                 C   sf   | j d ur| j S dD ]}tj|}|r|  S q
trdS dD ]}td| ddkr0|  S qdS )N)VISUALEDITORnotepad)zsensible-editorvimnanozwhich z >/dev/null 2>&1r   vi)r   r   r   r   r   r   )r@   keyr   r   rA   rA   rB   
get_editor  s   
zEditor.get_editorr   c              
   C   s   dd l }|  }d }| jrtj }|| j z#|j| d| d|dd}| }|dkr9t	t
dj|dW d S  tyS } zt	t
dj||d	|d }~ww )
Nr   r   r   T)r   r   z{editor}: Editing failed)r   z{editor}: Editing failed: {e})r   e)r   r   r   r   r   copyr   r   r   r   _formatr   )r@   r   r   r   r   r   	exit_coder   rA   rA   rB   	edit_file  s,   
zEditor.edit_filer   c           	   	   C   s  dd l }|s	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 sPw   Y  t
|t
j|t
j|d
 f t
j|}| | | 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   r   r   r   r   fdopenrS   utimepathgetatimegetmtimer   r   r   openreaddecode)	r@   r   r   datar   namer   	timestampr   rA   rA   rB   edit  s:   
$


zEditor.edit)NNTr   )r   r   r   r/   r   ri   Mappingr   rC   r   r   AnyStrr   rA   rA   rA   rB   r     s&    
&r   Furlr   locatec           
      C   s  dd l }dtdtfdd}tjdkrCdg}|r|d |r#|d	 |||  td
d}z|j||d W |  S |  w t	rp|rV|| 
dd} d|  d}n| 
dd} |r`dnd}d| d|  d}t|S tr|rtj|| 
dd} d|  d}n| 
dd} |rdnd}d| d|  d}t|S 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'   c                 S   s*   ddl m} | dr|| dd  } | S )Nr   )unquotezfile://   )urllib.parser   r   )r   r   rA   rA   rB   _unquote_file*  s   
zopen_url.<locals>._unquote_filedarwinr   z-Wr   z	/dev/nullw)stderrr   r(   zexplorer /select,"z/WAITzstart z "" "z
cygstart "z-wz	cygstart r   .zxdg-open)zhttp://zhttps://r   )r   ri   r   r   rw   r   r   r   r   r   r   r   r   r   r   dirnamer   r   
webbrowser)
r   r   r   r   r  argsnullwait_strr   r  rA   rA   rB   open_url'  sX   







r  chc                 C   s6   | dkrt  | dkrtst | dkrtrt d S )N)r   r   EOFError)r  rA   rA   rB   _translate_ch_to_excc  s   r  c                   c   s    dV  d S )Nr*   rA   rA   rA   rA   rB   raw_terminals  s   
r  r   c                 C   s6   | rt j}nt j}| }|dv r|| 7 }t| |S )N)    à)msvcrtgetwchegetwchr  )r   funcr   rA   rA   rB   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   r   filenotermios	tcgetattrttysetraw	tcsetattr	TCSADRAINr   rU   r   error)r   r   old_settingsrA   rA   rB   r    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   )r  r   r   r   r   r   r   r   r   rS   r  )r   r   r  rA   rA   rB   r    s   $rG   )FF)3__doc__
contextlibro   r   r   r6   typingr/   r   r   _compatr   r   r   r   r   r	   r
   r   
exceptionsr   utilsr   TypeVarr   r   r   rT   Genericr   r1   ri   r   r   r   r   r   r   r   r   rc   r  BaseExceptionr  r  contextmanagerr   r  r  r  r  rA   rA   rA   rB   <module>   sx    

  $7&2


a<1