ó â\e[c@`s·ddlmZmZddlZddlZddlZddlZddlZddlm Z m Z mZddl m Z ddl mZmZmZmZmZmZddlmZmZmZddlmZddlmZdd lmZdd lmZdd l m!Z!e!r1dd l"m#Z#nydd l m$Z$Wne%k r^dZ$nXej'e(ƒZ)d„Z*e*eeƒZ+de,fd„ƒYZ-defd„ƒYZ.defd„ƒYZ/de,fd„ƒYZ0de,fd„ƒYZ1de1e-e0fd„ƒYZ2de2e+fd„ƒYZ3de2e.fd„ƒYZ4de2efd „ƒYZ5d!e2efd"„ƒYZ6d#e2efd$„ƒYZ7d%e2efd&„ƒYZ8d'e2efd(„ƒYZ9d)e2e/fd*„ƒYZ:d+e1e-e0eefd,„ƒYZ;ie4e4fd-6e3e;fd.6e5e;fd/6e9e;fd06e:e;fd16Z<dd2„Z=ej>d3„ƒZ?d4e,fd5„ƒYZ@d6e,fd7„ƒYZAd8e,fd9„ƒYZBej>d:„ƒZCdS(;i(tabsolute_importtdivisionN(tSIGINTtdefault_int_handlertsignal(tsix(tBart ChargingBartFillingCirclesBartFillingSquaresBartIncrementalBartShadyBar(t HIDE_CURSORt SHOW_CURSORt WritelnMixin(tSpinner(tWINDOWS(tget_indentation(t format_size(tMYPY_CHECK_RUNNING(tAny(tcoloramacC`s¨t|jddƒ}|s|St|dtjƒƒt|dtjƒƒg}|tt|dgƒƒ7}y tjƒj|ƒj|ƒWntk rŸ|SX|SdS(Ntencodingt empty_filltfilltphases( tgetattrtfiletNoneRt text_typetlisttjointencodetUnicodeEncodeError(t preferredtfallbackRt characters((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt_select_progress_class$s  tInterruptibleMixincB`s)eZdZd„Zd„Zd„ZRS(s Helper to ensure that self.finish() gets called on keyboard interrupt. This allows downloads to be interrupted without leaving temporary state (like hidden cursors) behind. This class is similar to the progress library's existing SigIntMixin helper, but as of version 1.2, that helper has the following problems: 1. It calls sys.exit(). 2. It discards the existing SIGINT handler completely. 3. It leaves its own handler in place even after an uninterrupted finish, which will have unexpected delayed effects if the user triggers an unrelated keyboard interrupt some time after a progress-displaying download has already completed, for example. cO`sMtt|ƒj||Žtt|jƒ|_|jdkrIt|_ndS(s= Save the original SIGINT handler for later. N( tsuperR&t__init__RRt handle_siginttoriginal_handlerRR(tselftargstkwargs((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR(TscC`s'tt|ƒjƒtt|jƒdS(s½ Restore the original SIGINT handler after finishing. This should happen regardless of whether the progress display finishes normally, or gets interrupted. N(R'R&tfinishRRR*(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR.dscC`s|jƒ|j||ƒdS(s² Call self.finish() before delegating to the original SIGINT handler. This handler should only be in place while the progress display is active. N(R.R*(R+tsignumtframe((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR)ns (t__name__t __module__t__doc__R(R.R)(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR&Bs  t SilentBarcB`seZd„ZRS(cC`sdS(N((R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytupdate{s(R1R2R5(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR4yst BlueEmojiBarcB`s eZdZdZdZdZRS(s %(percent)d%%t u🔹u🔷u🔵(u🔹u🔷u🔵(R1R2tsuffixt bar_prefixt bar_suffixR(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR6stDownloadProgressMixincB`sJeZd„Zed„ƒZed„ƒZed„ƒZdd„ZRS(cO`s8tt|ƒj||Ždtƒd|j|_dS(NR7i(R'R;R(Rtmessage(R+R,R-((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR(‰scC`s t|jƒS(N(Rtindex(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt downloadedscC`s(|jdkrdStd|jƒdS(Ngs...is/s(tavgR(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytdownload_speed‘scC`s|jrd|jSdS(Nseta %st(tetateta_td(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt pretty_eta˜s  icc`s1x |D]}|V|j|ƒqW|jƒdS(N(tnextR.(R+tittntx((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytiteržs (R1R2R(tpropertyR>R@RDRI(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR;‡s  t WindowsMixincB`seZd„ZRS(c`s†trˆjrtˆ_nttˆƒj||Žtr‚tr‚tjˆjƒˆ_‡fd†ˆj_ ‡fd†ˆj_ ndS(Nc`sˆjjjƒS(N(Rtwrappedtisatty((R+(s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt»sc`sˆjjjƒS(N(RRLtflush((R+(s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRN¿s( Rt hide_cursortFalseR'RKR(Rt AnsiToWin32RRMRO(R+R,R-((R+s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR(§s  (R1R2R((((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRK¥stBaseDownloadProgressBarcB`seZejZdZdZRS(s %(percent)d%%s0%(downloaded)s %(download_speed)s %(pretty_eta)s(R1R2tsyststdoutRR<R8(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRSÂs tDefaultDownloadProgressBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRVÍstDownloadSilentBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRWÒstDownloadIncrementalBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRXÖstDownloadChargingBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRYÛstDownloadShadyBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRZàstDownloadFillingSquaresBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR[ästDownloadFillingCirclesBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR\éstDownloadBlueEmojiProgressBarcB`seZRS((R1R2(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR]îstDownloadProgressSpinnercB`s)eZejZdZd„Zd„ZRS(s!%(downloaded)s %(download_speed)scC`s4t|dƒs'tj|jƒ|_nt|jƒS(Nt_phaser(thasattrt itertoolstcycleRR_RE(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt next_phaseùscC`sm|j|}|jƒ}|j|}dj||r;dnd||rMdnd|gƒ}|j|ƒdS(NRAR7(R<RcR8Rtwriteln(R+R<tphaseR8tline((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR5þs    (R1R2RTRURR8RcR5(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR^ós  tofftontasciitprettytemojicC`sF|dks|dkr*t|dƒjSt|dd|ƒjSdS(Niitmax(Rt BAR_TYPESRI(t progress_barRl((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytDownloadProgressProviderscc`sctrdVnQ|jƒ s0tjƒtjkr8dVn'|jtƒz dVWd|jtƒXdS(N( RRMtloggertgetEffectiveLeveltloggingtINFOtwriteR R (R((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt hidden_cursor%s"  t RateLimitercB`s#eZd„Zd„Zd„ZRS(cC`s||_d|_dS(Ni(t_min_update_interval_secondst _last_update(R+tmin_update_interval_seconds((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR(9s cC`s&tjƒ}||j}||jkS(N(ttimeRxRw(R+tnowtdelta((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytready=s  cC`stjƒ|_dS(N(RzRx(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytresetBs(R1R2R(R}R~(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRv8s  tInteractiveSpinnercB`s5eZdddd„Zd„Zd„Zd„ZRS(s-\|/gÀ?cC`sƒ||_|dkr!tj}n||_t|ƒ|_t|_t j |ƒ|_ |jj dt ƒ|jdƒd|_dS(NR7s ... i(t_messageRRTRUt_fileRvt _rate_limiterRQt _finishedRaRbt _spin_cycleRtRt_width(R+R<Rt spin_charsRy((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR(Gs     "cC`sy|j st‚d|j}|jj|d|j|ƒ|jj|ƒt|ƒ|_|jjƒ|jjƒdS(NsR7( RƒtAssertionErrorR…RRttlenROR‚R~(R+tstatustbackup((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt_writeVs  cC`s:|jr dS|jjƒs dS|jt|jƒƒdS(N(RƒR‚R}R‹RER„(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytspinbs  cC`sD|jr dS|j|ƒ|jjdƒ|jjƒt|_dS(Ns (RƒR‹RRtROtTrue(R+t final_status((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR.is    N(R1R2RR(R‹RŒR.(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRFs  tNonInteractiveSpinnercB`s/eZdd„Zd„Zd„Zd„ZRS(i<cC`s2||_t|_t|ƒ|_|jdƒdS(Ntstarted(R€RQRƒRvR‚t_update(R+R<Ry((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR(ws  cC`s7|j st‚|jjƒtjd|j|ƒdS(Ns%s: %s(RƒR‡R‚R~RptinfoR€(R+R‰((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR‘}s cC`s1|jr dS|jjƒs dS|jdƒdS(Nsstill running...(RƒR‚R}R‘(R+((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRŒ‚s  cC`s.|jr dS|jd|fƒt|_dS(Nsfinished with status '%s'(RƒR‘R(R+RŽ((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyR.‰s (R1R2R(R‘RŒR.(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyRvs   cc`s³tjjƒr3tjƒtjkr3t|ƒ}n t|ƒ}yt tjƒ |VWdQXWnAt k r|j dƒ‚n.t k r¡|j dƒ‚nX|j dƒdS(Ntcanceledterrortdone( RTRURMRpRqRrRsRRRutKeyboardInterruptR.t Exception(R<tspinner((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pyt open_spinners$     (Dt __future__RRt contextlibRaRrRTRzRRRt pip._vendorRtpip._vendor.progress.barRRRR R R tpip._vendor.progress.helpersR R Rtpip._vendor.progress.spinnerRtpip._internal.compatRtpip._internal.utils.loggingRtpip._internal.utils.miscRtpip._internal.utils.typingRttypingRRR—Rt getLoggerR1RpR%t_BaseBartobjectR&R4R6R;RKRSRVRWRXRYRZR[R\R]R^RmRotcontextmanagerRuRvRRR™(((s5/tmp/pip-install-0xiv62/pip/pip/_internal/utils/ui.pytst     .   7        0