o
    ê}”e^  ã                	   @   sd  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 ddlmZ ddlmZ e d¡ZejdkrwdZdZndZdZG dd„ dej e ƒZ!d8d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+d9d)e#d*e%d+e%de,fd,d-„Z-d.e#dej$e. fd/d0„Z/e�rddl0Z0ej1dej2e, fd1d2„ƒZ3d3e%de#fd4d5„Z4dS ddl5Z5ddl6Z6ej1dej2e, fd6d2„ƒZ3d3e%de#fd7d5„Z4dS ):z¿
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)ÚStringIO)ÚTracebackTypeé   )Ú_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															dFd
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dGdd„Zdejeje  d eje d!eje ddfd"d#„Zdeje fd$d%„Zdefd&d'„ZdHd(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d0d1„Zdefd2d3„Zdefd4d5„Zdefd6d7„Zdefd8d9„ZdHd:d;„Z d<eddfd=d>„Z!dId<ed?eje ddfd@dA„Z"dHdBdC„Z#deje fdDdE„Z$dS )JÚ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 u r+t
ƒ }|| _|| _|| _d| _|| _|dk| _|d u rTddlm} ||dƒ}|dkrTd }|d u rk|d u 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&   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+   © rC   ú[/Users/abhinavbhinder/Documents/map/venv/lib/python3.10/site-packages/click/_termui_impl.pyÚ__init__&   sT   




zProgressBar.__init__úProgressBar[V]c                 C   s   d| _ |  ¡  | S )NT)r>   Úrender_progress©rB   rC   rC   rD   Ú	__enter__k   s   zProgressBar.__enter__Úexc_typeÚ	exc_valueÚtbc                 C   s   |   ¡  d S ©N)Úrender_finish)rB   rJ   rK   rL   rC   rC   rD   Ú__exit__p   ó   zProgressBar.__exit__c                 C   s   | j stdƒ‚|  ¡  |  ¡ S )Nú.You need to use progress bars in a with block.)r>   ÚRuntimeErrorrG   Ú	generatorrH   rC   rC   rD   Ú__iter__x   s   zProgressBar.__iter__c                 C   s   t t| ƒƒS rM   )Únextr5   rH   rC   rC   rD   Ú__next__~   rP   zProgressBar.__next__c                 C   s$   | j rd S | j t¡ | j ¡  d S rM   )r@   r%   ÚwriteÚ	AFTER_BARÚflushrH   rC   rC   rD   rN   †   s   zProgressBar.render_finishc                 C   s(   | j rdS t| jt| jpdƒpd dƒS )Nç      ð?r   )r<   Úminr6   Úfloatr   rH   rC   rC   rD   ÚpctŒ   s   zProgressBar.pctc                 C   s"   | j sdS t| j ƒtt| j ƒƒ S ©Ng        )r7   Úsumr\   ÚlenrH   rC   rC   rD   Útime_per_iteration’   s   zProgressBar.time_per_iterationc                 C   s&   | j d ur| js| j| j | j  S dS r^   )r   r<   ra   r6   rH   rC   rC   rD   Ú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*   )r;   Úintrb   )rB   r1   ÚsecondsÚminutesÚhoursrC   rC   rD   Ú
format_etaž   s   
 zProgressBar.format_etac                 C   s(   t | jƒ}| jd ur|d| j› �7 }|S )Nú/)Ústrr6   r   )rB   r6   rC   rC   rD   Ú
format_pos­   s   

zProgressBar.format_posc                 C   s   t | jd ƒd›d�dd … S )Néd   z 4ú%r   )rg   r]   rH   rC   rC   rD   Ú
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   rg   r]   r(   r   r   r<   Úlistra   ÚmathÚcosr6   Újoin)rB   Z
bar_lengthÚbarÚcharsrC   rC   rD   Ú
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$   rv   Úinfo)r!   r   r"   Úappendrn   rq   r    r;   r<   rk   r#   r?   r   r$   rx   r   ru   Úrstrip)rB   r!   Z	info_bitsZ	item_inforC   rC   rD   Ú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@   rA   r$   r   r%   r&   r.   r(   r   r|   ÚmaxÚget_terminal_sizeÚcolumnsrz   Ú
BEFORE_BARr=   ru   rY   )	rB   r~   ÚbufZ	old_widthZclutter_lengthZ	new_widthZclear_widthÚlineZline_lenrC   rC   rD   rG   ä   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 )NTrZ   iúÿÿÿ)r6   r   r<   r8   r:   r9   r7   r;   )rB   r…   ÚsteprC   rC   rD   Ú	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‡   rG   )rB   r…   r?   rC   rC   rD   Úupdate'  s   
ýzProgressBar.updatec                 C   s   d| _ d | _d| _d S )NFT)r;   r?   r<   rH   rC   rC   rD   ÚfinishA  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.
        rQ   Nr   r   )	r>   rR   r@   r5   r?   r-   rG   rˆ   r‰   )rB   ÚrvrC   rC   rD   rS   F  s   €

zProgressBar.generator)Nr   r   r   r   TNFNNNNr   r   )r)   rF   )r)   NrM   )%Ú__name__Ú
__module__Ú__qualname__r1   ÚOptionalr3   r   rg   rm   ÚboolÚCallableÚTextIOrE   rI   ÚTypeÚBaseExceptionr   rO   ÚIteratorrT   rV   rN   Úpropertyr\   r]   ra   rb   rk   rn   rq   rx   r|   rG   r‡   rˆ   r‰   rS   rC   rC   rC   rD   r   %   sš    ðþýüûúùø	÷
ö õô
óòñð
ï
Eþýü
û

-
r   rS   r&   r)   c              	   C   s@  t ƒ }|du r
tƒ }ttjƒrt|ƒst|| |ƒS tj dd¡p!d 	¡ }|r4t
r.t| ||ƒS t| ||ƒS tj d¡dv rBt|| |ƒS t
sJtj d¡rPt| d|ƒS ttdƒrbt d	¡d
krbt| 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.NZPAGERr*   ÚTERM)ZdumbZemacsZos2zmore <Úsystemz(less) 2>/dev/nullr   Úlesszmore "ú"Úmore)r   r   r	   ÚsysÚstdinÚ
_nullpagerÚosÚenvironÚgetÚstripr   Ú_tempfilepagerÚ
_pipepagerÚplatformÚ
startswithÚhasattrr—   ÚtempfileÚmkstempÚcloseÚunlink)rS   r&   ÚstdoutZ	pager_cmdr§   ÚfdÚfilenamerC   rC   rD   Úpagerh  s2   
 þ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   Nrl   r   r,   r˜   ÚLESSr*   r   ú-RTÚrÚR)Úshellrœ   ÚenvÚreplace)Ú
subprocessÚdictrž   rŸ   ÚrsplitÚsplitr    ru   ÚPopenÚPIPEr1   r2   ÚBinaryIOrœ   r   r   rW   ÚencodeÚOSErrorÚKeyboardInterruptr©   Úwait)rS   r¯   r&   r·   rµ   Z
cmd_detailZ
less_flagsÚcrœ   ÚencodingÚtextrC   rC   rD   r£   ‹  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¨   ru   r   r   r›   r«   r
   rW   r¾   rž   r—   r©   rª   )	rS   r¯   r&   r§   r¬   r­   rÄ   rÃ   ÚfrC   rC   rD   r¢   ½  s   

ÿ

ÿr¢   Ústreamc                 C   s$   |D ]}|s
t |ƒ}|  |¡ qdS )z>Simply print unformatted text.  This is the ultimate fallback.N)r   rW   )rÈ   rS   r&   rÄ   rC   rC   rD   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 rM   )rË   rµ   rÌ   rÍ   )rB   rË   rµ   rÌ   rÍ   rC   rC   rD   rE   Ý  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)ZVISUALZEDITORZnotepad)zsensible-editorZvimZnanozwhich z >/dev/null 2>&1r   Úvi)rË   rž   rŸ   r    r   r—   )rB   ÚkeyrŠ   rË   rC   rC   rD   Ú
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¿   )rB   r­   r·   rË   rŸ   rÂ   Z	exit_coderÑ   rC   rC   rD   Ú	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ž   ÚfdopenrW   ÚutimeÚpathÚgetatimeÚgetmtimerÕ   rÌ   rª   ÚopenÚreadÚdecode)	rB   rÄ   r§   Údatar¬   ÚnamerÇ   Ú	timestamprŠ   rC   rC   rD   Úedit  s:   
ÿ$

ø
ÿþzEditor.edit)NNTrÊ   )r‹   rŒ   r�   r1   rŽ   rm   ÚMappingr�   rE   rÐ   rÕ   ÚAnyStrrê   rC   rC   rC   rD   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ï   rC   rC   rD   Ú_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·   rm   r›   r¤   rz   rä   r»   rÁ   r©   r   r¶   rž   r—   r   rá   Údirnamer¿   r¥   Ú
webbrowser)
rí   rÁ   rî   r·   rò   ÚargsÚnullZwait_strrÂ   rø   rC   rC   rD   Ú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ü   rC   rC   rD   Ú_translate_ch_to_excy  s   r  c                   c   s   � dV  d S )Nr,   rC   rC   rC   rC   rD   Úraw_terminal‰  s   €
r  r   c                 C   s6   | rt j}nt j}|ƒ }|dv r||ƒ 7 }t|ƒ |S )N)ú õ   Ã )ÚmsvcrtZgetwcheÚgetwchr  )r   ÚfuncrŠ   rC   rC   rD   Úgetchar�  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ÚttyZsetrawÚ	tcsetattrÚ	TCSADRAINr«   rY   r©   Úerror)rÇ   r¬   Zold_settingsrC   rC   rD   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«   rW   r  )r   r¬   rü   rC   rC   rD   r  Û  s   $ùrM   )FF)7Ú__doc__Ú
contextlibrs   rž   r›   r8   Útypingr1   r   rÓ   Úior   Útypesr   Z_compatr   r   r   r	   r
   r   r   r   Ú
exceptionsr   Úutilsr   ÚTypeVarr   rè   r‚   rX   ÚGenericr   r3   rm   rŽ   r�   r®   r£   r¢   r‘   r�   rÉ   rg   rû   r“   r  r  Úcontextmanagerr”   r  r  r  r
  rC   rC   rC   rD   Ú<module>   s|    

  $E&#2ÿÿÿ
þÿÿÿ
þ
a<0