o
    õ·iÕi  ã                   @  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r�d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rÛd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_hintéÿÿÿÿz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   úXC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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 )Néd   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   Z
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(   Z	info_bitsZ	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Œ   Z	old_widthZclutter_lengthZ	new_widthZclear_widthÚlineZ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 )z¨Return 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jtj	 
dd¡dd�}|r:tr2t| ||ƒr1dS nt| ||ƒr:dS tj	 
d¡dv rHt|| |ƒS tsPtj d¡rYt| d	g|ƒrYdS t| d
g|ƒrbd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.NZPAGERr7   F)ÚposixÚTERM)ZdumbZemacsZos2ÚmoreÚlessr   )r   r   r   ÚsysÚstdinÚ
_nullpagerÚshlexÚsplitÚosÚenvironÚgetr   Ú_tempfilepagerÚ
_pipepagerÚplatformÚ
startswithÚtempfileÚmkstempÚcloseÚunlink)rc   r1   ÚstdoutZ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 q°z|j ¡  W n	 tyÓ   Y nw 	 z| ¡  W 	 w  tyå   Y nw qÕ)zàPage through text by feeding it to another program. Invoking a
    pager through this might support colors.

    Returns `True` if the command was found, `False` otherwise and thus another
    pager should 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Œ   ÚcmdZ
cmd_paramsÚcmd_filepathÚcmd_pathÚcmd_namerÆ   rÀ   Z
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 )z±Page through text by invoking a program on a temporary file.

    Returns `True` if the command was found, `False` otherwise and thus another
    pager should 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   5  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)ZVISUALZEDITORZnotepadr   )rÃ   )zsensible-editorZvimZnanoÚvi)rß   r©   rª   r«   r   rŒ   rÃ   )rN   Úkeyr™   rÃ   rß   rO   rO   rP   Ú
get_editorA  s   
ÿÿzEditor.get_editorÚ	filenamesrŸ   c           	   
   C  sº   dd l }|  ¡ }d }| jrtj ¡ }| | j¡ d dd„ |D ƒ¡}z"|j|› d|› �|dd�}| 	¡ }|dkrBt
tdƒj|d�ƒ‚W d S  ty\ } zt
td	ƒj||d
�ƒ|‚d }~ww )Nr   r   c                 s  s   � | ]	}d |› d �V  qdS )ú"NrO   )Ú.0r¶   rO   rO   rP   Ú	<genexpr>\  s   € z$Editor.edit_files.<locals>.<genexpr>T)ÚargsrÀ   r¿   z{editor}: Editing failed)rß   z{editor}: Editing failed: {e})rß   rÔ   )rÆ   rå   rÀ   r©   rª   Úcopyr—   rƒ   rÈ   rÍ   r   Ú_ÚformatrØ   )	rN   ræ   rÆ   rß   rª   Zexc_filenamerÓ   Z	exit_coderÔ   rO   rO   rP   Ú
edit_filesR  s2   
ÿÿÿÿþ€ÿzEditor.edit_filesrÂ   úbytes | bytearrayúbytes | Nonec                 C  ó   d S r\   rO   ©rN   rÂ   rO   rO   rP   Úeditl  ó   zEditor.editc                 C  rñ   r\   rO   rò   rO   rO   rP   ró   q  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�\}}zƒt
 |d	¡�}| |¡ W d   ƒ n1 sRw   Y  t
 |t
j |¡t
j |¡d
 f¡ t
j |¡}|  |f¡ | 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©   Úfdopenrg   ÚutimeÚpathÚgetatimeÚgetmtimerî   rá   r³   ÚopenÚreadÚdecode)	rN   rÂ   r°   Údatarµ   rÅ   rÚ   Ú	timestampr™   rO   rO   rP   ró   t  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Ý   4  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"|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!   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)ÚstderrZexplorerz/select,rE   z/WAITr7   é   Z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  s6   | dkrt ƒ ‚| dkrtstƒ ‚| dkrtrtƒ ‚d S )Núúú)rÎ   r   ÚEOFError)r  rO   rO   rP   Ú_translate_ch_to_excë  s   r  Úwin32úcabc.Iterator[int]c                   c  s   � dV  d S )Nr9   rO   rO   rO   rO   rP   Úraw_terminalû  s   €
r"  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Úgetwchr  )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ÚttyZsetrawÚ	tcsetattrZ	TCSADRAINr´   ri   r²   Úerror)rÚ   rµ   Zold_settingsrO   rO   rP   r"  1  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´   rg   r  )r   rµ   r  rO   rO   rP   r*  L  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   r!  )r   r&   r5   r!   )8Ú__doc__Ú
__future__r   Úcollections.abcÚabcZcabcÚ
contextlibr�   r©   r§   r¤   rD   Útypingr>   r   rì   Úior   Úpathlibr   Útypesr   Z_compatr   r	   r
   r   r   r   r   r   Ú
exceptionsr   Úutilsr   ÚTypeVarr   rÅ   r�   rh   ÚGenericr   r·   r­   r¬   r¦   rÝ   r  r  r®   r&  Úcontextmanagerr"  r*  r,  r.  rO   rO   rO   rP   Ú<module>   sd    

  H
*
`
/
p
G
/