
    ig              	          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 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)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    Z/var/www/html/afkarena/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                 6   t          |           }|j        t          j        k    r|j        }n|j        }t          |          }|r| dt          |           d}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          |           }|s|S t          ||          } ||          S )	Nz ()zUsing cached %szDownloading %sFTi   )bar_typesize)r   netlocr	   file_storage_domainshow_urlurl_without_fragmentr   r   r   loggerinfogetEffectiveLevelloggingINFOr   r   )	r   r   r   total_lengthurl
logged_urlshow_progresschunksrenderers	            r   _prepare_downloadr2      s<   
 +400L{d...m'%c**J C"BBk,&?&?BBB
T 2%z2222$j111!!GL00	t		  		$	$T""F -|,WWWH8F    filenamec                 @    t           j                            |           S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ospathbasename)r4   s    r   sanitize_content_filenamer9   I   s     7H%%%r3   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-typer4   )emailmessageMessage	get_paramr9   str)r:   r;   mr4   s       r   parse_content_dispositionrD   P   s[    
 	A+An{{:&&H < -S]];;'''r3   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=    )
r4   r   getrD   r   	mimetypesguess_extensionr-   r6   r7   )r   r   r4   r:   exts        r   _get_http_response_filenamerL   _   s     }H,**+@AA L,-@(KK!(++A.C '(8(8(L(LMM 	OH 48tx''gtx((+ 	OHOr3   sessionc                     |j                             dd          d         }|                     |t          d          }t	          |           |S )N#rF   r   T)r   stream)r-   splitrH   r   r   )rM   r   
target_urlr   s       r   _http_get_downloadrS   t   sF    Q''*J;;z74;@@DTKr3   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 )	
DownloaderrM   r   r   Nc                 "    || _         || _        d S N_session_progress_barselfrM   r   s      r   __init__zDownloader.__init__|       
  )r3   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-TyperG   rS   rY   r   responser'   criticalstatus_coderL   r6   r7   joinr2   rZ   openwriter   rH   )r\   r   r_   r   er4   filepathr0   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   rB   r]   r
   r   rp    r3   r   rU   rU   {   su        ** * 
	* * * *&T &S &U38_ & & & & & &r3   rU   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 )	BatchDownloaderrM   r   r   Nc                 "    || _         || _        d S rW   rX   r[   s      r   r]   zBatchDownloader.__init__   r^   r3   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.Nra   rb   rc   rG   rd   )r\   rx   r_   r   r   rk   r4   rl   r0   rm   rn   ro   s               r   rp   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#	)
rq   rr   rs   r   rB   r]   r   r
   r   rp   rt   r3   r   rv   rv      s        ** * 
	* * * *1d^1/21	%eCHo-.	/1 1 1 1 1 1r3   rv   ).__doc__email.messager>   r*   rI   r6   typingr   r   r   pip._vendor.requests.modelsr   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   	getLoggerrq   r'   r   r   rB   bytesr2   r9   rD   rL   rS   rU   rv   rt   r3   r   <module>r      s             				 , , , , , , , , , , 0 0 0 0 0 0 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 !1r3   