U
    ÌZj›[  ã                   @   s(  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rÖdZdZndZdZG dd„ deje ƒZd3eje ej e! ddœdd„Z"eje eej e! ddœdd„Z#eje eej e! ddœdd„Z$ej%eje ej e! ddœd d!„Z&G d"d#„ d#ƒZ'd4ee!e!e(d%œd&d'„Z)eej e* d(œd)d*„Z+e�rêddl,Z,ej-ej.e( d+œd,d-„ƒZ/e!ed.œd/d0„Z0n:ddl1Z1ddl2Z2ej-ej.e( d+œd1d-„ƒZ/e!ed.œd2d0„Z0dS )5z¿
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d4ejeje  eje eeeee	eje	 e	ejej
eje geje f  eje ejej eje	 eedd
œdd„Zd dœdd„Zdd„ Zeje dœdd„Zedœdd„Zddœdd„Zeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZedœdd„Zedœd d!„Zedœd"d#„Zedœd$d%„Zedœd&d'„Zddœd(d)„Zedd*œd+d,„Zd5eeje dd-œd.d/„Zddœd0d1„Z eje dœd2d3„Z!dS )6Ú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*  || _ || _|| _|| _|| _|| _|	| _|
| _|p6d| _|d krHt	ƒ }|| _
|| _|| _d| _|| _|dk| _|d kršddlm} ||dƒ}|dkršd }|d krÈ|d kr²t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   úU/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/click/_termui_impl.pyÚ__init__$   sL    



zProgressBar.__init__©r'   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<   ÚRuntimeErrorrE   Ú	generatorrF   rA   rA   rB   Ú__iter__h   s    zProgressBar.__iter__c                 C   s   t t| ƒƒS rH   )Únextr3   rF   rA   rA   rB   Ú__next__n   s    zProgressBar.__next__c                 C   s$   | j r
d S | j t¡ | j ¡  d S rH   )r>   r#   ÚwriteÚ	AFTER_BARÚflushrF   rA   rA   rB   rI   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   rF   rA   rA   rB   Úpct|   s    zProgressBar.pctc                 C   s"   | j s
dS t| j ƒtt| j ƒƒ S ©Ng        )r5   ÚsumrY   ÚlenrF   rA   rA   rB   Útime_per_iteration‚   s    zProgressBar.time_per_iterationc                 C   s&   | j d k	r"| js"| j| j | j  S dS r[   )r   r:   r^   r4   rF   rA   rA   rB   Úetaˆ   s    zProgressBar.etac                 C   s†   | j r‚t| jƒ}|d }|d }|d }|d }|d }|d }|dkrh|› d|d›d|d›d|d›�S |d›d|d›d|d›�S dS )Né<   é   r   zd Z02ú:r(   )r9   Úintr_   )r@   r/   ÚsecondsÚminutesÚhoursrA   rA   rB   Ú
format_etaŽ   s    
 zProgressBar.format_etac                 C   s(   t | jƒ}| jd k	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   rZ   rF   rA   rA   rB   Ú
format_pct£   s    zProgressBar.format_pctc                 C   s¤   | j d k	r:t| j| j ƒ}| j| }|| j| j|  7 }nf| jrN| j| j }nRt| j| jp\d ƒ}| jdkr–| j|tt	 
| j| j ¡d d | j ƒ< d |¡}|S )Nr   r   g       @g      à?r(   )r   rc   rZ   r&   r   r   r:   Úlistr^   ÚmathÚcosr4   Újoin)r@   Z
bar_lengthÚbarÚcharsrA   rA   rB   Ú
format_bar¦   s$    


ûÿÿÿ
zProgressBar.format_barc                 C   s¶   | j }g }| jd k	r$|d kr$| j }| jr8| |  ¡ ¡ |rJ| |  ¡ ¡ | jrj| jrj| jsj| |  	¡ ¡ | j
d k	r’|  
| j¡}|d k	r’| |¡ | j| j|  ¡ | j |¡dœ  ¡ S )N)r"   rr   Úinfo)r   r   r    Úappendrj   rm   r   r9   r:   rg   r!   r=   r   r"   rt   r   rq   Úrstrip)r@   r   Z	info_bitsZ	item_inforA   rA   rB   Úformat_progress_line¹   s*    


ýÿÿz ProgressBar.format_progress_linec           	      C   sB  dd l }| jr:| j| jkr6| j| _t| j| j| jd� d S g }| jrž| j}d| _t	|  
¡ ƒ}td| ¡ j| ƒ}||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d� | j ¡  d S )Nr   )r#   r$   r   r(   F)r#   r$   Únl)Úshutilr>   r?   r"   r   r#   r$   r,   r&   r
   rx   ÚmaxÚget_terminal_sizeÚcolumnsrv   Ú
BEFORE_BARr;   rq   rV   )	r@   rz   ÚbufZ	old_widthZclutter_lengthZ	new_widthZclear_widthÚlineÚline_lenrA   rA   rB   rE   Ô   s@    




zProgressBar.render_progress)Ún_stepsr'   c                 C   sš   |  j |7  _ | jd k	r*| j | jkr*d| _t ¡ | j dk r@d S t ¡ | _| j rft ¡ | j | j  }nt ¡ | j }| jdd … |g | _| jd k	| _d S )NTrW   iúÿÿÿ)r4   r   r:   r6   r8   r7   r5   r9   )r@   r‚   ÚsteprA   rA   rB   Ú	make_step  s    
zProgressBar.make_step)r‚   r=   r'   c                 C   sF   |dk	r|| _ |  j|7  _| j| jkrB|  | j¡ |  ¡  d| _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„   rE   )r@   r‚   r=   rA   rA   rB   Úupdate  s    zProgressBar.updatec                 C   s   d| _ d | _d| _d S )NFT)r9   r=   r:   rF   rA   rA   rB   Úfinish1  s    zProgressBar.finishc                 c   sj   | j stdƒ‚| jr"| jE dH  nD| jD ],}|| _| jdkrD|  ¡  |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.
        rN   Nr   r   )	r<   rO   r>   r3   r=   r+   rE   r…   r†   )r@   ÚrvrA   rA   rB   rP   6  s    

zProgressBar.generator)Nr   r   r   r   TNFNNNNr   r   )N)"Ú__name__Ú
__module__Ú__qualname__r/   ÚOptionalr1   r   rc   ri   ÚboolÚCallableÚTextIOrC   rG   rM   ÚIteratorrQ   rS   rI   ÚpropertyrY   rZ   r^   r_   rg   rj   rm   rt   rx   rE   r„   r…   r†   rP   rA   rA   rA   rB   r   #   sj                 ð 
ï<-r   )rP   r$   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 |¡ zDttdƒ�r
t d|› 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(   ÚTERM)ÚdumbÚemacsZ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)rP   r$   ÚstdoutZ	pager_cmdr¤   ÚfdÚfilenamerA   rA   rB   ÚpagerX  s,    
$r«   )rP   Úcmdr$   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… ¡› �}|spd
|d< d}nd|ks€d|kr„d}|j|d|j	|d�}t
 t
j|j¡}t|ƒ}	z,| D ]"}
|sÆt|
ƒ}
| |
 |	d¡¡ q¶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   Nrh   r   r*   r•   ÚLESSr(   r   ú-RTÚrÚR)Úshellr™   ÚenvÚreplace)Ú
subprocessÚdictr›   rœ   ÚrsplitÚsplitr�   rq   ÚPopenÚPIPEr/   r0   ÚBinaryIOr™   r   r	   rT   ÚencodeÚOSErrorÚKeyboardInterruptr¦   Úwait)rP   r¬   r$   r´   r²   Z
cmd_detailZ
less_flagsÚcr™   ÚencodingÚtextrA   rA   rB   r    u  s4    
$r    c           	   	   C   s”   ddl }| ¡ \}}d | ¡}|s*t|ƒ}ttjƒ}t|dƒd �}| | 	|¡¡ W 5 Q R X zt
 |› d|› d�¡ W 5 t
 |¡ t
 |¡ X dS )z<Page through text by invoking a program on a temporary file.r   Nr(   Úwbú "r–   )r¤   r¥   rq   r	   r   r˜   r¨   r   rT   r»   r›   r¦   r§   r”   )	rP   r¬   r$   r¤   r©   rª   rÁ   rÀ   ÚfrA   rA   rB   rŸ   §  s    


rŸ   )ÚstreamrP   r$   r'   c                 C   s$   |D ]}|st |ƒ}|  |¡ qdS )z>Simply print unformatted text.  This is the ultimate fallback.N)r	   rT   )rÅ   rP   r$   rÁ   rA   rA   rB   rš   ¼  s    rš   c                   @   sx   e Zd Zdeje ejejeef  eeddœdd„Zedœdd	„Z	edd
œdd„Z
ejej ejej dœdd„ZdS )ÚEditorNTú.txt)Úeditorr²   Úrequire_saveÚ	extensionr'   c                 C   s   || _ || _|| _|| _d S rH   )rÈ   r²   rÉ   rÊ   )r@   rÈ   r²   rÉ   rÊ   rA   rA   rB   rC   Ç  s    zEditor.__init__rD   c                 C   sf   | j d k	r| j S dD ]}tj |¡}|r|  S qtr:dS dD ]"}t d|› d�¡dkr>|  S q>dS )N)ZVISUALZEDITORZnotepad)zsensible-editorÚvimZ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_editor)rª   r'   c              
   C   s´   dd l }|  ¡ }d }| jr0tj ¡ }| | j¡ zD|j|› d|› d�|dd�}| ¡ }|dkrrt	t
dƒj|d�ƒ‚W n: tk
r® } zt	t
dƒj||d	�ƒ|‚W 5 d }~X Y nX d S )
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_file)rÁ   r'   c           	   	   C   sJ  dd l }|sd}nLt|ttfƒr&|}n8|r<| d¡s<|d7 }trT| dd¡ d¡}n
| d¡}|jd| j	d�\}}zÆt
 |d	¡�}| |¡ W 5 Q R X t
 |t
j |¡t
j |¡d
 f¡ t
j |¡}|  |¡ | jrît
j |¡|krîW ¢Pd S t|dƒ�}| ¡ }W 5 Q R X t|ttfƒ�r$|W ¢S | d¡ dd¡W ¢S t
 |¡ X d S )Nr   ó    r   z
z	utf-8-sigzutf-8zeditor-)ÚprefixÚsuffixrÂ   é   Úrb)r¤   Ú
isinstanceÚbytesÚ	bytearrayÚendswithr   r³   r»   r¥   rÊ   r›   r§   ÚfdopenrT   ÚutimeÚpathÚgetatimeÚgetmtimerÔ   rÉ   ÚopenÚreadÚdecode)	r@   rÁ   r¤   Údatar©   ÚnamerÄ   Ú	timestampr‡   rA   rA   rB   Úedit÷  s2    
$
zEditor.edit)NNTrÇ   )rˆ   r‰   rŠ   r/   r‹   ri   ÚMappingrŒ   rC   rÎ   rÔ   ÚAnyStrré   rA   rA   rA   rB   rÆ   Æ  s       ûúrÆ   F)Úurlr¾   Úlocater'   c           
      C   sÚ  dd l }ttdœdd„}tjdkr€dg}|r6| d¡ |rD| d¡ | || ƒ¡ td	d
ƒ}z|j||d� ¡ W ¢S | ¡  X nÂt	rÚ|r¦||  
dd¡ƒ} d| › d�}n*|  
dd¡} |rºdnd}d|› d| › d�}t |¡S t�rB|�rtj || ƒ 
dd¡¡} d| › d�}n,|  
dd¡} |�r"dnd}d|› d| › d�}t |¡S zJ|�rbtj || ƒ¡�p^d} n|| ƒ} | d| g¡}|�rˆ| ¡ W S W dS  tk
�rÔ   |  d¡�rÎ|�sÎ|�sÎdd l}	|	 | ¡ Y dS Y dS X d S )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¡   rv   rã   r¦   r¸   r¾   r   r³   r›   r”   r   rà   Údirnamer¼   r¢   Ú
webbrowser)
rì   r¾   rí   r´   rñ   ÚargsÚnullZwait_strr¿   r÷   rA   rA   rB   Úopen_url'  sV    







rú   )Úchr'   c                 C   s6   | dkrt ƒ ‚| dkr ts tƒ ‚| dkr2tr2tƒ ‚d S )Núúú)r½   r   ÚEOFError)rû   rA   rA   rB   Ú_translate_ch_to_excc  s    r   rD   c                   c   s
   dV  d S )Nr*   rA   rA   rA   rA   rB   Úraw_terminals  s    r  )r   r'   c                 C   s6   | rt j}nt j}|ƒ }|dkr*||ƒ 7 }t|ƒ |S )N)ú õ   Ã )ÚmsvcrtZgetwcheÚgetwchr   )r   Úfuncr‡   rA   rA   rB   Úgetcharw  s     
r  c                  c   s–   t tjƒstdƒ} |  ¡ }ntj ¡ }d } zPt |¡}zt |¡ |V  W 5 t |tj|¡ tj	 
¡  | d k	rv|  ¡  X W n tjk
r�   Y nX d S )Nz/dev/tty)r   r˜   r™   rã   ÚfilenoÚtermiosÚ	tcgetattrÚ	tcsetattrÚ	TCSADRAINr¨   rV   r¦   ÚttyZsetrawÚerror)rÄ   r©   Zold_settingsrA   rA   rB   r  ª  s     






c              
   C   s^   t ƒ �N}t |d¡ ttjƒd¡}| r<ttjƒr<tj 	|¡ t
|ƒ |W  5 Q R £ S Q R X d S )Né    r³   )r  r›   rä   rå   r   r˜   r™   r   r¨   rT   r   )r   r©   rû   rA   rA   rB   r  Å  s    )N)FF)3Ú__doc__Ú
contextlibro   r›   r˜   r6   Útypingr/   r   rÑ   Z_compatr   r   r   r   r   r	   r
   r   Ú
exceptionsr   Úutilsr   ÚTypeVarr   rç   r~   rU   Ú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>   sf   

  7  3  þ  þ
a<0