o
    jm                     @  s  d Z ddlmZ ddlm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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  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)dDdEd!d"Z*dFd&d'Z+dFd(d)Z,dGd,d-Z-G d.d/ d/Z.dHdId6d7Z/dJd9d:Z0e
j1d;krddl2Z2ej3dKd=d>Z4dLd@dAZ5dS ddl6Z6ddl7Z7ej3dKdBd>Z4dLdCdAZ5dS )Mz
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.
    )annotationsN)gettext)StringIO)Path)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																dXdYd%d&ZdZd(d)Zd[d0d1Zd\d3d4Zd]d6d7Zd^d8d9Ze	d_d;d<Z
e	d_d=d>Ze	d_d?d@Zd`dAdBZd`dCdDZd`dEdFZd`dGdHZd`dIdJZd^dKdLZdadNdOZdbdcdRdSZd^dTdUZd\dVdWZdS )dProgressBarN# %(bar)s  FTr      iterablecabc.Iterable[V] | Nonelength
int | None	fill_charstr
empty_charbar_templateinfo_sephiddenboolshow_etashow_percentbool | Noneshow_positem_show_func)t.Callable[[V | None], str | None] | Nonelabel
str | Nonefilet.TextIO | Nonecolorupdate_min_stepsintwidthreturnNonec                 C  s>  || _ || _|| _|| _|| _|| _|	| _|
| _|| _|pd| _	|d u r.t
 }|d u r.t }|| _|| _|| _d| _|| _|dk| _|d u rWddlm} ||d}|dkrWd }|d u rk|d u rctdtdt|}t|| _|| _d| _g | _|  |  t  | _| _d| _d| _ d | _!d| _"d | _#t$| j| _%d | _&d S )N r   )length_hintziterable or length is requiredzcabc.Iterable[V]F)'r    r"   r#   r$   r%   r'   r(   r*   r+   r-   r   r   r/   r1   r2   _completed_intervalsr4   	autowidthoperatorr8   	TypeErrortcastrangeiterr   posavgtimestartlast_eta	eta_knownfinished	max_widthenteredcurrent_itemr   _is_atty
_last_line)selfr   r   r    r"   r#   r$   r%   r'   r(   r*   r+   r-   r/   r1   r2   r4   r8    rO   X/var/www/html/fyndo/pharma/fyndo/venv/lib/python3.10/site-packages/click/_termui_impl.py__init__,   sV   




zProgressBar.__init__ProgressBar[V]c                 C  s   d| _ |   | S )NT)rJ   render_progressrN   rO   rO   rP   	__enter__s   s   zProgressBar.__enter__exc_typetype[BaseException] | None	exc_valueBaseException | NonetbTracebackType | Nonec                 C  s   |    d S N)render_finish)rN   rV   rX   rZ   rO   rO   rP   __exit__x      zProgressBar.__exit__cabc.Iterator[V]c                 C  s   | j std|   |  S )N.You need to use progress bars in a with block.)rJ   RuntimeErrorrS   	generatorrT   rO   rO   rP   __iter__   s   zProgressBar.__iter__r   c                 C  s   t t| S r\   )nextrA   rT   rO   rO   rP   __next__   r_   zProgressBar.__next__c                 C  s*   | j s| jsd S | jt | j  d S r\   )r%   rL   r/   write	AFTER_BARflushrT   rO   rO   rP   r]      s   zProgressBar.render_finishfloatc                 C  s(   | j rdS t| jt| jpdpd dS )N      ?r   )rH   minrB   rj   r   rT   rO   rO   rP   pct   s   zProgressBar.pctc                 C  s"   | j sdS t| j tt| j  S Ng        )rC   sumrj   lenrT   rO   rO   rP   time_per_iteration   s   zProgressBar.time_per_iterationc                 C  s&   | j d ur| js| j| j | j  S dS rn   )r   rH   rq   rB   rT   rO   rO   rP   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:r7   )rG   r3   rr   )rN   r>   secondsminuteshoursrO   rO   rP   
format_eta   s   
 zProgressBar.format_etac                 C  s(   t | j}| jd ur|d| j 7 }|S )N/)r!   rB   r   )rN   rB   rO   rO   rP   
format_pos   s   

zProgressBar.format_posc                 C  s   t | jd dddd  S )Nd   z 4%r   )r3   rm   rT   rO   rO   rP   
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      ?r7   )r   r3   rm   r4   r    r"   rH   listrq   mathcosrB   join)rN   
bar_lengthbarcharsrO   rO   rP   
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-   r   info)r(   r   r*   appendr|   r   r'   rG   rH   rz   r+   rK   r#   r-   r   r$   r   rstrip)rN   r(   	info_bits	item_inforO   rO   rP   format_progress_line   s,   


z ProgressBar.format_progress_linec           	      C  sX  | j rd S | js| j| jkr| j| _t| j| j| jd d S g }| jrYdd l}| j	}d| _	t
|  }td| j| }||k rV| jd urV|t |d| j  || _|| _	| j	}| jd urd| j}|t |  }t
|}| jd u s{| j|k r~|| _|| |d||   d|}|| jkr|| _t|| j| jdd | j  d S d S )N)r/   r1   r   r   r7   F)r/   r1   nl)r%   rL   rM   r-   r   r/   r1   r;   shutilr4   r   r   maxget_terminal_sizecolumnsrI   r   
BEFORE_BARr   ri   )	rN   bufr   	old_widthclutter_length	new_widthclear_widthlineline_lenrO   rO   rP   rS      sF   





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 )NTrk   i)rB   r   rH   rD   rF   rE   rC   rG   )rN   r   steprO   rO   rP   	make_step  s   
zProgressBar.make_steprK   V | Nonec                 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   )rK   r:   r2   r   rS   )rN   r   rK   rO   rO   rP   update0  s   
zProgressBar.updatec                 C  s   d| _ d | _d| _d S )NFT)rG   rK   rH   rT   rO   rO   rP   finishJ  s   
zProgressBar.finishc                 c  sn    | j std| js| jE dH  dS | jD ]}|| _| jdkr$|   |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.
        ra   Nr   r   )	rJ   rb   rL   rA   rK   r:   rS   r   r   )rN   rvrO   rO   rP   rc   O  s   

zProgressBar.generator)Nr   r   r   r   FTNFNNNNr   r   )"r   r   r   r   r    r!   r"   r!   r#   r!   r$   r!   r%   r&   r'   r&   r(   r)   r*   r&   r+   r,   r-   r.   r/   r0   r1   r)   r2   r3   r4   r3   r5   r6   )r5   rR   )rV   rW   rX   rY   rZ   r[   r5   r6   )r5   r`   )r5   r   )r5   r6   )r5   rj   r5   r!   )r   r3   r5   r6   r\   )r   r3   rK   r   r5   r6   )__name__
__module____qualname__rQ   rU   r^   rd   rf   r]   propertyrm   rq   rr   rz   r|   r   r   r   rS   r   r   r   rc   rO   rO   rO   rP   r   +   sL    
G










.
r   rc   cabc.Iterable[str]r1   r)   r5   r6   c              	   C  s"  t  }|du r
t }ttjrt|st|| |S ttj	
dd}|r8tr0t| ||r/dS nt| ||r8dS tj	
ddv rFt|| |S tsNtjdrWt| dg|rWdS t| dg|r`dS d	dl}| \}}t| zt| dg|rW t| dS t|| |W t| S t| w )
z2Decide what method to use for paging through text.NPAGERr7   TERM)dumbemacsos2morelessr   )r   r   r   sysstdin
_nullpagershlexsplitosenvirongetr   _tempfilepager
_pipepagerplatform
startswithtempfilemkstempcloseunlink)rc   r1   stdoutpager_cmd_partsr   fdfilenamerO   rO   rP   pagerq  s<   
r   	cmd_parts	list[str]r&   c                 C  s  |sdS ddl }|d }|dd }||}|sdS t| }|j}ddl}	ttj}
|du rV|dkrVtj	dd d
| }|sLd	|
d< d
}n
d|v sTd|v rVd
}|	jt|g| d|	j|
dd
d}|jdusnJ zTz| D ]}|szt|}|j| qrW n ty   Y n ty } z|  |d}~ww W z|j  W n	 ty   Y nw 	 z|  W 	 d
S  ty   Y nw qz|j  W n	 ty   Y nw 	 z|  W 	 w  ty   Y nw q)aV  Page through text by feeding it to another program.

    Invokes the pager via :class:`subprocess.Popen` with an ``argv`` list
    produced by :func:`shlex.split`. The command is resolved to an absolute
    path with :func:`shutil.which` as recommended by the
    :mod:`subprocess` docs for Windows compatibility.

    Invoking a pager through this might support colors: if piping to
    ``less`` and the user hasn't decided on colors, ``LESS=-R`` is set
    automatically.

    Returns ``True`` if the command was found and executed, ``False``
    otherwise so another pager can be attempted.
    Fr   Nr   r   LESSr7   r   -RTrRreplace)shellr   enverrorstext)r   whichr   absolutename
subprocessdictr   r   r   r   Popenr!   PIPEr   r   rg   BrokenPipeError	Exception	terminater   waitKeyboardInterrupt)rc   r   r1   r   cmd
cmd_paramscmd_filepathcmd_pathcmd_namer   r   
less_flagscr   erO   rO   rP   r     s   

	

r   c              	   C  s&  |sdS ddl }|d }||}|sdS t| }ddl}ddl}| \}	}
d| }|s4t|}t	t
j}t|
dd }||| W d   n1 sSw   Y  z/z|t||
g W n	 tym   Y nw W t|	 t|
 dS W t|	 t|
 dS t|	 t|
 w )a  Page through text by invoking a program on a temporary file.

    Used as the primary pager strategy on Windows (where piping to
    ``more`` adds spurious ``\r\n``), and as a fallback on other
    platforms. The command is resolved to an absolute path with
    :func:`shutil.which`.

    Returns ``True`` if the command was found and executed, ``False``
    otherwise so another pager can be attempted.
    Fr   Nr7   wbT)r   r   r   r   r   r   r   r   r   r
   r   r   r   rg   encodecallr!   OSErrorr   r   r   )rc   r   r1   r   r   r   r   r   r   r   r   r   encodingfrO   rO   rP   r     sB   







r   streamt.TextIOc                 C  s$   |D ]}|s
t |}| | qdS )z>Simply print unformatted text.  This is the ultimate fallback.N)r   rg   )r   rc   r1   r   rO   rO   rP   r   :  s
   r   c                   @  s^   e Zd Z				dd ddZd!ddZd"ddZejd#ddZejd$ddZd%ddZdS )&EditorNT.txteditorr.   r   cabc.Mapping[str, str] | Nonerequire_saver&   	extensionr!   r5   r6   c                 C  s   || _ || _|| _|| _d S r\   )r   r   r   r   )rN   r   r   r   r   rO   rO   rP   rQ   E  s   
zEditor.__init__c                 C  sh   | j d ur| j S dD ]}tj|}|r|  S q
trdS ddlm} dD ]}||d ur1|  S q%dS )N)VISUALEDITORnotepadr   )r   )zsensible-editorvimnanovi)r   r   r   r   r   r   r   )rN   keyr   r   r   rO   rO   rP   
get_editorQ  s   
zEditor.get_editor	filenamesr   c           	   
   C  s   ddl }ddl}|  }d}| jrtj }|| j z#|j|	|t
| |d}| }|dkr=ttdj|dW dS  tyW } zttdj||d|d}~ww )z Open files in the user's editor.r   N)argsr   z{editor}: Editing failed)r   z{editor}: Editing failed: {e})r   r   )r   r   r   r   r   r   copyr   r   r   r   r   r   _formatr   )	rN   r   r   r   r   r   r   	exit_coder   rO   rO   rP   
edit_filesb  s4   
zEditor.edit_filesr   bytes | bytearraybytes | Nonec                 C     d S r\   rO   rN   r   rO   rO   rP   edit     zEditor.editc                 C  r  r\   rO   r  rO   rO   rP   r    r  str | bytes | bytearray | Nonestr | bytes | Nonec           	   	   C  s  dd l }|d u rd}n&t|ttfr|}n|r |ds |d7 }tr,|ddd}n|d}|jd| j	d\}}zt
|d	}|| W d    n1 sRw   Y  t
|t
j|t
j|d
 f t
j|}| |f | jrt
j||krW t
| d S t|d}| }W d    n1 sw   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   fdopenrg   utimepathgetatimegetmtimer   r   r   openreaddecode)	rN   r   r   datar   r   r   	timestampr   rO   rO   rP   r    s:   
$

)NNTr   )
r   r.   r   r   r   r&   r   r!   r5   r6   r   )r   r   r5   r6   )r   r   r5   r  )r   r.   r5   r.   )r   r  r5   r  )	r   r   r   rQ   r   r   r>   overloadr  rO   rO   rO   rP   r   D  s    

r   Furlr!   r   locater3   c           	      C  s  dd l }ddd}tjdkr?dg}|r|d	 |r|d
 |||  tdd}z|j||d W |  S |  w trt|rO|| } dd|  g}ndg}|rY|d |d ||  z|	|W S  t
ys   Y dS w tr|r|| } dtj| g}ndg}|r|d ||  z|	|W S  t
y   Y dS w 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   r  r!   r5   c                 S  s*   ddl m} | dr|| dd  } | S )Nr   )unquotezfile://   )urllib.parser  r   )r  r  rO   rO   rP   _unquote_file  s   
zopen_url.<locals>._unquote_filedarwinr  z-Wr   z	/dev/nullw)stderrexplorerz/select,rE   z/WAITr7      cygstartz-w.zxdg-open)zhttp://zhttps://r   )r  r!   r5   r!   )r   r   r   r   r  r   r   r   r   r   r   r	   r   r  dirnamer   
webbrowser)	r  r   r  r   r!  r   nullr   r*  rO   rO   rP   open_url  sn   











r,  chc                 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)r-  rO   rO   rP   _translate_ch_to_exc  s   r2  win32cabc.Iterator[int]c                   c  s    dV  d S )Nr9   rO   rO   rO   rO   rP   raw_terminal  s   
r5  r   c                 C  sZ   | rt t jg tf tj}nt t jg tf tj}| }|dv r'|| 7 }t| |S )N)    à)r>   r?   Callabler!   msvcrtgetwchegetwchr2  )r   funcr   rO   rO   rP   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ttysetraw	tcsetattr	TCSADRAINr   ri   r   error)r   r   old_settingsrO   rO   rP   r5  C  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   )r5  r   r  r  r
   r   r   r   r   rg   r2  )r   r   r-  rO   rO   rP   r=  ^  s   $r\   )rc   r   r1   r)   r5   r6   )rc   r   r   r   r1   r)   r5   r&   )r   r   rc   r   r1   r)   r5   r6   )FF)r  r!   r   r&   r  r&   r5   r3   )r-  r!   r5   r6   )r5   r4  )r   r&   r5   r!   )8__doc__
__future__r   collections.abcabccabc
contextlibr   r   r   r   rD   typingr>   r   r   ior   pathlibr   typesr   _compatr   r	   r
   r   r   r   r   r   
exceptionsr   utilsr   TypeVarr   r   r   rh   Genericr   r   r   r   r   r   r,  r2  r   r9  contextmanagerr5  r=  r?  rA  rO   rO   rO   rP   <module>   sd    

  H
-
h
4
t
G
/