3 (\5@sxddlmZmZddlZddlZddlZddlZddlZddlm Z m Z mZddl m Z ddl mZmZddlmZmZmZddlmZddlmZdd lmZdd lmZdd lmZerdd lmZm Z m!Z!ydd l m"Z"Wne#k rdZ"YnXej$e%Z&ddZ'e'eeZ(Gddde)Z*GdddeZ+GdddeZ,Gddde)Z-Gddde)Z.Gddde.e*e-Z/Gddde/e(Z0Gddde/e+Z1Gd d!d!e/eZ2Gd"d#d#e/eZ3Gd$d%d%e/e,Z4Gd&d'd'e.e*e-eZ5e1e1fe0e5fe2e5fe3e5fe4e5fd(Z6d7d)d*Z7ej8d+d,Z9Gd-d.d.e)Z:Gd/d0d0e)Z;Gd1d2d2e;ZdS)8)absolute_importdivisionN)SIGINTdefault_int_handlersignal)six) HIDE_CURSOR SHOW_CURSOR)BarFillingCirclesBarIncrementalBar)Spinner)WINDOWS)get_indentation) format_size)MYPY_CHECK_RUNNING)AnyIteratorIO)coloramac Cst|jdd}|s|St|dtjt|dtjg}|tt|dg7}ytjj|j|Wntk rv|SX|SdS)Nencoding empty_fillfillphases)getattrfiler text_typelistjoinencodeUnicodeEncodeError) preferredfallbackr charactersr$i/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-build-k1a8l1r5/pip/pip/_internal/utils/ui.py_select_progress_class!sr&cs4eZdZdZfddZfddZddZZS)InterruptibleMixina 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. cs4tt|j||tt|j|_|jdkr0t|_dS)z= Save the original SIGINT handler for later. N)superr'__init__rr handle_sigintoriginal_handlerr)selfargskwargs) __class__r$r%r)Qs zInterruptibleMixin.__init__cstt|jtt|jdS)z Restore the original SIGINT handler after finishing. This should happen regardless of whether the progress display finishes normally, or gets interrupted. N)r(r'finishrrr+)r,)r/r$r%r0aszInterruptibleMixin.finishcCs|j|j||dS)z Call self.finish() before delegating to the original SIGINT handler. This handler should only be in place while the progress display is active. N)r0r+)r,signumframer$r$r%r*ksz InterruptibleMixin.handle_sigint)__name__ __module__ __qualname____doc__r)r0r* __classcell__r$r$)r/r%r'?s  r'c@seZdZddZdS) SilentBarcCsdS)Nr$)r,r$r$r%updatexszSilentBar.updateN)r3r4r5r9r$r$r$r%r8vsr8c@seZdZdZdZdZdZdS) BlueEmojiBarz %(percent)d%% 🔹🔷🔵N)r<r=r>)r3r4r5suffix bar_prefix bar_suffixrr$r$r$r%r:|sr:csJeZdZfddZeddZeddZeddZd d d ZZ S) DownloadProgressMixincs,tt|j||dtd|j|_dS)Nr;)r(rBr)rmessage)r,r-r.)r/r$r%r)szDownloadProgressMixin.__init__cCs t|jS)N)rindex)r,r$r$r% downloadedsz DownloadProgressMixin.downloadedcCs |jdkrdStd|jdS)Ngz...z/s)avgr)r,r$r$r%download_speeds z$DownloadProgressMixin.download_speedcCs|jrd|jSdS)Nzeta %s)etaeta_td)r,r$r$r% pretty_etas z DownloadProgressMixin.pretty_etarGccs*x|D]}|V|j|qW|jdS)N)nextr0)r,itnxr$r$r%iters zDownloadProgressMixin.iter)rG) r3r4r5r)propertyrFrIrMrRr7r$r$)r/r%rBs     rBcseZdZfddZZS) WindowsMixincs\trjrd_ttj||trXtrXtjj_fddj_fddj_ dS)NFcs jjjS)N)rwrappedisattyr$)r,r$r%sz'WindowsMixin.__init__..cs jjjS)N)rrUflushr$)r,r$r%rWs) r hide_cursorr(rTr)r AnsiToWin32rrVrX)r,r-r.)r/)r,r%r)s zWindowsMixin.__init__)r3r4r5r)r7r$r$)r/r%rTsrTc@seZdZejZdZdZdS)BaseDownloadProgressBarz %(percent)d%%z0%(downloaded)s %(download_speed)s %(pretty_eta)sN)r3r4r5sysstdoutrrDr?r$r$r$r%r[sr[c@s eZdZdS)DefaultDownloadProgressBarN)r3r4r5r$r$r$r%r^sr^c@s eZdZdS)DownloadSilentBarN)r3r4r5r$r$r$r%r_sr_c@s eZdZdS)DownloadIncrementalBarN)r3r4r5r$r$r$r%r`sr`c@s eZdZdS)DownloadFillingCirclesBarN)r3r4r5r$r$r$r%rasrac@s eZdZdS)DownloadBlueEmojiProgressBarN)r3r4r5r$r$r$r%rbsrbc@s&eZdZejZdZddZddZdS)DownloadProgressSpinnerz!%(downloaded)s %(download_speed)scCs"t|dstj|j|_t|jS)N_phaser)hasattr itertoolscyclerrdrN)r,r$r$r% next_phases z"DownloadProgressSpinner.next_phasecCsN|j|}|j}|j|}dj||r*dnd||r6dnd|g}|j|dS)NrJr;)rDrhr?rwriteln)r,rDphaser?liner$r$r%r9s    zDownloadProgressSpinner.updateN) r3r4r5r\r]rr?rhr9r$r$r$r%rcsrc)offonasciiZprettyZemojicCs8|dks|dkr t|djSt|d|djSdS)NrrG)max) BAR_TYPESrR)Z progress_barror$r$r%DownloadProgressProvidersrqc csRtr dVnB|j s$tjtjkr,dVn"|jtz dVWd|jtXdS)N) rrVloggergetEffectiveLevelloggingINFOwriterr )rr$r$r% hidden_cursors  rwc@s$eZdZddZddZddZdS) RateLimitercCs||_d|_dS)Nr)_min_update_interval_seconds _last_update)r,min_update_interval_secondsr$r$r%r))szRateLimiter.__init__cCstj}||j}||jkS)N)timerzry)r,nowdeltar$r$r%ready.s zRateLimiter.readycCstj|_dS)N)r|rz)r,r$r$r%reset4szRateLimiter.resetN)r3r4r5r)rrr$r$r$r%rx(srxc@seZdZddZddZdS)SpinnerInterfacecCs tdS)N)NotImplementedError)r,r$r$r%spin:szSpinnerInterface.spincCs tdS)N)r)r, final_statusr$r$r%r0>szSpinnerInterface.finishN)r3r4r5rr0r$r$r$r%r9src@s.eZdZd ddZddZdd Zd d ZdS) InteractiveSpinnerN-\|/?cCs\||_|dkrtj}||_t||_d|_tj||_ |jj dt |jdd|_ dS)NFr;z ... r) _messager\r]_filerx _rate_limiter _finishedrfrg _spin_cyclervr_width)r,rDr spin_charsr{r$r$r%r)Ds  zInteractiveSpinner.__init__cCs^|j s td|j}|jj|d|j||jj|t||_|jj|jjdS)Nr;) rAssertionErrorrrrvlenrXrr)r,statusbackupr$r$r%_writeSs     zInteractiveSpinner._writecCs,|jr dS|jjsdS|jt|jdS)N)rrrrrNr)r,r$r$r%r_s  zInteractiveSpinner.spincCs4|jr dS|j||jjd|jjd|_dS)N T)rrrrvrX)r,rr$r$r%r0gs    zInteractiveSpinner.finish)Nrr)r3r4r5r)rrr0r$r$r$r%rCs   rc@s.eZdZd ddZddZddZdd Zd S) NonInteractiveSpinner<cCs$||_d|_t||_|jddS)NFstarted)rrrxr_update)r,rDr{r$r$r%r)vs zNonInteractiveSpinner.__init__cCs*|j s t|jjtjd|j|dS)Nz%s: %s)rrrrrrinfor)r,rr$r$r%r}s  zNonInteractiveSpinner._updatecCs&|jr dS|jjsdS|jddS)Nzstill running...)rrrr)r,r$r$r%rs  zNonInteractiveSpinner.spincCs$|jr dS|jd|fd|_dS)Nzfinished with status '%s'T)rr)r,rr$r$r%r0szNonInteractiveSpinner.finishN)r)r3r4r5r)rrr0r$r$r$r%rus rccstjjr"tjtjkr"t|}nt|}y t tj |VWdQRXWn>t k rj|j dYn*t k r|j dYn X|j ddS)Ncancelederrordone) r\r]rVrrrsrtrurrrwKeyboardInterruptr0 Exception)rDspinnerr$r$r% open_spinners    r)N)? __future__rr contextlibrfrtr\r|rrr pip._vendorrZpip._vendor.progressrr pip._vendor.progress.barr r r pip._vendor.progress.spinnerr Zpip._internal.utils.compatrZpip._internal.utils.loggingrZpip._internal.utils.miscrZpip._internal.utils.typingrZtypingrrrrr getLoggerr3rrr&_BaseBarobjectr'r8r:rBrTr[r^r_r`rarbrcrprqcontextmanagerrwrxrrrrr$r$r$r%sj         7       2