o
    iP                     @   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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jdkrhd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rddl"Z"ej#d(d) Z$d*d+ Z%dS ddl&Z&ddl'Z'ej#d,d) Z$d-d+ Z%dS )0z
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   )_default_text_stdout)CYGWIN)get_best_encoding)	int_types)isatty)open_stream)
range_type)
strip_ansi)term_len)WIN)ClickException)echont
z[?25lz[?25h
c                 C   s   zt | W S  ttfyG   zt| j}W n ty    Y Y dS w z|| }W n ty2   Y Y dS w |tu s@t|tr@|dk rCY dS | Y S w )z%Returns the length hint of an object.Nr   )lenAttributeError	TypeErrortype__length_hint__NotImplemented
isinstancer   )objget_hinthint r   M/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/click/_termui_impl.py_length_hint"   s"   
r   c                   @   s   e Zd Z													d1d	d
Zdd Zdd Zdd Zdd Ze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d/d0 ZdS )2ProgressBarN# %(bar)s  TF   c                 C   s  || _ || _|| _|| _|| _|| _|	| _|
| _|pd| _|d u r$t	 }|| _
|| _|| _|dk| _|d u r:t|}|d u rJ|d u rFtdt|}t|| _|| _|d u| _d| _g | _t  | _| _d| _d| _d | _d| _d | _t| j
 | _d | _ 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short_limit)selfiterabler5   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r   r   r   __init__5   sF   




zProgressBar.__init__c                 C   s   d| _ |   | S )NT)r?   render_progressrD   r   r   r   	__enter__k   s   zProgressBar.__enter__c                 C   s   |    d S N)render_finish)rD   exc_type	exc_valuetbr   r   r   __exit__p   s   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   r   r   r   __iter__s   s   zProgressBar.__iter__c                 C   s   t t| S rJ   )nextr4   rH   r   r   r   __next__y   s   zProgressBar.__next__c                 C   s   t   | j | jkS rJ   )r9   r:   rC   rH   r   r   r   is_fast   s   zProgressBar.is_fastc                 C   s,   | j s|  r	d S | jt | j  d S rJ   )rA   rV   r0   write	AFTER_BARflushrH   r   r   r   rK      s   zProgressBar.render_finishc                 C   s$   | j rdS t| jt| jpd dS )N      ?r   )r=   minr7   floatr5   rH   r   r   r   pct   s   zProgressBar.pctc                 C   s"   | j sdS t| j tt| j  S Ng        )r8   sumr\   r   rH   r   r   r   time_per_iteration   s   zProgressBar.time_per_iterationc                 C   s"   | j r| js| j| j| j  S dS r^   )r6   r=   r`   r5   r7   rH   r   r   r   eta   s   zProgressBar.etac                 C   sj   | j r3t| j}|d }|d }|d }|d }|d }|d }|dkr,d||||S d|||S dS )N<      r   z{}d {:02}:{:02}:{:02}z{:02}:{:02}:{:02}r%   )r<   intra   format)rD   tsecondsminuteshoursr   r   r   
format_eta   s   
zProgressBar.format_etac                 C   s$   t | j}| jr|d| j7 }|S )Nz/{})strr7   r6   re   r5   )rD   r7   r   r   r   
format_pos   s   
zProgressBar.format_posc                 C   s   d t| jd dd  S )Nz{: 4}%d   r   )re   rd   r]   rH   r   r   r   
format_pct   s   zProgressBar.format_pctc                 C   s   | j rt| j| j }| j| }|| j| j|  7 }|S | jr'| j| j }|S t| j| jp.d }| jdkrK| j|tt	
| j| j d d | j < d|}|S )Nr   r   g       @r&   r%   )r6   rd   r]   r2   r'   r(   r=   listr`   mathcosr7   join)rD   
bar_lengthbarr   r   r   
format_bar   s(   


zProgressBar.format_barc                 C   s   | j }g }| jr|d u r| j }| jr||   |r#||   | jr3| jr3| js3|| 	  | j
d urG| 
| j}|d urG|| | j| j|  | j|d  S )N)r/   rt   info)r,   r6   r-   appendrl   rn   r+   r<   r=   rj   r.   r@   r)   r/   ru   r*   rr   rstrip)rD   r,   	info_bits	item_infor   r   r   format_progress_line   s,   


z ProgressBar.format_progress_linec           	      C   s,  ddl m} | jrd S g }| jr=| j}d| _t|  }td| d | }||k r:|t	 |d| j
  || _
|| _| j}| j
d urH| j
}|t	 |  }t|}| j
d u s_| j
|k rb|| _
|| |d||   d|}|| jkr|  s|| _t|| j| jdd | j  d S d S d S )Nr   )get_terminal_sizer   r!   r%   F)r0   r1   nl)termuir|   rA   r3   r2   r   r{   maxrw   
BEFORE_BARr>   rr   rB   rV   r   r0   r1   rY   )	rD   r|   buf	old_widthclutter_length	new_widthclear_widthlineline_lenr   r   r   rG      s<   




zProgressBar.render_progressc                 C   s   |  j |7  _ | jr| j | jkrd| _t | j dk rd S t | _| j r1t | j | j  }nt | j }| jdd  |g | _| j| _d S )NTrZ   i)	r7   r6   r5   r=   r9   r;   r:   r8   r<   )rD   n_stepsstepr   r   r   	make_step  s   
zProgressBar.make_stepc                 C   s   |  | |   d S rJ   )r   rG   )rD   r   r   r   r   update"  s   
zProgressBar.updatec                 C   s   d| _ d | _d| _d S )Nr   T)r<   r@   r=   rH   r   r   r   finish&  s   
zProgressBar.finishc                 c   sb    | j std| jr| jD ]}|V  qdS | jD ]}|| _|V  | d q|   |   dS )zReturn a generator which yields the items added to the bar
        during construction, and updates the progress bar *after* the
        yielded block returns.
        rP   r   N)r?   rQ   rA   r4   r@   r   r   rG   )rD   rvr   r   r   rR   +  s   

zProgressBar.generator)Nr    r!   r"   r#   TNFNNNNr$   )__name__
__module____qualname__rF   rI   rO   rS   rU   rT   rV   rK   propertyr]   r`   ra   rj   rl   rn   ru   r{   rG   r   r   r   rR   r   r   r   r   r   4   sL    
6	


'r   c              	   C   s0  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rtd|d
krt| 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closere   unlink)rR   r1   stdout	pager_cmdr   fdfilenamer   r   r   pagerF  s.   
r   c           
   	   C   s  ddl }ttj}|ddd  }|du rB|d dkrBdtjdd	d
|dd }|s8d|d< d}n
d|v s@d|v rBd}|j	|d|j
|d}t|j}z| D ]}	|s\t|	}	|j|	|d qTW n ttfys   Y nw |j  	 z|  W dS  ty   Y nw qz)zqPage through text by feeding it to another program.  Invoking a
    pager through this might support colors.
    r   N/r   r   z{}{}LESSr%   r!   -RTrR)shellr   envreplace)
subprocessdictr   r   rsplitsplitre   r   rr   PopenPIPEr   r   r
   rW   encodeIOErrorKeyboardInterruptr   wait)
rR   cmdr1   r   r   
cmd_detail
less_flagscencodingtextr   r   r   r   c  s<   
$



r   c              	   C   s   ddl }| }d| }|st|}ttj}t|dd }||	| W d   n1 s2w   Y  zt
d|| W t
| dS t
| w )z<Page through text by invoking a program on a temporary file.r   Nr%   wb{} "{}")r   mktemprr   r
   r   r   r   r   rW   r   r   r   re   r   )rR   r   r1   r   r   r   r   fr   r   r   r     s   

r   c                 C   s$   |D ]}|s
t |}| | qdS )z>Simply print unformatted text.  This is the ultimate fallback.N)r
   rW   )streamrR   r1   r   r   r   r   r     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 rJ   )editorr   require_save	extension)rD   r   r   r   r   r   r   r   rF     s   
zEditor.__init__c                 C   sd   | j d u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)VISUALEDITORnotepad)zsensible-editorvimnanozwhich {} >/dev/null 2>&1r   vi)r   r   r   r   r   r   re   )rD   keyr   r   r   r   r   
get_editor  s   
zEditor.get_editorc              
   C   s   dd l }|  }| jrtj }|| j nd }z|jd|||dd}|	 }|dkr5t
d|W d S  tyK } zt
d||d }~ww )Nr   r   T)r   r   z{}: Editing failed!z{}: Editing failed: {})r   r   r   r   r   copyr   r   re   r   r   OSError)rD   r   r   r   r   r   	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\}}zctr)d}|dd}nd}||}t|d	}|	| |
  tj|}| | | jr]tj||kr]W t| d S t|d
}z
| }W |
  n|
  w |dddW t| S t| w )Nr   r%   r   zeditor-)prefixsuffixz	utf-8-sigz
zutf-8r   rb)r   endswithr   r   r   r   r   r   fdopenrW   r   pathgetmtimer   r   r   openreaddecode)	rD   r   r   r   namer   r   	timestampr   r   r   r   edit  s2   


	

zEditor.edit)NNTr   )r   r   r   rF   r   r   r   r   r   r   r   r     s
    
r   Fc           	      C   s  dd l }dd }tjdkr>dg}|r|d |r|d |||  tdd	}z|j||d
 W |  S |  w tre|rR|| } d	|| 
dd}nd	|rXdnd| 
dd}t|S tr|r{|| } d	tj| 
dd}nd	|rdnd| 
dd}t|S z"|rtj|| pd} n|| } |d| g}|r| W S W dS  ty   | dr|s|sdd l}||  Y dS Y dS w )Nr   c                 S   sH   zdd l }W n ty   dd l }Y nw | dr"|| 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,"{}""r%   zstart {} "" "{}"z/WAITzcygstart "{}"zcygstart {} "{}"z-w.zxdg-open)zhttp://zhttps://r   )r   r   r   rw   r   r   r   r   r   re   r   r   r   r   r   dirnamer   r   
webbrowser)	r   r   locater   r   argsnullr   r   r   r   r   open_url  sT   
	






r   c                 C   s:   | dkrt  | dkrtst | dkrtrt d S d S )N)r   r   EOFError)chr   r   r   _translate_ch_to_exc5  s   r  c                   c   s    d V  d S rJ   r   r   r   r   r   raw_terminalA  s   
r  c                 C   s6   | rt j}nt j}| }|dv r|| 7 }t| |S )N)    à)msvcrtgetwchegetwchr  )r   funcr   r   r   r   getcharE  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   rY   r   error)r   r   old_settingsr   r   r   r  u  s0   







c                 C   sn   t  *}t|d}|ttjd}| r ttjr tj	| t
| |W  d    S 1 s0w   Y  d S )N    r   )r  r   r   r   r   r   r   r   r   rW   r  )r   r   r  r   r   r   r
    s   $rJ   )FF)(__doc__
contextlibrp   r   r   r9   _compatr   r   r   r   r   r   r	   r
   r   r   
exceptionsr   utilsr   r   r   rX   r   objectr   r   r   r   r   r   r   r  r  contextmanagerr  r
  r  r  r   r   r   r   <module>   sX   
  
1
L;	
-
