U
    g=                  	   @  s"  d dl mZ d dlZd dlZd dl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mZ ddlmZ edkrededkreded	d
 ejdD Zedk redejdk redd dl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"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m1Z6 ddgZ7edk	re78d G dd dZ9d dl:Ze;ej<j=dre9ej<j=j>ej<j=_>n6e;ej<j=dre9ej<j=j?ej<j=_?ne	@de   edk r,eAeB d ej<_Cej<jD_CW 5 Q R X e&ejE_&G dd  d e*ZFG d!d" d"ejEjGZHG d#d$ d$ejIjJZKG d%d& d&ejLZMG d'd( d(ejNZOe,G d)d* d*e)e ZPe+ePd+d, ZQG d-d. d.ejRjSZTG d/d0 d0eTejRjUZVG d1d2 d2ejWZXG d3d4 d4ejYZZG d5d6 d6ej[Z\e\ejE_]dS )7    )annotationsN   )brotlirequestsurllib3)bug_reports_messageint_or_nonevariadic)normalize_urlz requests module is not installedzurllib3 module is not installedc                 c  s   | ]}t |d dV  qdS )r   )defaultN)r   ).0x r   ?/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/networking/_requests.py	<genexpr>   s     r   .)         z$Only urllib3 >= 1.26.17 is supportedi2 z$Only requests >= 2.32.2 is supportedr   )InstanceStoreMixinadd_accept_encoding_headercreate_connectioncreate_socks_proxy_socketget_redirect_methodmake_socks_proxy_optsselect_proxy)FeaturesRequestHandlerResponseregister_preferenceregister_rh)CertificateVerifyError	HTTPErrorIncompleteRead
ProxyErrorRequestErrorSSLErrorTransportError)r$   gzipdeflatebrc                   @  s*   e Zd ZddddZdd Zdd Zd	S )
Urllib3PercentREOverridez
re.Pattern)rc                 C  s
   || _ d S N)re)selfr,   r   r   r   __init__X   s    z!Urllib3PercentREOverride.__init__c                 C  s   | j |S r-   )r.   __getattribute__)r/   itemr   r   r   __getattr__\   s    z$Urllib3PercentREOverride.__getattr__c                 O  s   || j j||f||d fS )Nr   )r.   subn)r/   replstringargskwargsr   r   r   r4   _   s    zUrllib3PercentREOverride.subnN)__name__
__module____qualname__r0   r3   r4   r   r   r   r   r+   W   s   r+   
PERCENT_RE_PERCENT_REzAFailed to patch PERCENT_RE in urllib3 (does the attribute exist?))r   r   r   Tc                      s2   e Zd Zdd fddZd
dddd	Z  ZS )RequestsResponseAdapterzrequests.models.Response)resc                   s*   t  j|j|j|j|j|jd || _d S )N)fpheadersurlstatusreason)superr0   rawrA   rB   status_coderD   Z_requests_response)r/   r?   	__class__r   r   r0      s       z RequestsResponseAdapter.__init__Nz
int | None)amtc              
   C  s  z| j j|ddW S  tjjk
rD } zt|d|W 5 d }~X Y n tjjk
r } zjtdd |j|jft	|j
D d }|d k	rt|jtr|jnt|j}t||jd|t|d|W 5 d }~X Y n4 tjjk
r  } zt|d|W 5 d }~X Y nX d S )NT)decode_contentcausec                 s  s    | ]}t |tjjr|V  qd S r-   )
isinstancehttpclientr#   )r   errr   r   r   r      s    z/RequestsResponseAdapter.read.<locals>.<genexpr>)partialexpected)r@   readr   
exceptionsr&   ProtocolErrornext__context__	__cause__r	   r7   rN   rR   intlenr#   rS   r'   r"   )r/   rJ   eZir_errrR   r   r   r   rT      s    zRequestsResponseAdapter.read)N)r9   r:   r;   r0   rT   __classcell__r   r   rH   r   r>      s   r>   c                      sH   e Zd Zd fdd	Z fddZ fddZdd	 Zdd
dZ  ZS )RequestsHTTPAdapterNc                   sB   i | _ |r|| j d< |r&|df| j d< |p,|| _t jf | d S )Nssl_contextr   source_address)_pm_args_proxy_ssl_contextrE   r0   )r/   r_   proxy_ssl_contextr`   r8   rH   r   r   r0      s    

zRequestsHTTPAdapter.__init__c                   s   t  j||| jS r-   )rE   init_poolmanagerra   )r/   r7   r8   rH   r   r   rd      s    z$RequestsHTTPAdapter.init_poolmanagerc                   s:   i }|  ds"| jr"| j|d< t j|f|| j|S )Nsocksrc   )lower
startswithrb   rE   proxy_manager_forra   )r/   proxyproxy_kwargsextra_kwargsrH   r   r   rh      s    
z%RequestsHTTPAdapter.proxy_manager_forc                  O  s   d S r-   r   )r7   r8   r   r   r   cert_verify   s    zRequestsHTTPAdapter.cert_verifyc                 C  s8   t j|jj}| j}t|| }r.| |}||S r-   )r   util	parse_urlrB   poolmanagerr   rh   connection_from_url)r/   requestverifyproxiescertrB   managerri   r   r   r   get_connection_with_tls_context   s
    
z3RequestsHTTPAdapter.get_connection_with_tls_context)NNN)NN)	r9   r:   r;   r0   rd   rh   rl   rv   r]   r   r   rH   r   r^      s
   	r^   c                      s(   e Zd ZdZdd Z fddZ  ZS )RequestsSessionzS
    Ensure unified redirect method handling with our urllib redirect handler.
    c                 C  s<   t |j|j}||jkr&|j|_d|_||_t|j|_d S )Ni4  )r   methodrG   _real_status_coder
   rB   )r/   prepared_requestresponseZ
new_methodr   r   r   rebuild_method   s    
zRequestsSession.rebuild_methodc                   s$   t |dr|j|_|`t ||S )Nry   )hasattrry   rG   rE   rebuild_auth)r/   rz   r{   rH   r   r   r~      s    
zRequestsSession.rebuild_auth)r9   r:   r;   __doc__r|   r~   r]   r   r   rH   r   rw      s   rw   c                   @  s   e Zd Zdd ZdS )Urllib3LoggingFilterc                 C  s
   |j dkS )Nz%s://%s:%s "%s %s %s" %s %s)msg)r/   recordr   r   r   filter   s    zUrllib3LoggingFilter.filterN)r9   r:   r;   r   r   r   r   r   r      s   r   c                      s(   e Zd ZdZ fddZdd Z  ZS )Urllib3LoggingHandlerz#Redirect urllib3 logs to our loggerc                   s   t  j|| || _d S r-   )rE   r0   _logger)r/   loggerr7   r8   rH   r   r   r0      s    zUrllib3LoggingHandler.__init__c                 C  sX   z4|  |}|jtjkr&| j| n| j| W n tk
rR   | | Y nX d S r-   )	formatlevelnologgingERRORr   errorstdout	ExceptionhandleError)r/   r   r   r   r   r   emit   s    
zUrllib3LoggingHandler.emit)r9   r:   r;   r   r0   r   r]   r   r   rH   r   r      s   r   c                      sf   e Zd ZdZdZeeZdZe	j
e	jfZdZ fddZdd Z fd	d
ZdddZdd Z  ZS )
RequestsRHz@Requests RequestHandler
    https://github.com/psf/requests
    rO   https)rO   r   Zsocks4Zsocks4aZsocks5Zsocks5hr   c                   s   t  j|| td}t| jd| _| jtd | j	t
  || j |tj | jrzdtjj_|tj ttjj d S )Nr   )r   zrequests: %(message)sr   )rE   r0   r   	getLoggerr   r   _RequestsRH__logging_handlersetFormatter	Formatter	addFilterr   
addHandlersetLevelr   verboser   
connectionHTTPConnection
debuglevelDEBUGdisable_warningsrU   InsecureRequestWarning)r/   r7   r8   r   rH   r   r   r0     s    

zRequestsRH.__init__c                 C  s   |    td| j d S )Nr   )Z_clear_instancesr   r   removeHandlerr   )r/   r   r   r   close   s    zRequestsRH.closec                   s4   t  | |dd  |dd  |dd  d S )N	cookiejartimeout
legacy_ssl)rE   _check_extensionspop)r/   
extensionsrH   r   r   r   &  s    zRequestsRH._check_extensionsNc                 C  sl   t  }t| j|d| jtjjdd}|j	  t
jddi|_|d| |d| ||_d|_|S )N)legacy_ssl_supportF)r_   r`   max_retries
Connectionz
keep-alivezhttps://zhttp://)rw   r^   Z_make_sslcontextr`   r   rm   retryRetryadaptersclearr   modelsCaseInsensitiveDictrA   mountcookies	trust_env)r/   r   r   sessionZhttp_adapterr   r   r   _create_instance,  s    

zRequestsRH._create_instancec              
   C  s  |  |j}t|t d}| j| ||jdd}z2|j|j	|j
|j|| || |ddd}W nJ tjjk
r } zd}|j}W 5 d }~X Y n tjjk
r } z(dt|krt|d|t|d|W 5 d }~X Y n tjjk
r } zt|d|W 5 d }~X Y n tjjtjjfk
rN } zt|d|W 5 d }~X Y nf tjjk
r } zt|d|W 5 d }~X Y n4 tjjk
r } zt|d|W 5 d }~X Y nX t|}d|j  krd	k sn t||d
|S )NFr   )r   r   T)rx   rB   datarA   r   rs   allow_redirectsstreamZCERTIFICATE_VERIFY_FAILEDrL      i,  )Zredirect_loop)Z_merge_headersrA   r   SUPPORTED_ENCODINGSZ_get_instanceZ_get_cookiejarr   getrq   rx   rB   r   Z_calculate_timeoutZ_get_proxiesr   rU   TooManyRedirectsr{   r&   strr!   r$   ConnectionErrorTimeoutr'   r   r"   RequestExceptionr%   r>   rC   )r/   rq   rA   Zmax_redirects_exceededr   Zrequests_resr\   r?   r   r   r   _send;  sJ    

zRequestsRH._send)N)r9   r:   r;   r   Z_SUPPORTED_URL_SCHEMEStupler   Z_SUPPORTED_ENCODINGSZ_SUPPORTED_PROXY_SCHEMESr   ZNO_PROXYZ	ALL_PROXYZ_SUPPORTED_FEATURESZRH_NAMEr0   r   r   r   r   r]   r   r   rH   r   r      s   
r   c                 C  s   dS )Nd   r   )Zrhrq   r   r   r   requests_preferencer  s    r   c                      s$   e Zd Z fddZdd Z  ZS )SocksHTTPConnectionc                   s   || _ t j|| d S r-   )_proxy_argsrE   r0   )r/   _socks_optionsr7   r8   rH   r   r   r0   y  s    zSocksHTTPConnection.__init__c                 C  s   z:t | jd | jd f| j| jtt| j| jf| jdW S  t	jt
fk
r } z&tj| d| j d| j d|W 5 d }~X Y nl tk
r } ztjt|||W 5 d }~X Y n8 tk
r } ztj| d| |W 5 d }~X Y nX d S )Naddrport)addressr   r`   Z_create_socket_funczConnection to z timed out. (connect timeout=)z&Failed to establish a new connection: )r   r   r   r`   	functoolsrR   r   hostr   socketTimeoutErrorr   rU   ConnectTimeoutErrorSocksProxyErrorr$   r   OSErrorNewConnectionError)r/   r\   r   r   r   	_new_conn}  s6     
  $ zSocksHTTPConnection._new_conn)r9   r:   r;   r0   r   r]   r   r   rH   r   r   x  s   r   c                   @  s   e Zd ZdS )SocksHTTPSConnectionN)r9   r:   r;   r   r   r   r   r     s   r   c                   @  s   e Zd ZeZdS )SocksHTTPConnectionPoolN)r9   r:   r;   r   ConnectionClsr   r   r   r   r     s   r   c                   @  s   e Zd ZeZdS )SocksHTTPSConnectionPoolN)r9   r:   r;   r   r   r   r   r   r   r     s   r   c                      s   e Zd Zd fdd	Z  ZS )SocksProxyManagerN
   c                   s.   t ||d< t j||f| ttd| _d S )Nr   r   )r   rE   r0   r   r   pool_classes_by_scheme)r/   Zsocks_proxyusernamepassword	num_poolsrA   connection_pool_kwrH   r   r   r0     s
    zSocksProxyManager.__init__)NNr   N)r9   r:   r;   r0   r]   r   r   rH   r   r     s   r   )^
__future__r   
contextlibr   http.clientrO   r   r.   r   warningsZdependenciesr   r   r   utilsr   r   r	   Zutils.networkingr
   ImportErrorr   __version__spliturllib3_version	__build__Zrequests.adaptersZrequests.utilsZurllib3.connectionZurllib3.exceptionsZurllib3.utilZ_helperr   r   r   r   r   r   r   commonr   r   r   r   r    rU   r!   r"   r#   r$   r%   r&   r'   re   r   r   appendr+   Zurllib3.util.urlr}   rm   rB   r<   r=   warnsuppressr   IS_SECURETRANSPORTssl_r   r>   HTTPAdapterr^   sessionsSessionrw   Filterr   Handlerr   r   r   r   r   r   HTTPSConnectionr   HTTPConnectionPoolr   HTTPSConnectionPoolr   PoolManagerr   SOCKSProxyManagerr   r   r   r   <module>   sv   
$	$	 


#"r
