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_hintéÿÿÿÿz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 )Néd   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 )z¨Return 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ƒr‡t d|› d�¡d
kr‡t| 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�\}}z‚t
 |d	¡�}| |¡ W d   ƒ n1 sPw   Y  t
 |t
j |¡t
j |¡d
 f¡ t
j |¡}|  |¡ | jr…t
j |¡|kr…W t
 |¡ d S t|dƒ�}| ¡ }W d   ƒ n1 s™w   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¡|r‡tj || ƒ 
dd¡¡} d| › d�}n|  
dd¡} |r‘dnd}d|› d| › d�}t |¡S z"|r¯tj || ƒ¡p­d} n|| ƒ} | d| g¡}|rÁ| ¡ W S W dS  tyâ   |  d¡rß|sß|sßd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