o 7]h @sjdZddlZddlZddlZddlZddlmZmZmZddl m Z m Z ddl m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZmZmZdd lmZmZmZe e!Z"d e dee#fddZ$d e dede%dee&fddZ'de%de%fddZ(de%de%de%fddZ)d e dede%fddZ*dedede fdd Z+Gd!d"d"Z,Gd#d$d$Z-dS)%z)Download files with progress indicators. N)IterableOptionalTuple)CONTENT_CHUNK_SIZEResponse)get_download_progress_renderer)NetworkConnectionError)PyPI)Link) is_from_cache) PipSession)HEADERSraise_for_statusresponse_chunks) format_sizeredact_auth_from_urlsplitextrespreturnc Cs,zt|jdWStttfyYdSw)Nzcontent-length)intheaders ValueErrorKeyError TypeError)rr@/usr/lib/python3/dist-packages/pip/_internal/network/download.py_get_http_response_sizes rlink progress_barc Cst|}|jtjkr|j}n|j}t|}|rd|t|}t |r*t d|nt d|t t jkr:d}nt |rAd}n|sFd}n |dkrMd}nd}t|t}|sX|St||d}||S)Nz{} ({})zUsing cached %szDownloading %sFTi@)bar_typesize)rnetlocr file_storage_domainshow_urlurl_without_fragmentrformatrr loggerinfogetEffectiveLevelloggingINFOrrr) rrr total_lengthurl logged_url show_progresschunksrendererrrr_prepare_downloads0    r1filenamecCs tj|S)zJ Sanitize the "filename" value from a Content-Disposition header. )ospathbasename)r2rrrsanitize_content_filenameHs r6content_dispositiondefault_filenamecCs,t|\}}|d}|rt|}|p|S)z Parse the "filename" value from a Content-Disposition header, and return the default filename if the result is empty. r2)cgi parse_headergetr6)r7r8_typeparamsr2rrrparse_content_dispositionOs  r>cCs|j}|jd}|rt||}t|d}|s(t|jdd}|r(||7}|s?|j|jkr?tj |jd}|r?||7}|S)zoGet an ideal filename from the given HTTP response, falling back to the link filename if not provided. zcontent-dispositionz content-type) r2rr;r>r mimetypesguess_extensionr,r3r4)rrr2r7extrrr_get_http_response_filename]s   rDsessioncCs.|jddd}|j|tdd}t||S)N#r?rT)rstream)r,splitr;r r)rEr target_urlrrrr_http_get_downloadrsrJc@s@eZdZdededdfddZdededeeeffd d ZdS) DownloaderrErrNcC||_||_dSN_session _progress_barselfrErrrr__init__z zDownloader.__init__rlocationc Cszt|j|}Wnty%}z|jdusJtd|jj|d}~wwt||}tj ||}t |||j }t |d}|D]} || qAWdn1sSwY|jdd} || fS)z.Download the file given by link into location.NHTTP error %s while getting %swb Content-Typer@rJrOrresponser&critical status_coderDr3r4joinr1rPopenwriterr;) rRrrUrer2filepathr/ content_filechunk content_typerrr__call__s(    zDownloader.__call__) __name__ __module__ __qualname__r strrSr rrerrrrrKys "rKc @sPeZdZdededdfddZdeededeeeeeefffd d Z dS) BatchDownloaderrErrNcCrLrMrNrQrrrrSrTzBatchDownloader.__init__linksrUc cs|D]h}zt|j|}Wnty*}z|jdusJtd|jj|d}~wwt||}tj ||}t |||j }t |d} |D]} | | qFWdn1sXwY|jdd} ||| ffVqdS)z0Download the files given by links into location.NrVrWrXr@rY) rRrkrUrrr`r2rar/rbrcrdrrrres2   zBatchDownloader.__call__) rfrgrhr rirSrr rrerrrrrjs rj).__doc__r9r)rAr3typingrrrpip._vendor.requests.modelsrrpip._internal.cli.progress_barsrpip._internal.exceptionsrpip._internal.models.indexr pip._internal.models.linkr pip._internal.network.cacher pip._internal.network.sessionr pip._internal.network.utilsr rrpip._internal.utils.miscrrr getLoggerrfr&rrribytesr1r6r>rDrJrKrjrrrrs@        *