Yc@swdZddlZddlZddlZddlZddlmZmZmZm Z m Z m Z m Z m Z mZddlmZddlmZejdkrdZd Zn d Zd Zd Zd efdYZddZdZdZdZdefdYZeedZ dZ!erRddl"Z"dZ#n!ddl$Z$ddl%Z%dZ#dS(sY click._termui_impl ~~~~~~~~~~~~~~~~~~ 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. :copyright: (c) 2014 by Armin Ronacher. :license: BSD, see LICENSE for more details. iNi( t_default_text_stdoutt range_typetPY2tisattyt open_streamt strip_ansitterm_lentget_best_encodingtWIN(techo(tClickExceptiontnts s s [?25ls[?25h cCsyt|SWnttfk ryt|j}Wntk rKdSXy||}Wntk rpdSX|tkst|tt f s|dkrdS|SXdS(s%Returns the length hint of an object.iN( tlentAttributeErrort TypeErrorttypet__length_hint__tNonetNotImplementedt isinstancetinttlong(tobjtget_hintthint((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt _length_hints     t ProgressBarcBseZdddddededddddd ZdZdZdZd Z e d Z e d Z e d Z d ZdZdZdZdZdZdZdZdZeseZ[nRS(t#t s%(bar)ss icCs||_||_||_||_||_||_| |_| |_| pQd|_| dkrot } n| |_ | |_ ||_ |dk|_|dkrt|}n|dkr|dkrtdnt|}nt||_||_|dk |_d|_g|_tj|_|_t|_t|_d|_t|_d|_t |j  |_!d|_"dS(Ntisiterable or length is required(#t fill_chart empty_chart bar_templatetinfo_septshow_etat show_percenttshow_postitem_show_functlabelRRtfiletcolortwidtht autowidthRRRtitertlengtht length_knowntpostavgttimetstarttlast_etatFalset eta_knowntfinishedt max_widthtenteredt current_itemRt is_hiddent _last_line(tselftiterableR,RRR R!R"R#R$R%R&R'R(R)((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt__init__4sD                        cCst|_|j|S(N(tTrueR7trender_progress(R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt __enter__\s  cCs|jdS(N(t render_finish(R;texc_typet exc_valuettb((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt__exit__ascCs&|jstdn|j|S(Ns.You need to use progress bars in a with block.(R7t RuntimeErrorR?(R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt__iter__ds  cCs.|jr dS|jjt|jjdS(N(R9R'twritet AFTER_BARtflush(R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyRAjs cCs0|jr dSt|jt|jp(ddS(Ng?i(R5tminR.tfloatR,(R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pytpctps cCs-|js dSt|jtt|jS(Ng(R/tsumRLR (R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyttime_per_iterationvs cCs,|jr(|j r(|j|j|jSdS(Ng(R-R5ROR,R.(R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyteta|scCs|jr|jd}|d}|d:}|d}|d:}|d}|d:}|dkrx|}d||||fSd|||fSndS(Nii<iis%dd %02d:%02d:%02ds%02d:%02d:%02dR(R4RP(R;tttsecondstminutesthourstdays((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt format_etas         cCs0t|j}|jr,|d|j7}n|S(Ns/%s(tstrR.R-R,(R;R.((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt format_poss cCsdt|jddS(Ns% 4d%%idi(RRM(R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt format_pctscCs|j}g}|jrot|j|j}|j|}||j|j|7}|dkr|j }qn|j r|j|j}nrt |j|jpd}|j dkr|j|tt j |j|j dd|jR*R)RRetmaxR`t BEFORE_BARR6RR_R:R R'R(RJ( R;RfRgtbuft old_widthtclutter_lengtht new_widtht clear_widthtlinetline_len((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyR?s>                  "cCs|j|7_|jr6|j|jkr6t|_ntj|jdkrSdStj|_|jd|jtj |jg|_|j|_ dS(Ng?i( R.R-R,R>R5R0R2R/R1R4(R;tn_steps((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt make_steps ,cCs|j||jdS(N(RsR?(R;Rr((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pytupdates cCsd|_d|_t|_dS(Ni(R4RR8R>R5(R;((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pytfinishs  cCsx|jrt|jSyt|j}||_Wn.tk rb|j|jtnX|jd|SdS(Ni(R9tnextR+R8t StopIterationRuR?Rt(R;trv((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyRvs        N(t__name__t __module__RR>R3R=R@RERGRAtpropertyRMRORPRVRXRYReR?RsRtRuRvRt__next__(((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyR2s.   %        % )   cCst}ttj s&t| r6t|||Stjjdd pNdj }|rt rst |||St |||Stjjddkrt|||St stj jdrt |d|Sttdrtjd d krt |d |Sd d l}|j\}}tj|zLttdrmtjd|d krmt |d|St|||SWd tj|Xd S(s2Decide what method to use for paging through text.tPAGERRtTERMtdumbtemacstos2smore /dev/nullitlessiNs more "%s"tmore(RR(RRtsyststdint _nullpagertostenvirontgetRtstripRt_tempfilepagert _pipepagertplatformt startswiththasattrRttempfiletmkstemptclosetunlink(ttextR(tstdoutt pager_cmdRtfdtfilename((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pytpagers, !$  (c Csyddl}ttj}|jdddj}|dkr|ddkrtjjddd j|d}|sd |dRtPopentPIPERRRHtencodeRtIOErrortKeyboardInterrupttwait( RtcmdR(RRt cmd_detailt less_flagstctencoding((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyR.s4 &      cCsddl}|j}|s-t|}nttj}t|dd}|j|j|WdQXzt j |d|dWdt j |XdS(s<Page through text by invoking a program on a temporary file.iNtwbis "t"( RtmktempRRRRRRHRRRR(RRR(RRRtf((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyR]s  cCs&|st|}n|j|dS(s>Simply print unformatted text. This is the ultimate fallback.N(RRH(tstreamRR(((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyRlstEditorcBs8eZddeddZdZdZdZRS(s.txtcCs(||_||_||_||_dS(N(teditorRt require_savet extension(R;RRRR((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyR=us   cCs|jdk r|jSx*d D]"}tjj|}|r|SqWtrMdSx+d D]#}tjd|dkrT|SqTWdS( NtVISUALtEDITORtnotepadtvimtnanoswhich %s >/dev/null 2>&1itvi(RR(RR(RRRRRRR(R;tkeyRxR((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt get_editor|s  cCsddl}|j}|jrCtjj}|j|jnd}yT|jd||fd|dt }|j }|dkrt d|nWn)t k r}t d||fnXdS(Nis%s "%s"RRis%s: Editing failed!s%s: Editing failed: %s( RRRRRtcopyRtRRR>RR tOSError(R;RRRRRt exit_codete((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt edit_files     c Cs^ddl}|pd}|r;|jd r;|d7}n|jddd|j\}}ztrd}|jdd}nd }|j|}tj|d }|j ||j tj j |}|j ||jrtj j ||krdSt|d }z|j}Wd|j X|jdjddSWdtj|XdS( NiRs tprefixseditor-tsuffixs utf-8-sigs sutf-8Rtrb(RtendswithRRRRRRtfdopenRHRtpathtgetmtimeRRRtopentreadtdecodeR( R;RRRtnameRRt timestampRx((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pytedits2   !     N(RyRzRR>R=RRR(((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyRss     c Csddl}d}tjdkrdg}|rC|jdn|rY|jdn|j||tdd}z|j|d |jSWd|jXnltr|r||}d ||j d d }n(d |rdpd |j d d f}t j |Sy`|r?t j j ||p9d}n ||}|jd|g}|rp|jSdSWnLtk r|jdr| r| rddl}|j|dSdSXdS(NicSsYyddl}Wntk r/ddl}nX|jdrU|j|d}n|S(Nisfile://i(turllibt ImportErrorRtunquote(turlR((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt _unquote_files tdarwinRs-Ws-Rs /dev/nulltwtstderrsexplorer /select,"%s"RRsstart %s "" "%s"s/WAITt.sxdg-openishttp://shttps://i(shttp://shttps://(RRRR`RRRRRRRRRtdirnameRRt webbrowser( RRtlocateRRtargstnullRR((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pytopen_urlsF    % !     cCs4|dkrtn|dkr0tndS(Nss(RtEOFError(tch((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt_translate_ch_to_excs   cCstj}|r"tj|nt|tr}ttjdd}|dk rh|j |d}q}|j dd}n|S(NRRtcp1252( tmsvcrttgetchtputcharRRtgetattrRRRR(R Rxtenc((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pytgetchars   cCsttjs*td}|j}ntjj}d}ytj|}zKtj |t j |d}|rttj rtj j |nWdtj|tj|tj j|dk r|jnXWntjk rnXt||jttjdS(Ns/dev/ttyi R(RRRRtfilenoRttermiost tcgetattrtttytsetrawRRRRHt tcsetattrt TCSADRAINRJRterrorRRR(R RRt old_settingsR((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyR s(     (&t__doc__RRR0R]t_compatRRRRRRRRRtutilsR t exceptionsR RRjRIRtobjectRRRRRRRR3RRRRRR(((se/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/click/click/_termui_impl.pyt s6    @    /  M3