U ÀÒ.eR6ã@sxddlmZmZddlZddlZddlZddlZddlZddlm Z m Z mZddl m Z ddl mZmZddlmZmZmZddlmZddlmZdd lmZdd lmZdd lmZerÐdd lmZm Z m!Z!zdd l m"Z"Wne#k rødZ"YnXe $e%¡Z&dd„Z'e'eeƒZ(Gdd„de)ƒZ*Gdd„deƒZ+Gdd„deƒZ,Gdd„de)ƒZ-Gdd„de)ƒZ.Gdd„de.e*e-ƒZ/Gdd„de/e(ƒZ0Gdd„de/e+ƒZ1Gd d!„d!e/eƒZ2Gd"d#„d#e/eƒZ3Gd$d%„d%e/e,ƒZ4Gd&d'„d'e.e*e-eƒZ5e1e1fe0e5fe2e5fe3e5fe4e5fd(œZ6d7d)d*„Z7ej8d+d,„ƒZ9Gd-d.„d.e)ƒZ:Gd/d0„d0e)ƒZ;Gd1d2„d2e;ƒZdS)8é)Úabsolute_importÚdivisionN)ÚSIGINTÚdefault_int_handlerÚsignal)Úsix)Ú HIDE_CURSORÚ SHOW_CURSOR)ÚBarÚFillingCirclesBarÚIncrementalBar)ÚSpinner)ÚWINDOWS)Úget_indentation)Ú format_size)ÚMYPY_CHECK_RUNNING)ÚAnyÚIteratorÚIO)ÚcoloramacCs„t|jddƒ}|s|St|dt ¡ƒt|dt ¡ƒg}|tt|dgƒƒ7}zt ¡ |¡ |¡Wntk rz|YSX|SdS)NÚencodingZ empty_fillZfillÚphases)ÚgetattrÚfilerZ text_typeÚlistÚjoinÚencodeÚUnicodeEncodeError)Z preferredZfallbackrZ characters©rú:/usr/lib/python3.8/site-packages/pip/_internal/utils/ui.pyÚ_select_progress_class%sþ r cs4eZdZdZ‡fdd„Z‡fdd„Zdd„Z‡ZS)Ú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_sigintÚoriginal_handlerr©ÚselfÚargsÚkwargs©Ú __class__rrr#Us zInterruptibleMixin.__init__cstt|ƒ ¡tt|jƒdS)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*rrr,eszInterruptibleMixin.finishcCs| ¡| ||¡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)r,r%)r'ZsignumÚframerrrr$osz InterruptibleMixin.handle_sigint)Ú__name__Ú __module__Ú __qualname__Ú__doc__r#r,r$Ú __classcell__rrr*rr!Cs  r!c@seZdZdd„ZdS)Ú SilentBarcCsdS©Nrr-rrrÚupdate|szSilentBar.updateN)r/r0r1r6rrrrr4zsr4c@seZdZdZdZdZdZdS)Ú BlueEmojiBarú %(percent)d%%ú )u🔹u🔷u🔵N)r/r0r1ÚsuffixZ bar_prefixZ bar_suffixrrrrrr7€sr7csJeZdZ‡fdd„Zedd„ƒZedd„ƒZedd„ƒZd d d „Z‡Z S) ÚDownloadProgressMixincs,tt|ƒj||Ždtƒd|j|_dS)Nr9é)r"r;r#rÚmessager&r*rrr#ŠszDownloadProgressMixin.__init__cCs t|jƒSr5)rÚindexr-rrrÚ downloadedŽsz DownloadProgressMixin.downloadedcCs |jdkrdStd|jƒdS)Ngz...éz/s)Zavgrr-rrrÚdownload_speed’s z$DownloadProgressMixin.download_speedcCs|jrd|jSdS)Nzeta %sÚ)ZetaZeta_tdr-rrrÚ pretty_eta™s z DownloadProgressMixin.pretty_etar@ccs&|D]}|V| |¡q| ¡dSr5)Únextr,)r'ÚitÚnÚxrrrÚiterŸs zDownloadProgressMixin.iter)r@) r/r0r1r#Úpropertyr?rArCrHr3rrr*rr;ˆs    r;cseZdZ‡fdd„Z‡ZS)Ú WindowsMixincs\trˆjrdˆ_ttˆƒj||ŽtrXtrXt ˆj¡ˆ_‡fdd„ˆj_‡fdd„ˆj_ dS)NFcs ˆjj ¡Sr5)rÚwrappedÚisattyrr-rrÚ¼óz'WindowsMixin.__init__..cs ˆjj ¡Sr5)rrKÚflushrr-rrrMÀrN) rZ hide_cursorr"rJr#rZ AnsiToWin32rrLrOr&r*r-rr#¨s zWindowsMixin.__init__)r/r0r1r#r3rrr*rrJ¦srJc@seZdZejZdZdZdS)ÚBaseDownloadProgressBarr8z0%(downloaded)s %(download_speed)s %(pretty_eta)sN)r/r0r1ÚsysÚstdoutrr=r:rrrrrPÃsrPc@s eZdZdS)ÚDefaultDownloadProgressBarN©r/r0r1rrrrrSÎsrSc@s eZdZdS)ÚDownloadSilentBarNrTrrrrrUÓsrUc@s eZdZdS)Ú DownloadBarNrTrrrrrV×srVc@s eZdZdS)ÚDownloadFillingCirclesBarNrTrrrrrWÜsrWc@s eZdZdS)ÚDownloadBlueEmojiProgressBarNrTrrrrrXásrXc@s&eZdZejZdZdd„Zdd„ZdS)ÚDownloadProgressSpinnerz!%(downloaded)s %(download_speed)scCs"t|dƒst |j¡|_t|jƒS)NÚ_phaser)ÚhasattrÚ itertoolsÚcyclerrZrDr-rrrÚ next_phaseìs z"DownloadProgressSpinner.next_phasecCsN|j|}| ¡}|j|}d ||r*dnd||r6dnd|g¡}| |¡dS)NrBr9)r=r^r:rZwriteln)r'r=Zphaser:Úlinerrrr6ñs    ûzDownloadProgressSpinner.updateN) r/r0r1rQrRrr:r^r6rrrrrYæsrY)ZoffZonÚasciiZprettyZemojicCs8|dks|dkr t|dƒjSt|d|d�jSdS)Nrr@)Úmax)Ú BAR_TYPESrH)Z progress_barrarrrÚDownloadProgressProvider srcc csPtr dVn@| ¡r"t ¡tjkr*dVn"| t¡z dVW5| t¡XdSr5) rrLÚloggerÚgetEffectiveLevelÚloggingÚINFOÚwriterr )rrrrÚ hidden_cursors  ric@s$eZdZdd„Zdd„Zdd„ZdS)Ú RateLimitercCs||_d|_dS)Nr)Ú_min_update_interval_secondsÚ _last_update)r'Úmin_update_interval_secondsrrrr#-szRateLimiter.__init__cCst ¡}||j}||jkSr5)Útimerlrk)r'ZnowZdeltarrrÚready2s zRateLimiter.readycCst ¡|_dSr5)rnrlr-rrrÚreset8szRateLimiter.resetN)r/r0r1r#rorprrrrrj,srjc@seZdZdd„Zdd„ZdS)ÚSpinnerInterfacecCs tƒ‚dSr5©ÚNotImplementedErrorr-rrrÚspin>szSpinnerInterface.spincCs tƒ‚dSr5rr©r'Z final_statusrrrr,BszSpinnerInterface.finishN)r/r0r1rtr,rrrrrq=srqc@s.eZdZd dd„Zdd„Zdd „Zd d „ZdS) ÚInteractiveSpinnerNú-\|/çÀ?cCs\||_|dkrtj}||_t|ƒ|_d|_t |¡|_ |j  dt ƒ|jd¡d|_ dS)NFr9z ... r) Ú_messagerQrRÚ_filerjÚ _rate_limiterÚ _finishedr\r]Ú _spin_cyclerhrÚ_width)r'r=rZ spin_charsrmrrrr#Hs  zInteractiveSpinner.__init__cCsRd|j}|j |d|j|¡|j |¡t|ƒ|_|j ¡|j ¡dS)Núr9)r~rzrhÚlenrOr{rp)r'ÚstatusZbackuprrrÚ_writeWs     zInteractiveSpinner._writecCs,|jr dS|j ¡sdS| t|jƒ¡dSr5)r|r{ror‚rDr}r-rrrrtcs  zInteractiveSpinner.spincCs4|jr dS| |¡|j d¡|j ¡d|_dS)NÚ T)r|r‚rzrhrOrurrrr,ks    zInteractiveSpinner.finish)Nrwrx)r/r0r1r#r‚rtr,rrrrrvGs þ  rvc@s.eZdZd dd„Zdd„Zdd„Zdd „Zd S) ÚNonInteractiveSpinneré<cCs$||_d|_t|ƒ|_| d¡dS)NFZstarted)ryr|rjr{Ú_update)r'r=rmrrrr#zs zNonInteractiveSpinner.__init__cCs|j ¡t d|j|¡dS)Nz%s: %s)r{rprdÚinfory)r'r�rrrr†�s zNonInteractiveSpinner._updatecCs&|jr dS|j ¡sdS| d¡dS)Nzstill running...)r|r{ror†r-rrrrt†s  zNonInteractiveSpinner.spincCs$|jr dS| d|f¡d|_dS)Nzfinished with status '%s'T)r|r†rurrrr,ŽszNonInteractiveSpinner.finishN)r…)r/r0r1r#r†rtr,rrrrr„ys r„c cs˜tj ¡r"t ¡tjkr"t|ƒ}nt|ƒ}z t tjƒ� |VW5QRXWn>t k rj|  d¡‚Yn*t k rˆ|  d¡‚Yn X|  d¡dS)NZcanceledÚerrorZdone) rQrRrLrdrerfrgrvr„riÚKeyboardInterruptr,Ú Exception)r=ZspinnerrrrÚ open_spinner–s    r‹)N)?Z __future__rrÚ contextlibr\rfrQrnrrrZ pip._vendorrZpip._vendor.progressrr Zpip._vendor.progress.barr r r Zpip._vendor.progress.spinnerr Zpip._internal.utils.compatrZpip._internal.utils.loggingrZpip._internal.utils.miscrZpip._internal.utils.typingrÚtypingrrrrrŠZ getLoggerr/rdr Z_BaseBarÚobjectr!r4r7r;rJrPrSrUrVrWrXrYrbrcÚcontextmanagerrirjrqrvr„r‹rrrrÚs~         7ÿ ÿ ÿ ÿ ÿÿû   2