
    wdfP                        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    rdZdZndZdZd Z G d de          Zd%dZd Zd Zd Z G d de          Zd&dZ d  Z!erddl"Z"ej#        d!             Z$d" Z%dS ddl&Z&ddl'Z'ej#        d#             Z$d$ Z%d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   )_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                 0   	 t          |           S # t          t          f$ rs 	 t          |           j        }n# t          $ r Y Y dS w xY w	  ||           }n# t          $ r Y Y dS w xY w|t
          u st          |t                    r|dk     rY dS |cY S w xY w)z%Returns the length hint of an object.Nr   )lenAttributeError	TypeErrortype__length_hint__NotImplemented
isinstancer   )objget_hinthints      W/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/click/_termui_impl.py_length_hintr   "   s    3xxI&   	Cyy0HH 	 	 	444		8C==DD 	 	 	444	>!!D))D)D!q44sY    B8B
ABABAB
A&!B%A&&'BBBc                       e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 dd	Zd
 Zd Zd Zd ZeZd Z	d Z
ed             Zed             Zed             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )ProgressBarN# %(bar)s  TF   c                    || _         || _        || _        || _        || _        || _        |	| _        |
| _        |pd| _        |t                      }|| _
        || _        || _        |dk    | _        |t          |          }| |t          d          t!          |          }t#          |          | _        || _        |d u| _        d| _        g | _        t-          j                    x| _        | _        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iterabler8   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   s                  r   __init__zProgressBar.__init__5   sC   " #$(  ( ,[b
<'))D	

!>!(++F~ @AAA!&))HNN	"$.%)Y[[0
T] #DI...    c                 <    d| _         |                                  | S )NT)rB   render_progressrG   s    r   	__enter__zProgressBar.__enter__k   s     rJ   c                 .    |                                   d S N)render_finish)rG   exc_type	exc_valuetbs       r   __exit__zProgressBar.__exit__p   s    rJ   c                 ~    | j         st          d          |                                  |                                 S )N.You need to use progress bars in a with block.)rB   RuntimeErrorrL   	generatorrM   s    r   __iter__zProgressBar.__iter__s   s>    | 	QOPPP~~rJ   c                 :    t          t          |                     S rP   )nextr7   rM   s    r   __next__zProgressBar.__next__y   s     DJJrJ   c                 J    t          j                     | j        z
  | j        k    S rP   )r<   r=   rF   rM   s    r   is_fastzProgressBar.is_fast   s    y{{TZ'4+;;;rJ   c                     | j         s|                                 rd S | j                            t                     | j                                         d S rP   )rD   r_   r3   write	AFTER_BARflushrM   s    r   rQ   zProgressBar.render_finish   sL    > 	T\\^^ 	F		"""	rJ   c                 l    | j         rdS t          | j        t          | j                  pdz  d          S )N      ?r   )r@   minr:   floatr8   rM   s    r   pctzProgressBar.pct   s7    = 	348uT[116Q7===rJ   c                     | j         sdS t          | j                   t          t          | j                             z  S Ng        )r;   sumrg   r   rM   s    r   time_per_iterationzProgressBar.time_per_iteration   s4    x 	348}}uS]]3333rJ   c                 P    | j         r| j        s| j        | j        | j        z
  z  S dS rj   )r9   r@   rl   r8   r:   rM   s    r   etazProgressBar.eta   s4     	FT] 	F*dkDH.DEEsrJ   c                     | j         rgt          | j                  }|dz  }|dz  }|dz  }|dz  }|dz  }|dz  }|dk    rd                    ||||          S d                    |||          S dS )N<      r   z{}d {:02}:{:02}:{:02}z{:02}:{:02}:{:02}r(   )r?   intrn   format)rG   tsecondsminuteshourss        r   
format_etazProgressBar.format_eta   s    > 	KDHA"fG"HA"fG"HAFE"HA1uu.55aQQQ*11%'JJJrrJ   c                 v    t          | j                  }| j        r|d                    | j                  z  }|S )Nz/{})strr:   r9   rs   r8   )rG   r:   s     r   
format_poszProgressBar.format_pos   s7    $(mm 	-5<<,,,C
rJ   c                 f    d                     t          | j        dz                      dd          S )Nz{: 4}%d   r   )rs   rr   rh   rM   s    r   
format_pctzProgressBar.format_pct   s+    s48c>2233ABB77rJ   c                    | j         r<t          | j        | j        z            }| j        |z  }|| j        | j        |z
  z  z  }n| j        r| j        | j        z  }nt          | j        | j        pdz            }| j        dk    rD| j        |t          t          j
        | j        | j        z            dz  dz   | j        z            <   d                    |          }|S )Nr   r   g       @r)   r(   )r9   rr   rh   r5   r*   r+   r@   listrl   mathcosr:   join)rG   
bar_lengthbars      r   
format_barzProgressBar.format_bar   s     	TX
233J.:-C4?dj:&=>>CC] 	.4:-CCt$*/:;;C&!++ N $(T-D"DEEKcQ*%  ''#,,C
rJ   c                 j   | j         }g }| j        r
|| j         }| j        r'|                    |                                            |r'|                    |                                            | j        r5| j        r.| j        s'|                    | 	                                           | j
        1| 
                    | j                  }||                    |           | j        | j        |                                 | j                            |          dz                                  S )N)r2   r   info)r/   r9   r0   appendr{   r~   r.   r?   r@   rx   r1   rC   r,   r2   r   r-   r   rstrip)rG   r/   	info_bits	item_infos       r   format_progress_linez ProgressBar.format_progress_line   s6   (	 	-!5#},L= 	0T__../// 	0T__..///= 	0T^ 	0DM 	0T__..///*++D,=>>I$  +++ ((**955  &((	rJ   c                    ddl m} | j        rd S g }| j        r| j        }d| _        t          |                                           }t          d |            d         |z
            }||k     r>|                    t                     |                    d| j
        z             || _
        || _        | j        }| j
        | j
        }|                    t                     |                                 }t          |          }| j
        | j
        |k     r|| _
        |                    |           |                    d||z
  z             d                    |          }|| j        k    rS|                                 sA|| _        t          || j        | j        d           | j                                         d S d S d S )Nr   )get_terminal_sizer   r#   r(   F)r3   r4   nl)termuir   rD   r6   r5   r   r   maxr   
BEFORE_BARrA   r   rE   r_   r   r3   r4   rc   )	rG   r   buf	old_widthclutter_length	new_widthclear_widthlineline_lens	            r   rL   zProgressBar.render_progress   s   ------> 	F> 		#
IDJ%d&?&?&A&ABBNA002215FGGI9$$

:&&&

3/000!*"DJj>%.K

:((**D>>>!T^h%>%>%DN

4

3+01222wws|| 4?""4<<>>""DODITZEBBBBIOO #"""rJ   c                    | xj         |z  c_         | j        r| j         | j        k    rd| _        t	          j                    | j        z
  dk     rd S t	          j                    | _        | j         r$t	          j                    | j        z
  | j         z  }nt	          j                    | j        z
  }| j        dd          |gz   | _        | j        | _        d S )NTre   i)	r:   r9   r8   r@   r<   r>   r=   r;   r?   )rG   n_stepssteps      r   	make_stepzProgressBar.make_step  s    G 	!T[!8!8 DMIKK$-'3..F	
 8 	,IKK$*,8DD9;;+D8BCC=D6)*rJ   c                 X    |                      |           |                                  d S rP   )r   rL   )rG   r   s     r   updatezProgressBar.update"  s,    wrJ   c                 0    d| _         d | _        d| _        d S )Nr   T)r?   rC   r@   rM   s    r   finishzProgressBar.finish&  s     rJ   c              #     K   | j         st          d          | j        r| j        D ]}|V  dS | j        D ]"}|| _        |V  |                     d           #|                                  |                                  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.
        rW   r   N)rB   rX   rD   r7   rC   r   r   rL   )rG   rvs     r   rY   zProgressBar.generator+  s       | 	QOPPP> 		#i    i  $&!AKKMMM  """""rJ   )Nr"   r#   r$   r%   TNFNNNNr&   )__name__
__module____qualname__rI   rN   rU   rZ   r]   r\   r_   rQ   propertyrh   rl   rn   rx   r{   r~   r   r   rL   r   r   r   rY    rJ   r   r!   r!   4   s        4 4 4 4l  
             D< < <   > > X>
 4 4 X4
   X
    8 8 8  &  6% % %N+ + +,    
# # # # #rJ   r!   c                 B   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          st          j                            d          rt          | d|          S t          t
          d          r)t          j        d	          d
k    rt          | d|          S d
dl}|                                \  }}t          j        |           	 t          t
          d          rPt          j        d                    |                    d
k    r%t          | d|          t          j        |           S t	          || |          t          j        |           S # t          j        |           w xY 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closers   unlink)rY   r4   stdout	pager_cmdr   fdfilenames          r   pagerr   F  s   !##F#) 4F6NN 4&)U333..4";;==I 7 	?!)Y>>>)Y666	z~~f!222&)U333
 :cl%%e,, :i5999r8 4+?!@!@A!E!E)VU333OOO##%%LBHRLLL2x   	8RY{/A/A(/K/K%L%LPQ%Q%Qi77 		( &)U33
	(	(s   >AH #H Hc                    ddl }t          t          j                  }|                    dd          d                                         }|o|d         dk    rcd                    t          j                            dd	          d
                    |dd                             }|sd|d<   d}n
d|v sd|v rd}|	                    |d|j
        |          }t          |j                  }	 | D ]A}	|st          |	          }	|j                            |	                    |d                     B	 |j                                         n# t"          t$          f$ r Y nw xY w	 	 |                                 dS # t$          $ r Y nw xY w()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splitrs   r   r   PopenPIPEr   r   r   ra   encoder   IOErrorKeyboardInterruptwait)
rY   cmdr4   r   r   
cmd_detail
less_flagscencodingtexts
             r   r   r   c  s    
rz

C C##B'--//J}A&00]]2:>>&"#=#=sxx
STSUSU?W?WXX
 	CKEEJ#"3"3ED
SIIA ))H	 	< 	<D (!$''GMM$++h	::;;;;		< 	
 &'   	FFHHH E ! 	 	 	D	s%   0AE E#"E#(E> >
F
Fc                    ddl }|                                }d                    |           }|st          |          }t	          t
          j                  }t          |d          d         5 }|                    |	                    |                     ddd           n# 1 swxY w Y   	 t          j        d                    ||                     t          j        |           dS # t          j        |           w xY w)z<Page through text by invoking a program on a temporary file.r   Nr(   wb{} "{}")r   mktempr   r   r   r   r   r	   ra   r   r   r   rs   r   )rY   r   r4   r   r   r   r   fs           r   r   r     s%   OOO  H779D  $ ,,H	Xt	$	$Q	' '1	H%%&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '
	)""311222
	(	(s   .)B##B'*B'/(C- -Dc                 \    |D ](}|st          |          }|                     |           )dS )z>Simply print unformatted text.  This is the ultimate fallback.N)r   ra   )streamrY   r4   r   s       r   r   r     sE       	$d##DT rJ   c                   (    e Zd ZddZd Zd Zd ZdS )	EditorNT.txtc                 >    || _         || _        || _        || _        d S rP   )editorr   require_save	extension)rG   r   r   r   r   s        r   rI   zEditor.__init__  s#    ("rJ   c                     | j         | j         S dD ]'}t          j                            |          }|r|c S (t          rdS dD ]1}t          j        d                    |                    dk    r|c S 2dS )N)VISUALEDITORnotepad)zsensible-editorvimnanozwhich {} >/dev/null 2>&1r   vi)r   r   r   r   r   r   rs   )rG   keyr   r   s       r   
get_editorzEditor.get_editor  s    ;";% 	 	C$$B 			 	96 	 	Fy3::6BBCCqHH ItrJ   c                    dd l }|                                 }| j        r9t          j                                        }|                    | j                   nd }	 |                    d                    ||          |d          }|	                                }|dk    r"t          d                    |                    d S # t          $ r(}t          d                    ||                    d }~ww xY w)Nr   r   T)r   r   z{}: Editing failed!z{}: Editing failed: {})r   r   r   r   r   copyr   r   rs   r   r   OSError)rG   r   r   r   r   r   	exit_codees           r   	edit_filezEditor.edit_file  s	   ""8 	joo''GNN48$$$$G	M    22t !  A IA~~$%:%A%A&%I%IJJJ ~ 	M 	M 	M !9!@!@!K!KLLL	Ms   A(C 
C8#C33C8c                    dd l }|pd}|r|                    d          s|dz  }|                    d| j                  \  }}	 t          rd}|                    dd          }nd}|                    |          }t          j        |d	          }|	                    |           |
                                 t          j                            |          }|                     |           | j        r:t          j                            |          |k    r	 t          j        |           d S t!          |d
          }	 |                                }|
                                 n# |
                                 w xY w|                    d                              dd          t          j        |           S # t          j        |           w xY w)Nr   r(   r   zeditor-)prefixsuffixz	utf-8-sigz
zutf-8r   rb)r   endswithr   r   r   r   r   r   fdopenra   r   pathgetmtimer   r   r   openreaddecode)	rG   r   r   r   namer   r   	timestampr   s	            r   editzEditor.edit  s   zr 	d++ 	DLD##9T^#LLD	 #&||D&11";;x((D	"d##AGGDMMMGGIII((..INN4     RW%5%5d%;%;y%H%H IdOOOOO T4  AVVXX								99[))11&$??IdOOOOBIdOOOOs+   CF? /F?  E) F? )E??+F? ?G)NNTr   )r   r   r   rI   r   r   r  r   rJ   r   r   r     sX        # # # #  M M M&! ! ! ! !rJ   r   Fc                 D   dd l }d }t          j        dk    rdg}|r|                    d           |r|                    d           |                     ||                      t	          dd          }	 |                    ||	                                          |                                 S # |                                 w xY wt          r|r> ||           } d
	                     || 
                    dd                              }n.d	                    |rdnd| 
                    dd                    }t          j        |          S t          r|rR ||           } d	                    t          j                            |           
                    dd                    }n.d	                    |rdnd| 
                    dd                    }t          j        |          S 	 |r+t          j                             ||                     pd} n ||           } |                    d| g          }|r|                                S dS # t           $ r9 |                     d          r |s|sdd l}|                    |            Y dS Y dS w xY w)Nr   c                     	 dd l }n# t          $ r dd l }Y nw xY w|                     d          r|                    | dd                    } | S )Nr   zfile://   )urllibImportErrorr   unquote)urlr  s     r   _unquote_filezopen_url.<locals>._unquote_file  sl    	MMMM 	 	 	MMMMM	>>)$$ 	*..QRR))C
s    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   r   r  r   r   r   r   rs   r   r   r   r   r  dirnamer   r   
webbrowser)	r  r   locater   r  argsnullr   r  s	            r   open_urlr    s      |xx 	KK 	KKMM#&&'''K%%	##D#66;;==JJLLLLDJJLLLL	  	-$$C*11--CQS@T@T2U2UVVDD%,,'RS")=)= D y	  	Y-$$C"))"'//#*>*>*F*FsB*O*OPPDD%,,T-ATTr3;;sTVCWCWXXDy 	%'//--"4"455<CC-$$Cj#.// 	6688Oq   >>122 	6 	$ 	OOC   11qqs   8(B5 5C5A$I <JJc                     | dk    rt                      | dk    rt          st                      | dk    rt          rt                      d S d S )N)r   r   EOFError)chs    r   _translate_ch_to_excr&  5  sP    	W}}!!!	W}}S}jj	W}}}jj }}}rJ   c               #      K   d V  d S rP   r   r   rJ   r   raw_terminalr(  A  s      rJ   c                     | rt           j        }nt           j        } |            }|dv r| |            z  }t          |           |S )N)    à)msvcrtgetwchegetwchr&  )r   funcr   s      r   getcharr0  E  sW    <  	!>DD=DTVV### $$&&LBR   	rJ   c               #     K   t          t          j                  s$t          d          } |                                 }n t          j                                        }d } 	 t          j        |          }	 t          j        |           |V  t          j	        |t
          j
        |           t          j                                         | |                                  d S d S # t          j	        |t
          j
        |           t          j                                         | |                                  w w xY w# t
          j        $ r Y d S w xY w)Nz/dev/tty)r   r   r   r  filenotermios	tcgetattrttysetraw	tcsetattr	TCSADRAINr   rc   r   error)r   r   old_settingss      r   r(  r(  u  s4     ci   	Z  ABB!!##BA	",R00L
2!"g&7FFF
  """=GGIIIII != !"g&7FFF
  """=GGIIII !} 	 	 	DD	s,   !E  6C& AE  &AD==E   EEc                 l   t                      5 }t          j        |d          }|                    t	          t
          j                  d          }| r8t          t
          j                  rt
          j        	                    |           t          |           |cd d d            S # 1 swxY w Y   d S )N    r   )r(  r   r  r	  r   r   r   r   r   ra   r&  )r   r   r%  s      r   r0  r0    s    ^^ 	rRB,SY77CCB %sz** %
  $$$ $$$	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BB))B-0B-rP   )FF)(__doc__
contextlibr   r   r   r<   _compatr   r   r   r   r   r	   r
   r   r   r   
exceptionsr   utilsr   r
  r   rb   r   objectr!   r   r   r   r   r   r  r&  r,  contextmanagerr(  r0  r5  r3  r   rJ   r   <module>rD     s   
      				 



  ) ) ) ) ) )       & & & & & &                                                 & & & & & &      7d??JIIJI  $O# O# O# O# O#& O# O# O#d   :. . .b  $  I I I I IV I I IX8 8 8 8v    SMMM  ) ) ) ) )Z JJJNNN  (    rJ   