U ʗRe@sTdZddlZddlZddlZddlZddlmZmZm Z ddl m Z m Z ddl mZddlmZddlmZddlmZdd lmZdd lmZdd lmZmZmZdd lmZmZm Z e!e"Z#e ee$d ddZ%e ee&ee'dddZ(e&e&dddZ)e&e&e&dddZ*e ee&dddZ+eee dddZ,Gdd 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_urlsplitext)respreturnc Cs2zt|jdWStttfk r,YdSXdS)Nzcontent-length)intheaders ValueErrorKeyError TypeError)rr/builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/network/download.py_get_http_response_sizesr)rlink progress_barrc Cst|}|jtjkr|j}n|j}t|}|r>d|t|}t |rTt d|n t d|t t jkrtd}n*t |rd}n|sd}n|dkrd}nd}t|t}|s|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    r1)filenamercCs tj|S)zJ Sanitize the "filename" value from a Content-Disposition header. )ospathbasename)r2rrrsanitize_content_filenameHsr6)content_dispositiondefault_filenamercCs4tj}||d<|d}|r,tt|}|p2|S)z Parse the "filename" value from a Content-Disposition header, and return the default filename if the result is empty. content-typer2)emailmessageMessage get_paramr6str)r7r8mr2rrrparse_content_dispositionOs    r@)rrrcCs|j}|jd}|r t||}t|d}|sPt|jdd}|rP||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-dispositionr9) r2rgetr@r mimetypesguess_extensionr,r3r4)rrr2r7extrrr_get_http_response_filename^s   rG)sessionrrcCs.|jddd}|j|tdd}t||S)N#rArT)rstream)r,splitrCr r)rHr target_urlrrrr_http_get_downloadssrMc@s8eZdZeeddddZeeeeefdddZdS) DownloaderNrHrrcCs||_||_dSN_session _progress_barselfrHrrrr__init__{szDownloader.__init__)rlocationrc Cszt|j|}WnDtk rT}z&|jdk s0ttd|jj|W5d}~XYnXt||}t j ||}t |||j }t|d}|D]} || qW5QRX|jdd} || fS)z.Download the file given by link into location.NHTTP error %s while getting %swb Content-TyperBrMrRrresponseAssertionErrorr&critical status_coderGr3r4joinr1rSopenwriterrC) rUrrWrer2filepathr/ content_filechunk content_typerrr__call__s$  zDownloader.__call__) __name__ __module__ __qualname__r r>rVr rrhrrrrrNzs  rNc@sHeZdZeeddddZeeeeeeeeeffdddZ dS)BatchDownloaderNrOcCs||_||_dSrPrQrTrrrrVszBatchDownloader.__init__)linksrWrc cs|D]}zt|j|}WnDtk r\}z&|jdk s8ttd|jj|W5d}~XYnXt||}t j ||}t |||j }t|d} |D]} | | qW5QRX|jdd} ||| ffVqdS)z0Download the files given by links into location.NrXrYrZrBr[) rUrmrWrrrcr2rdr/rerfrgrrrrhs&  zBatchDownloader.__call__) rirjrkr r>rVrr rrhrrrrrls rl)/__doc__ email.messager:r)rDr3typingrrrZpip._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 getLoggerrir&rrr>bytesr1r6r@rGrMrNrlrrrrs6        *