B ÔÂ_ÞPã@s„dZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZddlmZddlmZejdkrÐdZdZndZdZdd„ZGdd„deƒZd.dd„Zdd„Zdd„Zdd „ZGd!d"„d"eƒZd/d$d%„Z d&d'„Z!erZddl"Z"ej#d(d)„ƒZ$d*d+„Z%n&ddl&Z&ddl'Z'ej#d,d)„ƒZ$d-d+„Z%dS)0z¿ 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 CsŠyt|ƒSttfk r„yt|ƒj}Wntk r>dSXy ||ƒ}Wntk r`dSX|tks|t|tƒr||dkr€dS|SXdS)z%Returns the length hint of an object.Nr)ÚlenÚAttributeErrorÚ TypeErrorÚtypeÚ__length_hint__ÚNotImplementedÚ isinstancer)ÚobjZget_hintÚhint©rú6/tmp/pip-unpacked-wheel-cnmkfm2f/click/_termui_impl.pyÚ _length_hint"s rc @s¾eZdZd1d d „Zd d „Zd d„Zdd„Zdd„ZeZdd„Z dd„Z e dd„ƒZ e dd„ƒZ e dd„ƒZdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„ZdS)2Ú ProgressBarNú#ú ú%(bar)sú TFécCs||_||_||_||_||_||_| |_| |_| p6d|_| dkrHt ƒ} | |_ | |_ ||_ |dk|_ |dkrtt|ƒ}|dkr”|dkrŒtdƒ‚t|ƒ}t|ƒ|_||_|dk |_d|_g|_t ¡|_|_d|_d|_d|_d|_d|_t|j ƒ |_d|_ d|_!dS)NÚrziterable or length is requiredFgà?)"Ú fill_charÚ empty_charÚ bar_templateÚinfo_sepÚshow_etaÚ show_percentÚshow_posÚitem_show_funcÚlabelrÚfileÚcolorÚwidthÚ autowidthrrr Ú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Úiterabler3r%r&r'r(r)r*r+r,r-r.r/r0rrrÚ__init__5sF    zProgressBar.__init__cCsd|_| ¡|S)NT)r=Úrender_progress)rBrrrÚ __enter__kszProgressBar.__enter__cCs | ¡dS)N)Ú render_finish)rBÚexc_typeÚ exc_valueÚtbrrrÚ__exit__pszProgressBar.__exit__cCs|jstdƒ‚| ¡| ¡S)Nz.You need to use progress bars in a with block.)r=Ú RuntimeErrorrEÚ generator)rBrrrÚ__iter__sszProgressBar.__iter__cCs tt|ƒƒS)N)Únextr2)rBrrrÚ__next__yszProgressBar.__next__cCst ¡|j|jkS)N)r7r8rA)rBrrrÚis_fast„szProgressBar.is_fastcCs,|js| ¡rdS|j t¡|j ¡dS)N)r?rQr.ÚwriteÚ AFTER_BARÚflush)rBrrrrG‡s zProgressBar.render_finishcCs$|jr dSt|jt|jƒpddƒS)Ngð?r)r;Úminr5Úfloatr3)rBrrrÚpctszProgressBar.pctcCs"|js dSt|jƒtt|jƒƒS)Ng)r6ÚsumrVr)rBrrrÚtime_per_iteration“szProgressBar.time_per_iterationcCs"|jr|js|j|j|jSdS)Ng)r4r;rYr3r5)rBrrrÚeta™s zProgressBar.etacCsj|jrft|jƒ}|d}|d}|d}|d}|d}|d}|dkrXd ||||¡Sd |||¡SdS)Né<érz{}d {:02}:{:02}:{:02}z{:02}:{:02}:{:02}r$)r:ÚintrZÚformat)rBÚtÚsecondsÚminutesÚhoursrrrÚ format_etaŸs zProgressBar.format_etacCs$t|jƒ}|jr |d |j¡7}|S)Nz/{})Ústrr5r4r^r3)rBr5rrrÚ format_pos®s zProgressBar.format_poscCsd t|jdƒ¡dd…S)Nz{: 4}%édr)r^r]rW)rBrrrÚ format_pct´szProgressBar.format_pctcCs |jr6t|j|jƒ}|j|}||j|j|7}nf|jrJ|j|j}nRt|j|jpXdƒ}|jdkr’|j|tt   |j |j¡dd|jƒ<d  |¡}|S)Nrrg@gà?r$) r4r]rWr0r%r&r;ÚlistrYÚmathÚcosr5Újoin)rBZ bar_lengthÚbarrrrÚ format_bar·s  * zProgressBar.format_barcCs²|j}g}|jr |dkr |j }|jr4| | ¡¡|rF| | ¡¡|jrf|jrf|jsf| |  ¡¡|j dk rŽ|  |j ¡}|dk rŽ| |¡|j |j | ¡|j |¡dœ ¡S)N)r-rlÚinfo)r*r4r+Úappendrergr)r:r;rcr,r>r'r-rmr(rkÚrstrip)rBr*Z info_bitsZ item_inforrrÚformat_progress_lineÊs$   z ProgressBar.format_progress_linec Cs(ddlm}|jrdSg}|jrz|j}d|_t| ¡ƒ}td|ƒd|ƒ}||krt| t ¡| d|j ¡||_ ||_|j}|j dk r|j }| t ¡| ¡}t|ƒ}|j dks¾|j |krÄ||_ | |¡| d||¡d  |¡}||j kr$|  ¡s$||_ t||j|jdd|j ¡dS)Nr)Úget_terminal_sizerr r$F)r.r/Únl)Ztermuirrr?r1r0r rqÚmaxroÚ BEFORE_BARr<rkr@rQrr.r/rT) rBrrÚbufZ old_widthZclutter_lengthZ new_widthZ clear_widthÚlineÚline_lenrrrrEås:       zProgressBar.render_progresscCs’|j|7_|jr&|j|jkr&d|_t ¡|jdkrr;)rBrrrÚfinish&szProgressBar.finishccsf|jstdƒ‚|jr,xL|jD] }|VqWn6x$|jD]}||_|V| d¡q4W| ¡| ¡dS)z¨Return a generator which yields the items added to the bar during construction, and updates the progress bar *after* the yielded block returns. z.You need to use progress bars in a with block.rN)r=rLr?r2r>r|r}rE)rBÚrvrrrrM+s    zProgressBar.generator) Nrr r!r"TNFNNNNr#)Ú__name__Ú __module__Ú __qualname__rDrFrKrNrPrOrQrGÚpropertyrWrYrZrcrergrmrqrEr{r|r}rMrrrrr4sB '    'rc Cs tƒ}ttjƒrt|ƒs$t|||ƒStj dd¡p4d ¡}|rZt rNt |||ƒSt |||ƒStj d¡dkrvt|||ƒSt s†tj   d¡r’t |d|ƒSttdƒr¶t d ¡d kr¶t |d |ƒSd dl}| ¡\}}t |¡z:ttdƒrt d  |¡¡d krt |d |ƒSt|||ƒSt |¡XdS)z2Decide what method to use for paging through text.ZPAGERNr$ÚTERM)ZdumbZemacsZos2zmore <Úsystemz(less) 2>/dev/nullrÚlessz more "{}"Zmore)rrÚsysÚstdinÚ _nullpagerÚosÚenvironÚgetÚstripr Ú_tempfilepagerÚ _pipepagerÚplatformÚ startswithÚhasattrr„ÚtempfileÚmkstempÚcloser^Úunlink)rMr/ÚstdoutZ pager_cmdr’ÚfdÚfilenamerrrÚpagerFs,        "  r™c Cs(ddl}ttjƒ}| dd¡d ¡}|dkr„|ddkr„d tj dd ¡d  |dd…¡¡}|spd |d<d }nd |ks€d|kr„d }|j |d |j |d}t |j ƒ}y2x,|D]$} |sºt | ƒ} |j  |  |d¡¡qªWWnttfk rìYn X|j  ¡x*y | ¡Wntk rYqúXPqúWdS)zqPage through text by feeding it to another program. Invoking a pager through this might support colors. rNú/réÿÿÿÿr…z{}{}ÚLESSr$r z-RTÚrÚR)Úshellr‡ÚenvÚreplace)Ú subprocessÚdictr‰rŠÚrsplitÚsplitr^r‹rkÚPopenÚPIPErr‡r rRÚencodeÚIOErrorÚKeyboardInterruptr”Úwait) rMÚcmdr/r¢r Z cmd_detailZ less_flagsÚcÚencodingÚtextrrrrŽcs4 $    rŽc Cs‚ddl}| ¡}d |¡}|s&t|ƒ}ttjƒ}t|dƒd}| |  |¡¡WdQRXzt   d  ||¡¡Wdt   |¡XdS)zSimply print unformatted text. This is the ultimate fallback.N)r rR)ÚstreamrMr/r¯rrrrˆ¦s rˆc@s.eZdZd dd„Zdd„Zdd „Zd d „ZdS) ÚEditorNTú.txtcCs||_||_||_||_dS)N)Úeditorr Ú require_saveÚ extension)rBr¶r r·r¸rrrrD¯szEditor.__init__cCsd|jdk r|jSx dD]}tj |¡}|r|SqWtr:dSx$dD]}t d |¡¡dkr@|Sq@WdS)N)ZVISUALZEDITORZnotepad)zsensible-editorZvimZnanozwhich {} >/dev/null 2>&1rÚvi)r¶r‰rŠr‹r r„r^)rBÚkeyr~r¶rrrÚ get_editorµs    zEditor.get_editorc Cs¤ddl}| ¡}|jr.tj ¡}| |j¡nd}y:|jd ||¡|dd}|  ¡}|dkrjt d |¡ƒ‚Wn2t k rž}zt d ||¡ƒ‚Wdd}~XYnXdS)Nrz{} "{}"T)r rŸz{}: Editing failed!z{}: Editing failed: {}) r¢r»r r‰rŠÚcopyr|r¦r^r«r ÚOSError)rBr˜r¢r¶rŠr­Z exit_codeÚerrrÚ edit_fileÃs zEditor.edit_filec Csòddl}|pd}|r&| d¡s&|d7}|jd|jd\}}z¦trRd}| dd¡}nd}| |¡}t |d ¡}|  |¡|  ¡tj   |¡}|  |¡|jr®tj   |¡|kr®dSt|d ƒ}z | ¡}Wd|  ¡X| d¡ dd¡St |¡XdS) Nrr$rzeditor-)ÚprefixÚsuffixz utf-8-sigz zutf-8r°Úrb)r’Úendswithr“r¸r r¡r¨r‰ÚfdopenrRr”ÚpathÚgetmtimer¿r·ÚopenÚreadÚdecoder•) rBr¯r’r—Únamer®r²Ú timestampr~rrrÚeditÖs0        z Editor.edit)NNTrµ)rr€rrDr»r¿rÌrrrrr´®s r´Fc Cs¨ddl}dd„}tjdkrtdg}|r.| d¡|r<| d¡| ||ƒ¡tdd ƒ}z|j||d  ¡S| ¡Xn¤trÂ|rœ||ƒ}d   ||  d d ¡ƒ¡}nd  |r¨dnd |  d d ¡¡}t   |¡St r|rð||ƒ}d  t j |¡  d d ¡¡}nd  |rþdnd |  d d ¡¡}t   |¡SyF|r8t j ||ƒ¡p4d}n||ƒ}| d|g¡}|r\| ¡SdStk r¢| d¡rž|sž|sžddl}| |¡dSdSXdS)NrcSsJy ddl}Wntk r(ddl}YnX| d¡rF| |dd…¡}|S)Nrzfile://é)ÚurllibÚ ImportErrorrÚunquote)ÚurlrÎrrrÚ _unquote_fileýs  zopen_url.._unquote_fileÚdarwinrÇz-Wz-Rz /dev/nullÚw)Ústderrzexplorer /select,"{}"ú"r$zstart {} "" "{}"z/WAITz cygstart "{}"zcygstart {} "{}"z-wÚ.zxdg-open)zhttp://zhttps://r)r¢r†rrorÇr¦r«r”r r^r¡r‰r„rrÅÚdirnamer½rÚ webbrowser) rÑr«Zlocater¢rÒÚargsÚnullr­rÙrrrÚopen_urlúsP        rÜcCs6|dkrtƒ‚|dkr ts tƒ‚|dkr2tr2tƒ‚dS)Núúú)rªr ÚEOFError)ÚchrrrÚ_translate_ch_to_exc5s   râccs dVdS)NrrrrrÚ raw_terminalAsrãcCs6|r tj}ntj}|ƒ}|dkr*||ƒ7}t|ƒ|S)N)úõà)ÚmsvcrtZgetwcheÚgetwchrâ)rÚfuncr~rrrÚgetcharEs réc cs–ttjƒstdƒ}| ¡}ntj ¡}d}yPt |¡}zt |¡|VWdt  |tj |¡tj   ¡|dk rv|  ¡XWntjk rYnXdS)Nz/dev/tty)rr†r‡rÇÚfilenoÚtermiosÚ tcgetattrÚttyZsetrawÚ tcsetattrÚ TCSADRAINr–rTr”Úerror)r²r—Z old_settingsrrrrãus        c CsVtƒF}t |d¡}| ttjƒd¡}|r@ttjƒr@tj  |¡t |ƒ|SQRXdS)Né r¡) rãr‰rÈrÉrr†r‡rr–rRrâ)rr—rárrrréŠs  )N)FF)(Ú__doc__Ú contextlibrir‰r†r7Ú_compatrrrrrrr r r r Ú exceptionsr ÚutilsrrÊrurSrÚobjectrr™rŽrrˆr´rÜrâræÚcontextmanagerrãrérírërrrrÚsR              1L ;  -