
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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röd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s†t|ttfƒr†|dk rŒY 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s¨eZ[dS ),ÚProgressBarNú#ú ú%(bar)sú  TFé   c                 C   s   || _ || _|| _|| _|| _|| _|	| _|
| _|p6d| _|d krHt	ƒ }|| _
|| _|| _|dk| _|d krtt|ƒ}|d kr”|d krŒt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}nÊg }| 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	s†tj d¡r’t
| d|ƒS ttdƒr¶t d	¡d
kr¶t| 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r€tj dd¡d	 |dd… ¡ }|sld
|d< d}nd|ks|d|kr€d}|sŒt| ƒ} |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 qæX �qqæd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�\}}z®trRd}| dd¡}nd}| |¡}t 	|d	¡}| 
|¡ | ¡  tj |¡}|  |¡ | jr²tj |¡|kr²W ¢<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|r¨dpªd|  	dd¡f }t
 |¡S zF|ràt
j || ƒ¡pÜd} 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
