hyb
2025-11-18 7539e6f48c75dcaeb808359cccfd1c0d0d182ce8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Ë
ñúhŠ1ãóÄ—dZddlmZddlZddlZddlZddlZddlm    Z    m
Z
ddl m Z ddl mZddlmZddlmZdd    lmZdd
lmZdd lmZdd lmZdd lmZmZddlm Z m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'm(Z(ddl)m*Z*m+Z+ddl,m-Z-m.Z.m/Z/ddl0m1Z1m2Z2m3Z3ejhe5«Z6dd„Z7d d„Z8    d!                                            d"d„Z9d#d„Z:d$d„Z;d%d„Z<e Gd„d««Z=Gd„d«Z>y)&z(Download files with progress indicators.é)Ú annotationsN)ÚIterableÚMapping)Ú    dataclass)Ú
HTTPStatus)ÚBinaryIO)ÚPreparedRequest)ÚResponse)Ú HTTPResponse)ÚHTTPHeaderDict)ÚReadTimeoutError)ÚBarTypeÚget_download_progress_renderer)ÚIncompleteDownloadErrorÚNetworkConnectionError)ÚPyPI)ÚLink)Ú SafeFileCacheÚ is_from_cache)ÚCacheControlAdapterÚ
PipSession)ÚHEADERSÚraise_for_statusÚresponse_chunks)Ú format_sizeÚredact_auth_from_urlÚsplitextcóh—    t|jd«S#tttf$rYywxYw)Núcontent-length)ÚintÚheadersÚ
ValueErrorÚKeyErrorÚ    TypeError©Úresps úQH:\Change_password\venv_build\Lib\site-packages\pip/_internal/network/download.pyÚ_get_http_response_sizer( s5€ðܐ4—<‘<Р0Ñ1Ó2Ð2øÜ œ¤)Ð ,òÙðús ‚š1°1cól—|jjd|jjd««S)z
    Return either the ETag or Last-Modified header (or None if neither exists).
    The return value can be used in an If-Range header.
    Úetagz last-modified)r!Úgetr%s r'Ú(_get_http_response_etag_or_last_modifiedr,'s*€ð
<‰<× Ñ ˜F D§L¡L×$4Ñ$4°_Ó$EÓ FÐFócó`—|jtjk(r |j}n |j}t |«}|r1|r|›dt |«›dt |«›d}n|›dt |«›d}t|«rtjd|«n/|rtjd|«ntjd|«tj«tjkDrd}nt|«rd}n|sd}n
|d    kDrd}nd}t|«}|s|St|||¬
«}    |    |«S) Nz (ú/ú)zUsing cached %szResuming download %szDownloading %sFTi)Úbar_typeÚsizeÚinitial_progress)ÚnetlocrÚfile_storage_domainÚshow_urlÚurl_without_fragmentrrrÚloggerÚinfoÚgetEffectiveLevelÚloggingÚINFOrr)
r&ÚlinkÚ progress_barÚ total_lengthÚ range_startÚurlÚ
logged_urlÚ show_progressÚchunksÚrenderers
          r'Ú _log_downloadrF/s%€ð ‡{{”d×.Ñ.Ò.؏m‰m‰à×'Ñ'ˆä% cÓ*€JáÙ à,˜b¤¨[Ó!9Р:¸!¼KÈ Ó<UÐ;VÐVWÐXñ ð'˜< r¬+°lÓ*CÐ)DÀAÐFˆJäTÔ܏ ‰ Ð% zÕ2Ù    Ü ‰ Ð*¨JÕ7ä ‰ Ð$ jÔ1ä ×ÑÓ!¤G§L¡LÒ0؉ Ü    tÔ    Ø‰ ٠؉ Ø    ˜Ò    $؉ àˆ ä ˜TÓ "€Fá Øˆ ä-Ø LÀ;ô€Hñ FÓ Ðr-có@—tjj|«S)zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ÚosÚpathÚbasename)Úfilenames r'Úsanitize_content_filenamerLbs€ô 7‰7× Ñ ˜HÓ %Ð%r-có¢—tjj«}||d<|jd«}|rt    t |««}|xs|S)zƒ
    Parse the "filename" value from a Content-Disposition header, and
    return the default filename if the result is empty.
    ú content-typerK)ÚemailÚmessageÚMessageÚ    get_paramrLÚstr)Úcontent_dispositionÚdefault_filenameÚmrKs    r'Úparse_content_dispositionrWisM€ô
     ‰ ×ÑÓ€AØ+€A€nÑØ{‰{˜:Ó&€HÙô-¬S°«]Ó;ˆØ Ò 'Ð'Ð'r-có˜—|j}|jjd«}|r t||«}t    |«d}|s6t j |jjdd««}|r||z }|sL|j|jk7r3tjj    |j«d}|r||z }|S)zoGet an ideal filename from the given HTTP response, falling back to
    the link filename if not provided.
    zcontent-dispositionérNÚ)
rKr!r+rWrÚ    mimetypesÚguess_extensionrArHrI)r&r=rKrTÚexts     r'Ú_get_http_response_filenamer^xs²€ð}‰}€HàŸ,™,×*Ñ*Ð+@ÓAÐÙÜ,Ð-@À(ÓKˆÜ˜xÓ(¨Ñ+€CÙ Ü×'Ñ'¨¯ © ×(8Ñ(8¸ÈÓ(LÓMˆÙ Ø ˜‰OˆHÙ 4—8‘8˜tŸx™xÒ'܏g‰g×јtŸx™xÓ(¨Ñ+ˆÙ Ø ˜‰OˆHØ €Or-cód—eZdZUdZded<ded<ded<dZd    ed
<dZd    ed <dd „Zdd „Zdd„Z    y)Ú _FileDownloadz+Stores the state of a single link download.rr=rÚ output_fileú
int | Noner2rr Úbytes_receivedÚ
reattemptscóf—t|jduxr|j|jk«S©N)Úboolr2rc©Úselfs r'Ú is_incompletez_FileDownload.is_incomplete—s*€ÜD—I‘I TÐ)ÒM¨d×.AÑ.AÀDÇIÁIÑ.MÓNÐNr-cóv—|xjt|«z c_|jj|«yrf)rcÚlenraÚwrite)riÚdatas  r'Ú write_chunkz_FileDownload.write_chunkšs+€Ø ×Òœs 4›yÑ(ÕØ ×Ñ×јtÕ$r-có|—|jjd«|jj«d|_y)z1Delete any saved data and reset progress to zero.rN)raÚseekÚtruncatercrhs r'Ú
reset_filez_FileDownload.reset_filežs0€à ×Ñ×јaÔ Ø ×Ñ×!Ñ!Ô#؈Õr-N)Úreturnrg)rnÚbytesrtÚNone)rtrv)
Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú__annotations__rcrdrjrors©r-r'r`r`s:…á5à
ƒJØÓØ
ÓØ€NCÓØ€JÓóOó%ô r-r`có—eZdZ                                d
d„Z                        d d„Zd d„Zd d„Z                        dd„Z                        dd„Z                        dd„Z    e
fdd„Z y    )Ú
DownloadercóF—|dk\sJd«‚||_||_||_y)Nrz<Number of max resume retries must be bigger or equal to zero)Ú_sessionÚ _progress_barÚ_resume_retries)riÚsessionr>Úresume_retriess    r'Ú__init__zDownloader.__init__¦s5€ð ˜aÒ ð    Jà Ió    JØ àˆŒ Ø)ˆÔØ-ˆÕr-c#óBK—|D]}|||«\}}|||ff–—Œy­w)z.Convenience method to download multiple links.Nr|)riÚlinksÚlocationr=ÚfilepathÚ content_types      r'ÚbatchzDownloader.batch³s8èø€ðò    1ˆDÙ%)¨$°Ó%9Ñ "ˆHlؘ <Ð0Ð0Ó 0ñ    1ùs‚có’—|j|«}t|«}tjj    |t ||««}t |d«5}t|||«}|j||«|j«r|j||«ddd«|jjdd«}||fS#1swYŒ)xYw)z+Download a link and save it under location.ÚwbNz Content-TyperZ) Ú    _http_getr(rHrIÚjoinr^Úopenr`Ú_process_responserjÚ_attempt_resumes_or_redownloadsr!r+)    rir=rˆr&Ú download_sizer‰Ú content_fileÚdownloadrŠs             r'Ú__call__zDownloader.__call__»s¸€à~‰~˜dÓ#ˆÜ/°Ó5ˆ ä—7‘7—<‘< Ô*EÀdÈDÓ*QÓRˆÜ (˜DÓ !ð    E \Ü$ T¨<¸ÓGˆHØ × "Ñ " 8¨TÔ 2Ø×%Ñ%Ô'Ø×4Ñ4°X¸tÔD÷        Eð —|‘|×'Ñ'¨¸Ó;ˆ ؘÐ%Ð%÷    Eð    Eús ÁAB=Â=Ccó—t||j|j|j|j¬«}    |D]}|j |«Œy#t $r-}|j€|‚tjd«Yd}~yd}~wwxYw)z)Download and save chunks from a response.)r@Nz'Connection timed out while downloading.)    rFr=rr2rcror r8Úwarning)rir•r&rDÚchunkÚes      r'r‘zDownloader._process_responseÊsƒ€äØ Ø M‰MØ × Ñ Ø M‰MØ ×/Ñ/ô 
ˆð    FØò ,Ø×$Ñ$ UÕ+ñ ,øäò    Fà}‰}Ð$Øä N‰NÐD× EÑ Eûð     FúsºAÁ    B    Á#BÂB    cóR—|j|jkr |j«rü|j€J‚|xjdz c_tj dt |j«t |j«|j«    |j||¬«}|jtjk7}|r"|j«t|«|_|}|j||«|j|jkr|j«rŒü|j«r4t%j&|j(j*«t-|«‚|jdkDr|j/||«yy#tt t"f$rYŒ¤wxYw)zAAttempt to resume/restart the download if connection was dropped.NrYz<Attempting to resume incomplete download (%s/%s, attempt %d))Ú should_matchr)rdr‚rjr2r8r˜rrcÚ_http_get_resumeÚ status_coderÚPARTIAL_CONTENTrsr(r‘ÚConnectionErrorr ÚOSErrorrHÚremoveraÚnamerÚ_cache_resumed_download)rir•Ú
first_respÚ resume_respÚ must_restarts     r'r’z*Downloader._attempt_resumes_or_redownloadsÝsk€ð
×!Ñ! D×$8Ñ$8Ó8¸X×=SÑ=SÔ=UØ—=‘=Ð,Ð ,Ð,Ø × Ò  1Ñ $Õ Ü N‰NØNܘH×3Ñ3Ó4ܘHŸM™MÓ*Ø×#Ñ#ô     ð Ø"×3Ñ3°HÈ:Ð3ÓV ð +×6Ñ6¼*×:TÑ:TÑT ÙØ×'Ñ'Ô)Ü$;¸KÓ$HH”MØ!,Jà×&Ñ& x°Ô=ð+×!Ñ! D×$8Ñ$8Ò8¸X×=SÑ=SÕ=Uð4 × !Ñ !Ô #Ü I‰Ih×*Ñ*×/Ñ/Ô 0Ü)¨(Ó3Ð 3ð × Ñ  Ò "Ø × (Ñ (¨°:Õ >ð #øô$Ô%5´wÐ?ò Úð úsÂA&FÆF&Æ%F&cóÆ—|jj}|jj|«}t    |t
«st jd|«yt    |jt«sJd«‚t«}|jd|i¬«t«}|jj«D]\}}|j«dvsŒ|||<Œt!|j"«|d<t%d|d    d
¬ «}    |j&j)|«}
|j&j*j-||    d «} |jj/|
| «|j0j3«t5|j0j6d «5} |jj9|
| «ddd«t jd|«y#1swYŒ xYw)an
        Manually cache a file that was successfully downloaded via resume retries.
 
        cachecontrol doesn't cache 206 (Partial Content) responses, since they
        are not complete files. This method manually adds the final file to the
        cache as though it was downloaded in a single request, so that future
        requests can use the cache.
        z<Skipping resume download caching: no cache controller for %sNzseparate body cache not in use!ÚGET)ÚmethodrAr!)z content-rangerrrZéÈF)Úbodyr!ÚstatusÚpreload_contentr-Úrbz?Cached resumed download as complete response for future use: %s)r=r7r€Ú get_adapterÚ
isinstancerr8ÚdebugÚcacherr    Úpreparer r!ÚitemsÚlowerrSr2ÚURLlib3ResponseÚ
controllerÚ    cache_urlÚ
serializerÚdumpsÚsetraÚflushrr£Úset_body_from_io) rir•Úoriginal_responserAÚadapterÚsynthetic_requestÚsynthetic_response_headersÚkeyÚvalueÚsynthetic_responser¹Ú metadata_blobÚfs              r'r¤z"Downloader._cache_resumed_downloads»€ðm‰m×0Ñ0ˆØ—-‘-×+Ñ+¨CÓ0ˆô˜'Ô#6Ô7Ü L‰LØNÐPSô ð ôØ M‰Mœ=ô
ð    -à ,ó    -ð
ô,Ó-ÐØ×!Ñ!¨°CÀÐ!ÔDä%3Ó%5Ð"Ø+×3Ñ3×9Ñ9Ó;ò    8‰JˆCØy‰y‹{Ð"EÒEØ27Ð*¨3Ò/ð    8ô8;¸8¿=¹=Ó7IÐ"Ð#3Ñ4ä,ØØ.ØØ!ô    
Ðð×&Ñ&×0Ñ0°Ó5ˆ    Ø×*Ñ*×5Ñ5×;Ñ;Ø Ð1°3ó
ˆ ð     ‰ ×ј) ]Ô3Ø×Ñ×"Ñ"Ô$Ü (×&Ñ&×+Ñ+¨TÓ 2ð    9°aØ M‰M× *Ñ *¨9°aÔ 8÷    9ô     ‰ Ø MÈsõ    
÷    9ð    9ús ÆGÇG có¬—tj«}d|j›d|d<t|«x}r||d<|j    |j
|«S)z2Issue a HTTP range request to resume the download.zbytes=ú-ÚRangezIf-Range)rÚcopyrcr,rŽr=)rir•rœr!Ú
identifiers     r'rzDownloader._http_get_resume=s[€ô —,‘,“.ˆØ# H×$;Ñ$;Ð#<¸AÐ>ˆÑôBÀ,ÓOÐ Oˆ:Ð OØ",ˆGJÑ Ø~‰~˜hŸm™m¨WÓ5Ð5r-có—|j}    |jj||d¬«}t|«|S#t$r?}|j
€J‚t jd|j
j|«‚d}~wwxYw)NT)r!ÚstreamzHTTP error %s while getting %s)    r7r€r+rrÚresponser8Úcriticalrž)rir=r!Ú
target_urlr&ršs      r'rŽzDownloader._http_getKs€€Ø×.Ñ.ˆ
ð    Ø—=‘=×$Ñ$ Z¸ÈÐ$ÓNˆDÜ ˜TÔ "ðˆ øô &ò    Ø—:‘:Ð)Ð )Ð)Ü O‰OØ0°!·*±*×2HÑ2HÈ$ô ð ûð     úsŽ)9¹    BÁ:A<Á<BN)rƒrr>rr„r rtrv)r‡zIterable[Link]rˆrSrtz&Iterable[tuple[Link, tuple[str, str]]])r=rrˆrSrtztuple[str, str])r•r`r&r
rtrv)r•r`r¥r
rtrv)r•r`r¿r
rtrv)r•r`rœr
rtr
)r=rr!zMapping[str, str]rtr
) rwrxryr…r‹r–r‘r’r¤rrrŽr|r-r'r~r~¥sº„ð .àð .ðð .ðð     .ð
 
ó .ð1Ø#ð1Ø/2ð1à    /ó1ó &óFð&&?Ø%ð&?Ø3;ð&?à     ó&?ðP6
Ø%ð6
Ø:Bð6
à     ó6
ðp 6Ø%ð 6Ø5=ð 6à    ó 6ðBIõ r-r~)r&r
rtrb)r&r
rtz
str | None)r) r&r
r=rr>rr?rbr@rbrtzIterable[bytes])rKrSrtrS)rTrSrUrSrtrS)r&r
r=rrtrS)?rzÚ
__future__rÚ email.messagerOr;r[rHÚcollections.abcrrÚ dataclassesrÚhttprÚtypingrÚpip._vendor.requestsr    Úpip._vendor.requests.modelsr
Úpip._vendor.urllib3r r·Ú pip._vendor.urllib3._collectionsr Úpip._vendor.urllib3.exceptionsr Úpip._internal.cli.progress_barsrrÚpip._internal.exceptionsrrÚpip._internal.models.indexrÚpip._internal.models.linkrÚpip._internal.network.cacherrÚpip._internal.network.sessionrrÚpip._internal.network.utilsrrrÚpip._internal.utils.miscrrrÚ    getLoggerrwr8r(r,rFrLrWr^r`r~r|r-r'ú<module>ræsäðÙ.å"ãÛÛÛ    ß-Ý!ÝÝå0Ý0Ý?Ý;Ý;çSßTÝ+Ý*ßDßIßRÑRßPÑPà    ˆ×    Ñ    ˜8Ó    $€óóGð ð 0Ø
ð0à
ð0ðð0ðð    0ð
ð 0ð ó 0óf&ó (óð* ÷ ð ó ð ÷.qòqr-