U a[@s(dZddlZddlZddlZddlZddlZddlZddlmZ ddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZedZejdkrdZdZndZdZGdddejeZd3ejeej e!ddddZ"ejeeej e!ddddZ#ejeeej e!ddddZ$ej%ejeej e!ddd d!Z&Gd"d#d#Z'd4ee!e!e(d%d&d'Z)eej e*d(d)d*Z+erddl,Z,ej-ej.e(d+d,d-Z/e!ed.d/d0Z0n:ddl1Z1ddl2Z2ej-ej.e(d+d1d-Z/e!ed.d2d0Z0dS)5z 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)_default_text_stdout)CYGWIN)get_best_encoding)isatty) open_stream) strip_ansi)term_len)WIN)ClickException)echoVnt  z [?25lz[?25h c@seZdZd4ejejeejeeeeee eje e ejej ejegejefejeejej eje eedd d d Z dd ddZ ddZejed ddZed ddZdd ddZeed ddZeed ddZeed ddZed ddZed d d!Zed d"d#Zed d$d%Zed d&d'Zdd d(d)Zedd*d+d,Zd5eejedd-d.d/Zdd d0d1Z ejed d2d3Z!dS)6 ProgressBarN# %(bar)s TFr)iterablelength fill_char empty_char bar_templateinfo_sepshow_eta show_percentshow_positem_show_funclabelfilecolorupdate_min_stepswidthreturncCs*||_||_||_||_||_||_| |_| |_| p6d|_| dkrHt } | |_ | |_ ||_ d|_ ||_|dk|_|dkrddlm}||d}|dkrd}|dkr|dkrtdttjtt|}t||_||_d|_g|_t|_|_d|_d|_ d|_!d|_"d|_#t$|j  |_%d|_&dS)Nr) length_hintziterable or length is requiredF)'rrrrrrr r!r"rr#r$r%_completed_intervalsr& autowidthoperatorr) TypeErrortcastIterablerrangeiterrposavgtimestartlast_eta eta_knownfinished max_widthentered current_itemr is_hidden _last_line)selfrrrrrrrrr r!r"r#r$r%r&r)rASC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-s9fh6ldx\click\_termui_impl.py__init__$sL     zProgressBar.__init__r'cCsd|_||S)NT)r<render_progressr@rArArB __enter__`szProgressBar.__enter__cCs |dSN) render_finish)r@exc_type exc_valuetbrArArB__exit__eszProgressBar.__exit__cCs|jstd||S)N.You need to use progress bars in a with block.)r< RuntimeErrorrE generatorrFrArArB__iter__hszProgressBar.__iter__cCs tt|SrH)nextr3rFrArArB__next__nszProgressBar.__next__cCs$|jr dS|jt|jdSrH)r>r#write AFTER_BARflushrFrArArBrIvs zProgressBar.render_finishcCs(|jr dSt|jt|jpdp ddS)N?r)r:minr4floatrrFrArArBpct|szProgressBar.pctcCs"|js dSt|jtt|jSNg)r5sumrYlenrFrArArBtime_per_iterationszProgressBar.time_per_iterationcCs&|jdk r"|js"|j|j|jSdSr[)rr:r^r4rFrArArBetaszProgressBar.etacCs|jrt|j}|d}|d}|d}|d}|d}|d}|dkrh|d|dd|dd|dS|dd|dd|dSdS)N<rzd 02:r()r9intr_)r@r/secondsminuteshoursrArArB format_etas  zProgressBar.format_etacCs(t|j}|jdk r$|d|j7}|S)N/)strr4r)r@r4rArArB format_poss  zProgressBar.format_poscCst|jdddddS)Ndz 4%r)rdrZrFrArArB format_pctszProgressBar.format_pctcCs|jdk r:t|j|j}|j|}||j|j|7}nf|jrN|j|j}nRt|j|jp\d}|jdkr|j|tt |j |jdd|j<d |}|S)Nrrg@g?r() rrdrZr&rrr:listr^mathcosr4join)r@Z bar_lengthbarcharsrArArB format_bars$    zProgressBar.format_barcCs|j}g}|jdk r$|dkr$|j }|jr8|||rJ|||jrj|jrj|jsj|| |j dk r| |j }|dk r|||j |j ||j|dS)N)r"rsinfo)rrr appendrkrnrr9r:rhr!r=rr"rurrrrstrip)r@rZ info_bitsZ item_inforArArBformat_progress_lines*    z ProgressBar.format_progress_linec CsBddl}|jr:|j|jkr6|j|_t|j|j|jddSg}|jr|j}d|_t | }t d| j |}||kr|t|d|j||_||_|j}|jdk r|j}|t| }t |}|jdks|j|kr||_|||d||d|}||jkr>||_t||j|jdd|jdS)Nr)r#r$rr(F)r#r$nl)shutilr>r?r"r r#r$r,r&r rymaxget_terminal_sizecolumnsrw BEFORE_BARr;rrrV) r@r{bufZ old_widthZclutter_lengthZ new_widthZ clear_widthlineZline_lenrArArBrEs@        zProgressBar.render_progress)n_stepsr'cCs|j|7_|jdk r*|j|jkr*d|_t|jdkr@dSt|_|jrft|j|j}nt|j}|jdd|g|_|jdk |_dS)NTrWi)r4rr:r6r8r7r5r9)r@rsteprArArB make_steps zProgressBar.make_step)rr=r'cCsF|dk r||_|j|7_|j|jkrB||j|d|_dS)aUpdate 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%rrE)r@rr=rArArBupdates  zProgressBar.updatecCsd|_d|_d|_dS)NFT)r9r=r:rFrArArBfinish1szProgressBar.finishccsj|jstd|jr"|jEdHnD|jD],}||_|jdkrD||V|dq(||dS)zReturn a generator which yields the items added to the bar during construction, and updates the progress bar *after* the yielded block returns. rNNrr) r<rOr>r3r=r+rErr)r@rvrArArBrP6s    zProgressBar.generator)NrrrrTNFNNNNrr)N)"__name__ __module__ __qualname__r/Optionalr1rrdrjboolCallableTextIOrCrGrMIteratorrQrSrIpropertyrYrZr^r_rhrkrnruryrErrrrPrArArArBr#sj   <-r)rPr$r'c Cs*t}ttjrt|s$t|||Stjddp4d}|rZt rNt |||St |||Stjddkrvt|||St stj drt |d|Sttdrtd d krt |d |Sd dl}|\}}t|zDttdr td |d d kr t |d|WSt|||WSt|XdS)z2Decide what method to use for paging through text.ZPAGERNr(TERM)ZdumbZemacsZos2zmore <systemz(less) 2>/dev/nullrlesszmore ""Zmore)rrsysstdin _nullpagerosenvirongetstripr _tempfilepager _pipepagerplatform startswithhasattrrtempfilemkstempcloseunlink)rPr$stdoutZ pager_cmdrfdfilenamerArArBpagerXs,        $r)rPcmdr$r'c Cs,ddl}ttj}|ddd}|dkr|ddkrtjddd |dd}|spd |d<d }nd |ksd |krd }|j|d |j |d}t t j |j }t|} z,|D]"} |st| } || | dqWnttfk rYn X|z |Wntk r YqXq(qdS)zqPage through text by feeding it to another program. Invoking a pager through this might support colors. rNrirr*rLESSr(r-RTrR)shellrenvreplace) subprocessdictrrrsplitsplitrrrPopenPIPEr/r0BinaryIOrrr rTencodeOSErrorKeyboardInterruptrwait) rPrr$rrZ cmd_detailZ less_flagscrencodingtextrArArBrus4 $  rc Csddl}|\}}d|}|s*t|}ttj}t|dd}|| |W5QRXzt |d|dW5t |XdS)zSimply print unformatted text. This is the ultimate fallback.N)r rT)rrPr$rrArArBrsrc@sxeZdZdejeejejeefeeddddZeddd Z edd d d Z ejej ejej d ddZ dS)EditorNT.txt)editorr require_save extensionr'cCs||_||_||_||_dSrH)rrrr)r@rrrrrArArBrCszEditor.__init__rDcCsf|jdk r|jSdD]}tj|}|r|Sqtr:dSdD]"}td|ddkr>|Sq>dS)N)ZVISUALZEDITORZnotepad)zsensible-editorZvimZnanozwhich z >/dev/null 2>&1rvi)rrrrr r)r@keyrrrArArB get_editors    zEditor.get_editor)rr'c Csddl}|}d}|jr0tj}||jzD|j|d|d|dd}|}|dkrrt t dj |dWn8t k r}zt t dj ||d W5d}~XYnXdS) NrrrT)rrz{editor}: Editing failed)rz{editor}: Editing failed: {e})re) rrrrrcopyrrrr rformatr)r@rrrrrZ exit_coderrArArB edit_files"  zEditor.edit_file)rr'c CsJddl}|sd}nLt|ttfr&|}n8|r<|ds<|d7}trT|ddd}n |d}|jd|j d\}}zt |d }| |W5QRXt |t j|t j|d ft j|}|||jrt j||krWPdSt|d }|}W5QRXt|ttfr$|WS|dddWSt |XdS) Nrrz z utf-8-sigzutf-8zeditor-)prefixsuffixrrb)r isinstancebytes bytearrayendswithr rrrrrrfdopenrTutimepathgetatimegetmtimerropenreaddecode) r@rrdatarnamer timestamprrArArBedits2 $   z Editor.edit)NNTr) rrrr/rrjMappingrrCrrAnyStrrrArArArBrs rF)urlrlocater'c Csddl}ttddd}tjdkrdg}|r6|d|rD|d|||td d }z|j||d WS|Xnt r|r|| d d }d|d }n*| d d }|rdnd }d|d|d }t |St rB|r t j|| d d }d|d }n,| d d }|r"dnd }d|d|d }t |SzJ|rbt j||p^d}n||}|d|g}|r|WSWdStk r|dr|s|sddl} | |YdSYdSXdS)Nr)rr'cSs*ddlm}|dr&||dd}|S)Nr)unquotezfile://) urllib.parserr)rrrArArB _unquote_file)s  zopen_url.._unquote_filedarwinrz-Wrz /dev/nullw)stderrrr(zexplorer /select,"z/WAITzstart z "" "z cygstart "z-wz cygstart r.zxdg-open)zhttp://zhttps://r)rrjrrrwrrrrr rrrrrdirnamerr webbrowser) rrrrrargsnullZwait_strrrrArArBopen_url&sV            r)chr'cCs6|dkrt|dkr ts t|dkr2tr2tdS)N)rr EOFError)rrArArB_translate_ch_to_excbs  rrDccs dVdS)Nr*rArArArArB raw_terminalrsr)r r'cCs6|r tj}ntj}|}|dkr*||7}t||S)N)à)msvcrtgetwchegetwchr)r funcrrArArBgetcharvs  rc csttjstd}|}ntj}d}zPt|}zt ||VW5t|tj|tj |dk rv| XWntjk rYnXdS)Nz/dev/tty)rrrrfilenotermios tcgetattr tcsetattrZ TCSADRAINrrVrttyZsetrawerror)rrZ old_settingsrArArBrs        c Cs^tN}t|dttjd}|rsf             7  3  a< 1