
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    W?                     @   s  d Z ddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZ ejdkr|dZd	Znd
ZdZdd ZG dd deZd"ddZdd Zdd Zdd ZG dd deZd#ddZdd Zerddl Z dd  Z!nddl"Z"ddl#Z#d!d  Z!dS )$aY  
    click._termui_impl
    ~~~~~~~~~~~~~~~~~~

    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.

    :copyright: (c) 2014 by Armin Ronacher.
    :license: BSD, see LICENSE for more details.
    N   )	_default_text_stdout
range_typePY2isattyopen_stream
strip_ansiterm_lenget_best_encodingWIN)echo)ClickExceptionnt
z[?25lz[?25h
c                 C   s   z
t | W S  tk
r   zt| j}W n tk
r@   Y Y dS X z|| }W n tk
rf   Y Y dS X |tkst|ttfr|dk rY dS | Y S X dS )z%Returns the length hint of an object.Nr   )	len	TypeErrortype__length_hint__AttributeErrorNotImplemented
isinstanceintlong)objZget_hintZhint r   C/opt/alt/python38/lib/python3.8/site-packages/click/_termui_impl.py_length_hint   s$    


r   c                   @   s   e Zd Zd+d	d
Zdd Zdd Zdd Zdd Zedd Z	edd Z
edd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* ZeseZ[dS ),ProgressBarN# %(bar)s  TF   c                 C   s   || _ || _|| _|| _|| _|| _|	| _|
| _|p6d| _|d krHt	 }|| _
|| _|| _|dk| _|d krtt|}|d kr|d krtdt|}t|| _|| _|d k	| _d| _g | _t  | _| _d| _d| _d | _d| _d | _t| j
 | _d | _ d S )N r   ziterable or length is requiredF)!	fill_char
empty_charbar_templateinfo_sepshow_etashow_percentshow_positem_show_funclabelr   filecolorwidth	autowidthr   r   r   iterlengthlength_knownposavgtimestartlast_eta	eta_knownfinished	max_widthenteredcurrent_itemr   	is_hidden
_last_line)selfiterabler3   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r   r   __init__4   sD    



zProgressBar.__init__c                 C   s   d| _ |   | S )NT)r=   render_progressrA   r   r   r   	__enter__\   s    zProgressBar.__enter__c                 C   s   |    d S N)render_finish)rA   exc_type	exc_valuetbr   r   r   __exit__a   s    zProgressBar.__exit__c                 C   s   | j std|   | S )Nz.You need to use progress bars in a with block.)r=   RuntimeErrorrD   rE   r   r   r   __iter__d   s    zProgressBar.__iter__c                 C   s$   | j r
d S | jt | j  d S rG   )r?   r.   write	AFTER_BARflushrE   r   r   r   rH   j   s    zProgressBar.render_finishc                 C   s$   | j r
dS t| jt| jpd dS )N      ?r   )r;   minr5   floatr3   rE   r   r   r   pctp   s    zProgressBar.pctc                 C   s"   | j s
dS t| j tt| j  S Ng        )r6   sumrT   r   rE   r   r   r   time_per_iterationv   s    zProgressBar.time_per_iterationc                 C   s"   | j r| js| j| j| j  S dS rV   )r4   r;   rX   r3   r5   rE   r   r   r   eta|   s    zProgressBar.etac                 C   sn   | j rj| jd }|d }|d }|d }|d }|d }|d }|dkr\|}d||||f S d|||f S dS )Nr   <      r   z%dd %02d:%02d:%02dz%02d:%02d:%02dr$   )r:   rY   )rA   tsecondsminuteshoursdaysr   r   r   
format_eta   s    
zProgressBar.format_etac                 C   s"   t | j}| jr|d| j 7 }|S )Nz/%s)strr5   r4   r3   )rA   r5   r   r   r   
format_pos   s    
zProgressBar.format_posc                 C   s   dt | jd  dd  S )Nz% 4d%%d   r   )r   rU   rE   r   r   r   
format_pct   s    zProgressBar.format_pctc                 C   sH  | j }g }| jrPt| j| j }| j| }|| j| j|  7 }|d kr| j }nf| jrd| j| j }nRt	| j| jprd }| j
dkr| j|tt| j| j
 d d | j < d|}| jr||   |r||   | jr| jr| js||   | jd k	r(| | j}|d k	r(|| | j| j|| j|d  S )Nr   r   g       @g      ?r$   )r-   barinfo)r*   r4   r   rU   r0   r%   r&   r+   r;   listrX   mathcosr5   joinappendrc   re   r)   r:   ra   r,   r>   r'   r-   r(   rstrip)rA   r*   Z	info_bitsZ
bar_lengthrf   Z	item_infor   r   r   format_progress_line   sH    






z ProgressBar.format_progress_linec           
      C   s,  ddl m} d}| jr$| jg}d}ng }| jr| j}d| _t|  }td| d | }||k r|	t
 |	d| j  || _|| _| j}| jd k	r| j}|	t
 |  }t|}	| jd ks| j|	k r|	| _|	| |	d||	   d|}|| jkr(|| _t|| j| j|d | j  d S )	Nr   )get_terminal_sizeFTr   r    r$   )r.   r/   nl)Ztermuiro   r?   r-   r1   r0   r	   rn   maxrl   
BEFORE_BARr<   rk   r@   r   r.   r/   rQ   )
rA   ro   rp   bufZ	old_widthZclutter_lengthZ	new_widthZclear_widthlineZline_lenr   r   r   rD      s>    




zProgressBar.render_progressc                 C   sz   |  j |7  _ | jr&| j | jkr&d| _t | j dk r<d S t | _| jdd  | jt   | j  g | _| j| _d S )NTrR   i)	r5   r4   r3   r;   r7   r9   r6   r8   r:   rA   Zn_stepsr   r   r   	make_step   s    
(zProgressBar.make_stepc                 C   s   |  | |   d S rG   )rv   rD   ru   r   r   r   update   s    
zProgressBar.updatec                 C   s   d| _ d | _d| _d S )Nr   T)r:   r>   r;   rE   r   r   r   finish   s    zProgressBar.finishc                 C   sb   | j rt| jS zt| j}|| _W n* tk
rN   |   |   t Y nX | d |S d S )Nr   )r?   nextr2   r>   StopIterationrx   rD   rw   )rA   rvr   r   r   ry      s    



zProgressBar.next)Nr   r    r!   r"   TNFNNNNr#   )__name__
__module____qualname__rC   rF   rL   rN   rH   propertyrU   rX   rY   ra   rc   re   rn   rD   rv   rw   rx   ry   r   __next__r   r   r   r   r   2   sD                     
(


%)r   c              	   C   s&  t  }ttjrt|s$t|| |S tjddp4d }|rZt	rNt
| ||S t| ||S tjddkrvt|| |S t	stjdrt
| d|S ttdrtd	d
krt| d|S d
dl}| \}}t| z@ttdrtd| d
krt| d|W S t|| |W S t| X dS )z2Decide what method to use for paging through text.ZPAGERNr$   ZTERM)ZdumbZemacsZos2zmore <systemz(less) 2>/dev/nullr   lessz	more "%s"Zmore)r   r   sysstdin
_nullpagerosenvirongetstripr   _tempfilepager
_pipepagerplatform
startswithhasattrr   tempfilemkstempcloseunlink)textr/   stdoutZ	pager_cmdr   fdfilenamer   r   r   pager  s,    
 r   c           	   	   C   s  ddl }ttj}|ddd  }|dkr|d dkrtjddd	|dd  }|sld
|d< d}nd|ks|d|krd}|st| } |j	|d|j
|d}t|j}z"|j| |d |j  W n ttfk
r   Y nX z|  W n tk
r   Y qX qqdS )zqPage through text by feeding it to another program.  Invoking a
    pager through this might support colors.
    r   N/r   r   LESSr$   r    -RTrR)shellr   envreplace)
subprocessdictr   r   rsplitsplitr   rk   r   PopenPIPEr
   r   rO   encoder   IOErrorKeyboardInterruptwait)	r   cmdr/   r   r   Z
cmd_detailZ
less_flagscencodingr   r   r   r   .  s4    
 
r   c              	   C   s|   ddl }| }|st| } ttj}t|dd }|| | W 5 Q R X zt	|d | d  W 5 t	
| X dS )z<Page through text by invoking a program on a temporary file.r   Nwbz "")r   mktempr   r
   r   r   r   rO   r   r   r   r   )r   r   r/   r   r   r   fr   r   r   r   ]  s    
r   c                 C   s   |st |}| | dS )z>Simply print unformatted text.  This is the ultimate fallback.N)r   rO   )streamr   r/   r   r   r   r   l  s    r   c                   @   s.   e Zd ZdddZdd Zdd	 Zd
d ZdS )EditorNT.txtc                 C   s   || _ || _|| _|| _d S rG   )editorr   require_save	extension)rA   r   r   r   r   r   r   r   rC   u  s    zEditor.__init__c                 C   sb   | j d k	r| j S dD ]}tj|}|r|  S qtr:dS dD ]}td| dkr>|  S q>dS )N)ZVISUALZEDITORZnotepad)ZvimZnanozwhich %s >/dev/null 2>&1r   vi)r   r   r   r   r   r   )rA   keyr{   r   r   r   r   
get_editor|  s    


zEditor.get_editorc              
   C   s   dd l }|  }| jr.tj }|| j nd }z8|jd||f |dd}| }|dkrht	d| W n2 t
k
r } zt	d||f W 5 d }~X Y nX d S )Nr   z%s "%s"T)r   r   z%s: Editing failed!z%s: Editing failed: %s)r   r   r   r   r   copyrw   r   r   r   OSError)rA   r   r   r   r   r   Z	exit_codeer   r   r   	edit_file  s     
 zEditor.edit_filec           	   	   C   s   dd l }|pd}|r&|ds&|d7 }|jd| jd\}}ztrRd}|dd}nd}||}t	|d	}|
| |  tj|}| | | jrtj||krW <d S t|d
}z| }W 5 |  X |dddW S t| X d S )Nr   r$   r   zeditor-)prefixsuffixz	utf-8-sigz
zutf-8r   rb)r   endswithr   r   r   r   r   r   r   fdopenrO   r   pathgetmtimer   r   openreaddecode)	rA   r   r   r   namer   r   	timestampr{   r   r   r   edit  s4    




zEditor.edit)NNTr   )r|   r}   r~   rC   r   r   r   r   r   r   r   r   s  s     
r   Fc           	      C   sX  dd l }dd }tjdkrxdg}|r.|d |r<|d |||  tdd	}z|j||d
 W S |  X nLtr|r|| } d|| 	dd }nd|rdpd| 	ddf }t
|S zF|rt
j|| pd} n|| } |d| g}|r| W S W dS  tk
rR   | drL|sL|sLdd l}||  Y dS Y dS X d S )Nr   c                 S   sJ   zdd l }W n tk
r(   dd l }Y nX | drF|| dd  } | S )Nr   zfile://   )urllibImportErrorr   unquote)urlr   r   r   r   _unquote_file  s    
zopen_url.<locals>._unquote_filedarwinr   z-Wr   z	/dev/nullw)stderrzexplorer /select,"%s"r   r$   zstart %s "" "%s"z/WAIT.zxdg-open)zhttp://zhttps://r   )r   r   r   rl   r   r   r   r   r   r   r   r   r   dirnamer   r   
webbrowser)	r   r   Zlocater   r   argsnullr   r   r   r   r   open_url  sL    	





 



r   c                 C   s    | dkrt  | dkrt d S )N)r   EOFError)chr   r   r   _translate_ch_to_exc  s    r   c                 C   sV   t  }| rt | t| trRttjdd }|d k	rF||d}n|dd}|S )Nr   r   cp1252)	msvcrtZgetchZputcharr   r   getattrr   r   r   )r   r{   encr   r   r   getchar  s    
r   c                 C   s   t tjstd}| }ntj }d }zpt|}z4t| t|d}| rht tj	rhtj	| W 5 t|tj| tj	
  |d k	r|  X W n tjk
r   Y nX t| |ttjdS )Nz/dev/tty    r   )r   r   r   r   filenotermiosZ	tcgetattrZ	tcsetattrZ	TCSADRAINr   rQ   r   ttyZsetrawr   r   rO   errorr   r   r
   )r   r   r   Zold_settingsr   r   r   r   r     s(    





)N)FF)$__doc__r   r   r7   ri   _compatr   r   r   r   r   r   r	   r
   r   utilsr   
exceptionsr   r   rr   rP   r   objectr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s8   ,
 a
/M
3
