
    e              	          d Z ddlZddlZddlZddlZddlmZmZm	Z	 ddl
mZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZmZm Z   ej!        e"          Z#dedee$         fdZ%dedede&dee'         fdZ(de&de&fdZ)de&de&de&fdZ*dedede&fdZ+dededefdZ, G d d          Z- G d d          Z.dS )z)Download files with progress indicators.
    N)IterableOptionalTuple)CONTENT_CHUNK_SIZEResponse)get_download_progress_renderer)NetworkConnectionError)PyPI)Link)is_from_cache)
PipSession)HEADERSraise_for_statusresponse_chunks)format_sizeredact_auth_from_urlsplitextrespreturnc                 t    	 t          | j        d                   S # t          t          t          f$ r Y d S w xY w)Nzcontent-length)intheaders
ValueErrorKeyError	TypeError)r   s    U/var/www/html/api/venv/lib/python3.11/site-packages/pip/_internal/network/download.py_get_http_response_sizer      sF    4< 01222),   tts    77linkprogress_barc                 ^   t          |           }|j        t          j        k    r|j        }n|j        }t          |          }|r#d                    |t          |                    }t          |           rt                              d|           nt                              d|           t                                          t          j        k    rd}n"t          |           rd}n|sd}n|dk    rd}nd}t          | t                     }|s|S t#          ||          } ||          S )Nz{} ({})zUsing cached %szDownloading %sFTi@  )bar_typesize)r   netlocr
   file_storage_domainshow_urlurl_without_fragmentr   formatr   r   loggerinfogetEffectiveLevelloggingINFOr   r   r   )	r   r   r   total_lengthurl
logged_urlshow_progresschunksrenderers	            r   _prepare_downloadr3      s>   
 +400L{d...m'%c**J M%%j+l2K2KLL
T 2%z2222$j111!!GL00	t		  		#	#T#566F -|,WWWH8F    filenamec                 @    t           j                            |           S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ospathbasename)r5   s    r   sanitize_content_filenamer:   H   s     7H%%%r4   content_dispositiondefault_filenamec                     t           j                                        }| |d<   |                    d          }|rt	          t          |                    }|p|S )z
    Parse the "filename" value from a Content-Disposition header, and
    return the default filename if the result is empty.
    content-typer5   )emailmessageMessage	get_paramr:   str)r;   r<   mr5   s       r   parse_content_dispositionrE   O   s[    
 	A+An{{:&&H < -S]];;'''r4   c                    |j         }| j                            d          }|rt          ||          }t	          |          d         }|s4t          j        | j                            dd                    }|r||z  }|sA|j        | j        k    r1t          j	                            | j                  d         }|r||z  }|S )zoGet an ideal filename from the given HTTP response, falling back to
    the link filename if not provided.
    zcontent-disposition   r>    )
r5   r   getrE   r   	mimetypesguess_extensionr.   r7   r8   )r   r   r5   r;   exts        r   _get_http_response_filenamerM   ^   s     }H,**+@AA L,-@(KK!(++A.C '(8(8(L(LMM 	OH 48tx''gtx((+ 	OHOr4   sessionc                     |j                             dd          d         }|                     |t          d          }t	          |           |S )N#rG   r   T)r   stream)r.   splitrI   r   r   )rN   r   
target_urlr   s       r   _http_get_downloadrT   s   sF    Q''*J;;z74;@@DTKr4   c                   F    e Zd ZdededdfdZdededeeef         fdZdS )	
DownloaderrN   r   r   Nc                 "    || _         || _        d S N_session_progress_barselfrN   r   s      r   __init__zDownloader.__init__{       
  )r4   r   locationc                    	 t          | j        |          }nB# t          $ r5}|j        J t                              d|j        j        |            d}~ww xY wt          ||          }t          j	        
                    ||          }t          ||| j                  }t          |d          5 }|D ]}	|                    |	           	 ddd           n# 1 swxY w Y   |j                            dd          }
||
fS )z.Download the file given by link into location.NHTTP error %s while getting %swbContent-TyperH   rT   rZ   r	   responser(   criticalstatus_coderM   r7   r8   joinr3   r[   openwriter   rI   )r]   r   r`   r   er5   filepathr1   content_filechunkcontent_types              r   __call__zDownloader.__call__   sY   	%dmT::DD% 	 	 	:)))OO0!*2H$   	 /tT::7<<(33"4t/ABB(D!! 	*\ * *""5))))*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* |'';;%%s&    
A0AA0CCC)	__name__
__module____qualname__r   rC   r^   r   r   rq    r4   r   rV   rV   z   su        ** * 
	* * * *&T &S &U38_ & & & & & &r4   rV   c                   n    e Zd ZdededdfdZdee         dedeeeeeef         f                  fdZ	dS )	BatchDownloaderrN   r   r   Nc                 "    || _         || _        d S rX   rY   r\   s      r   r^   zBatchDownloader.__init__   r_   r4   linksr`   c              #   "  K   |D ]}	 t          | j        |          }nB# t          $ r5}|j        J t                              d|j        j        |            d}~ww xY wt          ||          }t          j	        
                    ||          }t          ||| j                  }t          |d          5 }	|D ]}
|	                    |
           	 ddd           n# 1 swxY w Y   |j                            dd          }|||ffV  
dS )z0Download the files given by links into location.Nrb   rc   rd   rH   re   )r]   ry   r`   r   r   rl   r5   rm   r1   rn   ro   rp   s               r   rq   zBatchDownloader.__call__   s       	1 	1D	)$->>)   z---4J*  
  34>>Hw||Hh77H&tT43EFFFh%% .# . .E &&u----.. . . . . . . . . . . . . . .  <++NB??L<000000)	1 	1s&   
A0AA7CC#	&C#	)
rr   rs   rt   r   rC   r^   r   r   r   rq   ru   r4   r   rw   rw      s        ** * 
	* * * *1d^1/21	%eCHo-.	/1 1 1 1 1 1r4   rw   )/__doc__email.messager?   r+   rJ   r7   typingr   r   r   pip._vendor.requests.modelsr   r   pip._internal.cli.progress_barsr   pip._internal.exceptionsr	   pip._internal.models.indexr
   pip._internal.models.linkr   pip._internal.network.cacher   pip._internal.network.sessionr   pip._internal.network.utilsr   r   r   pip._internal.utils.miscr   r   r   	getLoggerrr   r(   r   r   rC   bytesr3   r:   rE   rM   rT   rV   rw   ru   r4   r   <module>r      s             				 , , , , , , , , , , D D D D D D D D J J J J J J ; ; ; ; ; ; + + + + + + * * * * * * 5 5 5 5 5 5 4 4 4 4 4 4 R R R R R R R R R R P P P P P P P P P P		8	$	$( x}    '
'
' ' e_	' ' ' 'T& & & & & &(3 (# (RU ( ( ( (h d s    *
 $ 8    & & & & & & & &>!1 !1 !1 !1 !1 !1 !1 !1 !1 !1r4   