U
    &%e^                     @   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 ddlmZ ddlmZ edZejdkrdZdZndZdZG dd dej e Z!d5e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+d6e#e%e%e,d'd(d)Z-e#ej$e. d*d+d,Z/erddl0Z0ej1ej2e, d-d.d/Z3e%e#d0d1d2Z4n:ddl5Z5ddl6Z6ej1ej2e, d-d3d/Z3e%e#d0d4d2Z4dS )7z
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d6e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ejeje  eje eje dd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!d7eeje dd/d0d1Z"ddd2d3Z#eje dd4d5Z$dS )8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rVt	 }|d krVt
 }|| _|| _|| _d| _|| _|dk| _|d krddlm} ||d}|dkrd }|d kr|d krtdttjt t|}t|| _|| _d| _g | _|  |  t  | _| _d| _ d| _!d | _"d| _#d | _$t%| j | _&d | _'d S )N r   )length_hintz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   Q/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/click/_termui_impl.py__init__&   sT    



zProgressBar.__init__zProgressBar[V]r)   c                 C   s   d| _ |   | S )NT)r>   render_progressrB   rC   rC   rD   	__enter__k   s    zProgressBar.__enter__)exc_type	exc_valuetbr)   c                 C   s   |    d S N)render_finish)rB   rJ   rK   rL   rC   rC   rD   __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   rC   rC   rD   __iter__x   s    zProgressBar.__iter__c                 C   s   t t| S rM   )nextr5   rH   rC   rC   rD   __next__~   s    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 k	r"| js"| j| j | j  S dS r]   )r   r<   r`   r6   rH   rC   rC   rD   eta   s    zProgressBar.etac                 C   s   | j rt| 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*   )r;   intra   )rB   r1   secondsminuteshoursrC   rC   rD   
format_eta   s    
 zProgressBar.format_etac                 C   s(   t | j}| jd k	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 )Nd   z 4%r   )re   r\   rH   rC   rC   rD   
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   re   r\   r(   r   r   r<   listr`   mathcosr6   join)rB   Z
bar_lengthbarcharsrC   rC   rD   
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$   rt   info)r!   r   r"   appendrl   ro   r    r;   r<   ri   r#   r?   r   r$   rv   r   rs   rstrip)rB   r!   Z	info_bitsZ	item_inforC   rC   rD   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@   rA   r$   r   r%   r&   r.   r(   r   rz   maxget_terminal_sizecolumnsrx   
BEFORE_BARr=   rs   rX   )	rB   r|   bufZ	old_widthZclutter_lengthZ	new_widthZclear_widthlineline_lenrC   rC   rD   rG      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 )NTrY   i)r6   r   r<   r8   r:   r9   r7   r;   )rB   r   steprC   rC   rD   	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   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   sj   | j std| jr"| jE dH  nD| jD ],}|| _| jdkrD|   |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   Nr   r   )	r>   rQ   r@   r5   r?   r-   rG   r   r   )rB   rvrC   rC   rD   rR   F  s    

zProgressBar.generator)Nr   r   r   r   TNFNNNNr   r   )N)%__name__
__module____qualname__r1   Optionalr3   r   re   rk   boolCallableTextIOrE   rI   TypeBaseExceptionr   rO   IteratorrS   rU   rN   propertyr[   r\   r`   ra   ri   rl   ro   rv   rz   rG   r   r   r   rR   rC   rC   rC   rD   r   %   sr                  
E-r   )rR   r&   r)   c              	   C   s8  t  }|dkrt }ttjr&t|s2t|| |S tjddpBd	 }|rht
r\t| ||S t| ||S tjddkrt|| |S t
stjdrt| d|S ttdrtd	d
krt| 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.NZPAGERr*   TERM)dumb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)rR   r&   stdoutZ	pager_cmdr   fdfilenamerC   rC   rD   pagerh  s0    
$r   )rR   cmdr&   r)   c              	   C   s,  ddl }ttj}|ddd  }|dkr|d dkrtjdd d	|dd  }|spd
|d< d}nd|ksd|krd}|j|d|j	|d}t
t
j|j}t|}	z,| D ]"}
|st|
}
||
|	d qW n ttfk
r   Y n
X |  z|  W n tk
r    Y qX q(qdS )zqPage through text by feeding it to another program.  Invoking a
    pager through this might support colors.
    r   Nrj   r   r,   r   LESSr*   r   -RTrR)shellr   envreplace)
subprocessdictr   r   rsplitsplitr   rs   PopenPIPEr1   r2   BinaryIOr   r   r   rV   encodeOSErrorKeyboardInterruptr   wait)rR   r   r&   r   r   Z
cmd_detailZ
less_flagscr   encodingtextrC   rC   rD   r     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   rs   r   r   r   r   r
   rV   r   r   r   r   r   )	rR   r   r&   r   r   r   r   r   frC   rC   rD   r     s    


r   )streamrR   r&   r)   c                 C   s$   |D ]}|st |}| | qdS )z>Simply print unformatted text.  This is the ultimate fallback.N)r   rV   )r   rR   r&   r   rC   rC   rD   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 rM   )r   r   r   r   )rB   r   r   r   r   rC   rC   rD   rE     s    zEditor.__init__rF   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   )rB   keyr   r   rC   rC   rD   
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   )rB   r   r   r   r   r   	exit_coder   rC   rC   rD   	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\}}zt
|d	}|| W 5 Q R X t
|t
j|t
j|d
 f t
j|}| | | jrt
j||krW 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   fdopenrV   utimepathgetatimegetmtimer   r   openreaddecode)	rB   r   r   datar   namer   	timestampr   rC   rC   rD   edit  s2    
$
zEditor.edit)NNTr   )r   r   r   r1   r   rk   Mappingr   rE   r   r   AnyStrr   rC   rC   rC   rD   r     s       r   F)urlr   locater)   c           
      C   s  dd l }ttddd}tjdkrdg}|r6|d |rD|d |||  td	d
}z|j||d W S |  X nt	r|r|| 
dd} d|  d}n*| 
dd} |rd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|sd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   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   rk   r   r   rx   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=  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   rC   rC   rD   _translate_ch_to_excy  s    r  rF   c                   c   s
   dV  d S )Nr,   rC   rC   rC   rC   rD   raw_terminal  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   rC   rC   rD   getchar  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   rX   r   ttyZsetrawerror)r   r   Zold_settingsrC   rC   rD   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   rV   r  )r   r   r   rC   rC   rD   r    s    )N)FF)7__doc__
contextlibrq   r   r   r8   typingr1   r   r   ior   typesr   Z_compatr   r   r   r	   r
   r   r   r   
exceptionsr   utilsr   TypeVarr   r   r   rW   Genericr   r3   rk   r   r   r   r   r   r   r   r   re   r   r   r  r  contextmanagerr   r  r  r  r  rC   rC   rC   rD   <module>   sj   

  E # 3    
a<0