3
ãde›[  ã               @   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j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jtjt t|ƒƒ}t|ƒ| _|| _d| _g | _tjƒ  | _| _d| _d| _ d | _!d| _"d | _#t$| j
ƒ | _%d | _&d S )	NÚ r   )Úlength_hintr   ziterable or length is requiredFéÿÿÿÿr*   )'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   úI/var/www/agendate/envp3/lib/python3.6/site-packages/click/_termui_impl.pyÚ__init__$   sL    



zProgressBar.__init__)r'   c             C   s   d| _ | jƒ  | S )NT)r<   Úrender_progress)r@   rA   rA   rB   Ú	__enter__`   s    zProgressBar.__enter__c             C   s   | j ƒ  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ƒ‚| jƒ  | jƒ S )Nz.You need to use progress bars in a with block.)r<   ÚRuntimeErrorrD   Ú	generator)r@   rA   rA   rB   Ú__iter__h   s    zProgressBar.__iter__c             C   s   t t| ƒƒS )N)Únextr3   )r@   rA   rA   rB   Ú__next__n   s    zProgressBar.__next__c             C   s$   | j r
d S | jjtƒ | jjƒ  d S )N)r>   r#   ÚwriteÚ	AFTER_BARÚflush)r@   rA   rA   rB   rF   v   s    zProgressBar.render_finishc             C   s(   | j r
dS t| jt| jpdƒp d dƒS )Ng      ð?r   )r:   Úminr4   Úfloatr   )r@   rA   rA   rB   Úpct|   s    zProgressBar.pctc             C   s"   | j s
dS t| j ƒtt| j ƒƒ S )Ng        )r5   ÚsumrT   Úlen)r@   rA   rA   rB   Útime_per_iteration‚   s    zProgressBar.time_per_iterationc             C   s(   | j d k	r$| j r$| j| j | j  S dS )Ng        )r   r:   rX   r4   )r@   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 Ú02ú:r(   )r9   ÚintrY   )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   )r^   rU   )r@   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| j ƒd d | j ƒ< dj|ƒ}|S )Nr   r   g       @g      à?r(   )r   r^   rU   r&   r   r   r:   ÚlistrX   Ú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|j| jƒ ƒ |rJ|j| jƒ ƒ | jrl| jrl| j rl|j| j	ƒ ƒ | j
d k	r”| j
| jƒ}|d k	r”|j|ƒ | j| j| jƒ | jj|ƒdœ jƒ S )N)r"   rm   Úinfo)r   r   r    Úappendre   rh   r   r9   r:   rb   r!   r=   r   r"   ro   r   rl   Ú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	| j
ƒ ƒ}td|jƒ j| ƒ}||k r˜|jtƒ |jd| j ƒ || _|| _| j}| jd k	r´| j}|jtƒ | j
ƒ }t	|ƒ}| jd ksâ| j|k rè|| _|j|ƒ |jd||  ƒ dj|ƒ}|| jk�r>|| _t|| j| jdd� | jjƒ  d S )Nr   )r#   r$   r   r(   F)r#   r$   Únl)Úshutilr>   r?   r"   r   r#   r$   r,   r&   r
   rs   ÚmaxÚget_terminal_sizeÚcolumnsrq   Ú
BEFORE_BARr;   rl   rR   )	r@   ru   ÚbufZ	old_widthZclutter_lengthZ	new_widthZclear_widthÚlineÚline_lenrA   rA   rB   rD   Ô   s@    




zProgressBar.render_progress)Ún_stepsr'   c             C   sš   |  j |7  _ | jd k	r*| j | jkr*d| _tjƒ | j dk r@d S tjƒ | _| j rftjƒ | j | j  }ntjƒ | j }| jdd … |g | _| jd k	| _d S )NTg      ð?é   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| jƒ | 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€   rD   )r@   r}   r=   rA   rA   rB   Úupdate  s    zProgressBar.updatec             C   s   d| _ d | _d| _d S )NFT)r9   r=   r:   )r@   rA   rA   rB   Úfinish1  s    zProgressBar.finishc             c   sn   | j stdƒ‚| jr"| jE dH  nHx6| jD ],}|| _| jdkrF| jƒ  |V  | jdƒ q*W | jƒ  | jƒ  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.
        z.You need to use progress bars in a with block.Nr   r   )	r<   rK   r>   r3   r=   r+   rD   r�   r‚   )r@   ÚrvrA   rA   rB   rL   6  s    
zProgressBar.generator)Nr   r   r   r   TNFNNNNr   r   )N)"Ú__name__Ú
__module__Ú__qualname__r/   ÚOptionalr1   r   r^   rd   ÚboolÚCallableÚTextIOrC   rE   rJ   ÚIteratorrM   rO   rF   ÚpropertyrT   rU   rX   rY   rb   re   rh   ro   rs   rD   r€   r�   r‚   rL   rA   rA   rA   rB   r   #   sH                j+-r   )rL   r$   r'   c             C   s$  t ƒ }ttjƒ st|ƒ r(t|| |ƒS tjjddƒp8djƒ }|r^t	rRt
| ||ƒS t| ||ƒS tjjdƒdkrzt|| |ƒS t	sŠtjjdƒr–t
| d|ƒS ttd	ƒrºtjd
ƒdkrºt| d|ƒS ddl}|jƒ \}}tj|ƒ z:ttd	ƒoøtjd|› d�ƒdk�rt| d|ƒS t|| |ƒS tj|ƒ 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�   )r   r   ÚsysÚstdinÚ
_nullpagerÚosÚenvironÚgetÚstripr   Ú_tempfilepagerÚ
_pipepagerÚplatformÚ
startswithÚhasattrr�   ÚtempfileÚmkstempÚcloseÚunlink)rL   r$   ÚstdoutZ	pager_cmdr    ÚfdÚfilenamerA   rA   rB   ÚpagerX  s,    
"r§   )rL   Úcmdr$   r'   c             C   s4  ddl }ttjƒ}|jddƒd jƒ }|dkr„|d dkr„tjjddƒ› dj|dd… ƒ› �}|spd	|d< d
}nd|ks€d|kr„d
}|j|d
|j	|d�}t
jt
j|jƒ}t|ƒ}	y0x*| D ]"}
|sÈt|
ƒ}
|j|
j|	dƒƒ q¸W W n ttfk
rø   Y n
X |jƒ  x,y|jƒ  W n tk
�r&   Y nX P �qW dS )zqPage through text by feeding it to another program.  Invoking a
    pager through this might support colors.
    r   Nrc   r   r‘   ÚLESSr(   r   z-RTÚrÚR)Úshellr•   ÚenvÚreplacer*   )Ú
subprocessÚdictr—   r˜   ÚrsplitÚsplitr™   rl   ÚPopenÚPIPEr/   r0   ÚBinaryIOr•   r   r	   rP   ÚencodeÚOSErrorÚKeyboardInterruptr¢   Úwait)rL   r¨   r$   r¯   r­   Z
cmd_detailZ
less_flagsÚcr•   ÚencodingÚtextrA   rA   rB   rœ   u  s6    
$

rœ   c       	      C   s”   ddl }|jƒ \}}dj| ƒ}|s*t|ƒ}ttjƒ}t|dƒd �}|j|j	|ƒƒ W dQ R X zt
j|› d|› d�ƒ W dt
j|ƒ t
j|ƒ X dS )z<Page through text by invoking a program on a temporary file.r   Nr(   Úwbz "r’   )r    r¡   rl   r	   r   r”   r¤   r   rP   r¶   r—   r�   r¢   r£   )	rL   r¨   r$   r    r¥   r¦   r¼   r»   ÚfrA   rA   rB   r›   §  s    


r›   )ÚstreamrL   r$   r'   c             C   s(   x"|D ]}|st |ƒ}| j|ƒ qW dS )z>Simply print unformatted text.  This is the ultimate fallback.N)r	   rP   )r¿   rL   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 )N)rÂ   r­   rÃ   rÄ   )r@   rÂ   r­   rÃ   rÄ   rA   rA   rB   rC   Ç  s    zEditor.__init__)r'   c             C   sf   | j d k	r| j S x dD ]}tjj|ƒ}|r|S qW tr:dS x&dD ]}tjd|› d�ƒd	kr@|S q@W d
S )NÚVISUALÚEDITORZnotepadúsensible-editorÚvimÚnanozwhich z >/dev/null 2>&1r   Úvi)rÅ   rÆ   )rÇ   rÈ   rÉ   )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 }| jƒ }d }| jr0tjjƒ }|j| jƒ yD|j|› d|› d�|dd�}|jƒ }|dkrrt	t
dƒj|d�ƒ‚W n: tk
r® } zt	t
dƒj||d	�ƒ|‚W Y d d }~X nX d S )
Nr   z "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º   Z	exit_coderÍ   rA   rA   rB   Ú	edit_fileá  s     
zEditor.edit_file)r¼   r'   c       	      C   s@  dd l }|sd}nNt|ttfƒr&|}n:|r>|jdƒ r>|d7 }trV|jddƒjdƒ}n
|jdƒ}|jd| j	d�\}}zºt
j|d	ƒ�}|j|ƒ W d Q R X t
j|t
jj|ƒt
jj|ƒd
 fƒ t
jj|ƒ}| j|ƒ | jrìt
jj|ƒ|krìd S t|dƒ�}|jƒ }W d Q R X t|ttfƒ�r|S |jdƒjddƒS t
j|ƒ 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—   ÚfdopenrP   ÚutimeÚpathÚgetatimeÚgetmtimerÑ   rÃ   ÚopenÚreadÚdecoder£   )	r@   r¼   r    Údatar¥   Únamer¾   Ú	timestamprƒ   rA   rA   rB   Úedit÷  s2    
$
zEditor.edit)NNTrÁ   )r„   r…   r†   r/   r‡   rd   Ú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|jdƒ |rD|jdƒ |j|| ƒƒ td	d
ƒ}z|j||d�jƒ S |jƒ  X nÂt	rÖ|r¢|| j
ddƒƒ} d| › d�}n*| j
ddƒ} |r¶dnd}d|› d| › d�}tj|ƒS t�r>|�rtjj|| ƒj
ddƒƒ} d| › d�}n,| j
ddƒ} |�rdnd}d|› d| › d�}tj|ƒS yF|�r^tjj|| ƒƒ�pZd} n|| ƒ} |jd| gƒ}|�r‚|jƒ S dS  tk
�rÌ   | jdƒ�rÈ| �rÈ| �rÈdd l}	|	j| ƒ dS dS X d S )Nr   )ré   r'   c             S   s*   ddl m} | j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-Wz-Rz	/dev/nullÚw)Ústderrr’   r(   zexplorer /select,"z/WAITzstart z "" "z
cygstart "z-wz	cygstart z "Ú.zxdg-openúhttp://úhttps://r   )ró   rô   )r¯   rd   r”   r�   rq   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   s8   | dkrt ƒ ‚| dkr"t r"tƒ ‚| dkr4tr4tƒ ‚d S )Núúú)r¸   r   ÚEOFError)rú   rA   rA   rB   Ú_translate_ch_to_excc  s    rÿ   )r'   c               c   s
   dV  d S )Nr   r*   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ú õ   Ã )r  r  )ÚmsvcrtZgetwcheÚgetwchrÿ   )r   Úfuncrƒ   rA   rA   rB   Úgetcharw  s     
r  c              c   s–   t tjƒstdƒ} | jƒ }ntjjƒ }d } yPtj|ƒ}ztj|ƒ |V  W d tj	|tj
|ƒ tjjƒ  | d k	rv| jƒ  X W n tjk
r�   Y nX d S )Nz/dev/tty)r   r”   r•   rà   ÚfilenoÚtermiosÚ	tcgetattrÚttyZsetrawÚ	tcsetattrÚ	TCSADRAINr¤   rR   r¢   Úerror)r¾   r¥   Zold_settingsrA   rA   rB   r   ª  s     






c          
   C   sR   t ƒ �B}tj|dƒjttjƒdƒ}| r<ttjƒr<tjj	|ƒ t
|ƒ |S Q R X d S )Né    r®   )r   r—   rá   râ   r   r”   r•   r   r¤   rP   rÿ   )r   r¥   rú   rA   rA   rB   r  Å  s    )N)FF)3Ú__doc__Ú
contextlibrj   r—   r”   r6   Útypingr/   r   rÏ   Z_compatr   r   r   r   r   r	   r
   r   Ú
exceptionsr   Úutilsr   ÚTypeVarr   rä   ry   rQ   ÚGenericr   r1   rd   r‡   rˆ   r§   rœ   r›   rŠ   r–   rÀ   r^   rù   ÚBaseExceptionrÿ   r  Úcontextmanagerr‹   r   r  r
  r  rA   rA   rA   rB   Ú<module>   sZ   

  7  3a<0