o
    iN=                     @  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m	Z	m
Z
mZ ddlmZmZmZ ddlmZmZ e
du r>ededu rFeded	d
 ejdD Zedk rbej de_ede
jdk rre
j de
_e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% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m0Z5 ddgZ6e	dure67d 	 G dd dZ8d dl9Ze:ej;j<dre8ej;j<j=ej;j<_=ne>de   ee
j?_G dd de)Z@G dd  d e
j?jAZBG d!d" d"e
jCjDZEG d#d$ d$ejFZGG d%d& d&ejHZIe+G d'd( d(e(e ZJe*eJd)d* ZKG d+d, d,ejLjMZNG d-d. d.eNejLjOZPG d/d0 d0ejQZRG d1d2 d2ejSZTG d3d4 d4ejUZVeVe
j?_WdS )5    )annotationsN   )brotlirequestsurllib3)bug_reports_messageint_or_nonevariadic)normalize_urlselect_proxyz 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   O/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/networking/_requests.py	<genexpr>   s    r   .)r   r   r   z (unsupported)z"Only urllib3 >= 2.0.2 is supportedi2 z$Only requests >= 2.32.2 is supported   )InstanceStoreMixinadd_accept_encoding_headercreate_connectioncreate_socks_proxy_socketget_redirect_methodmake_socks_proxy_opts)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Zdd Zdd Zd	S )Urllib3PercentREOverrider
re.Patternc                 C  s
   || _ d S N)re)selfr*   r   r   r   __init__W   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||g|R i |d fS )Nr   )r-   subn)r.   replstringargskwargsr   r   r   r3   ^   s   $zUrllib3PercentREOverride.subnN)r*   r+   )__name__
__module____qualname__r/   r2   r3   r   r   r   r   r)   V   s    
r)   _PERCENT_REzBFailed to patch _PERCENT_RE in urllib3 (does the attribute exist?)c                      s6   e Zd Zd fddZddd
dZddddZ  ZS )RequestsResponseAdapterresrequests.models.Responsec                   s*   t  j|j|j|j|j|jd || _d S )N)fpheadersurlstatusreason)superr/   rawr@   rA   status_coderC   _requests_response)r.   r=   	__class__r   r   r/   s   s
   
z RequestsResponseAdapter.__init__Namt
int | Nonereturnbytesc                 C  s<   |d u rt j| jjddd}dt|dS | jj|ddS )Ni   T)decode_content    )	functoolspartialr?   readjoiniter)r.   rJ   
read_chunkr   r   r   
_real_readz   s   z"RequestsResponseAdapter._real_readc              
   C  s   z|  |}| jjr|   |W S  tjjy$ } zt|d|d }~w tjjye } z4tdd |j	|j
gt|jR D d }|d ur[t|jtrN|jnt|j}t||jd|t|d|d }~w tjjyx } zt|d|d }~ww )N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>)rQ   expected)rV   r?   closedcloser   
exceptionsr$   ProtocolErrornext__context__	__cause__r	   r6   rY   rQ   intlenr!   r]   r%   r    )r.   rJ   dataeir_errrQ   r   r   r   rR      s,   
 zRequestsResponseAdapter.read)r=   r>   r,   )rJ   rK   rL   rM   )rJ   rK   )r8   r9   r:   r/   rV   rR   __classcell__r   r   rH   r   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                   sF   i | _ |r
|| j d< |r|df| j d< |p|| _t jdi | d S )Nssl_contextr   source_addressr   )_pm_args_proxy_ssl_contextrD   r/   )r.   rl   proxy_ssl_contextrm   r7   rH   r   r   r/      s   

zRequestsHTTPAdapter.__init__c                   s   t  j|i || jS r,   )rD   init_poolmanagerrn   )r.   r6   r7   rH   r   r   rq      s   z$RequestsHTTPAdapter.init_poolmanagerc                   s@   i }|  ds| jr| j|d< t j|fi || j|S )Nsocksrp   )lower
startswithro   rD   proxy_manager_forrn   )r.   proxyproxy_kwargsextra_kwargsrH   r   r   ru      s   
z%RequestsHTTPAdapter.proxy_manager_forc                  O  s   d S r,   r   )r6   r7   r   r   r   cert_verify   s   zRequestsHTTPAdapter.cert_verifyc                 C  s8   t j|jj}| j}t|| }r| |}||S r,   )r   util	parse_urlrA   poolmanagerr   ru   connection_from_url)r.   requestverifyproxiescertrA   managerrv   r   r   r   get_connection_with_tls_context   s
   

z3RequestsHTTPAdapter.get_connection_with_tls_context)NNN)NN)	r8   r9   r:   r/   rq   ru   ry   r   rj   r   r   rH   r   rk      s    	rk   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   methodrF   _real_status_coder
   rA   )r.   prepared_requestresponse
new_methodr   r   r   rebuild_method   s   
zRequestsSession.rebuild_methodc                   s$   t |dr|j|_|`t ||S )Nr   )hasattrr   rF   rD   rebuild_auth)r.   r   r   rH   r   r   r      s   
zRequestsSession.rebuild_auth)r8   r9   r:   __doc__r   r   rj   r   r   rH   r   r      s    r   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)r8   r9   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|i | || _d S r,   )rD   r/   _logger)r.   loggerr6   r7   rH   r   r   r/      s   
zUrllib3LoggingHandler.__init__c                 C  sZ   z|  |}|jtjkr| j| W d S | j| W d S  ty,   | | Y d S w r,   )	formatlevelnologgingERRORr   errorstdout	ExceptionhandleError)r.   r   r   r   r   r   emit   s   
zUrllib3LoggingHandler.emit)r8   r9   r:   r   r/   r   rj   r   r   rH   r   r      s    r   c                      sn   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dd Z  ZS )
RequestsRHz@Requests RequestHandler
    https://github.com/psf/requests
    rZ   https)rZ   r   socks4socks4asocks5socks5hr   c                   s   t  j|i | td}t| jd| _| jtd | j	t
  || j |tj | jr?dtjj_|tj ttjj d S )Nr   )r   zrequests: %(message)sr   )rD   r/   r   	getLoggerr   r   _RequestsRH__logging_handlersetFormatter	Formatter	addFilterr   
addHandlersetLevelr   verboser   
connectionHTTPConnection
debuglevelDEBUGdisable_warningsr`   InsecureRequestWarning)r.   r6   r7   r   rH   r   r   r/     s   

zRequestsRH.__init__c                 C  s   |    td| j d S )Nr   )_clear_instancesr   r   removeHandlerr   )r.   r   r   r   r_     s   zRequestsRH.closec                   s@   t  | |dd  |dd  |dd  |dd  d S )N	cookiejartimeout
legacy_sslkeep_header_casing)rD   _check_extensionspop)r.   
extensionsrH   r   r   r     s
   zRequestsRH._check_extensionsNc                 C  sf   t  }t| j|d| jtjjdd}|j	  t
j |_|d| |d| ||_d|_|S )N)legacy_ssl_supportF)rl   rm   max_retrieszhttps://zhttp://)r   rk   _make_sslcontextrm   r   rz   retryRetryadaptersclearr   modelsCaseInsensitiveDictr@   mountcookies	trust_env)r.   r   r   sessionhttp_adapterr   r   r   _create_instance&  s   

zRequestsRH._create_instancec                 C  s   t |t |dd d S )N
Connectionz
keep-alive)r   SUPPORTED_ENCODINGS
setdefault)r.   _r@   r   r   r   _prepare_headers5  s   
zRequestsRH._prepare_headersc              
   C  s  |  |}d}| j| ||jdd}z|j|j|j|j|| 	|| 
|ddd}W n tjjyF } zd}|j}W Y d }~ntd }~w tjjye } zdt|v r[t|d|t|d|d }~w tjjyx } zt|d|d }~w tjjtjjfy } zt|d|d }~w tjjy } zt|d|d }~w tjjy } zt|d|d }~ww t|}d|j  krd	k sn t||d
|S )NFr   )r   r   T)r   rA   rg   r@   r   r   allow_redirectsstreamCERTIFICATE_VERIFY_FAILEDrW      i,  )redirect_loop)_get_headers_get_instance_get_cookiejarr   getr~   r   rA   rg   _calculate_timeout_get_proxiesr   r`   TooManyRedirectsr   r$   strr   r"   ConnectionErrorTimeoutr%   r   r    RequestExceptionr#   r<   rB   )r.   r~   r@   max_redirects_exceededr   requests_resrh   r=   r   r   r   _send9  sV   


zRequestsRH._sendr,   )r8   r9   r:   r   _SUPPORTED_URL_SCHEMEStupler   _SUPPORTED_ENCODINGS_SUPPORTED_PROXY_SCHEMESr   NO_PROXY	ALL_PROXY_SUPPORTED_FEATURESRH_NAMEr/   r_   r   r   r   r   rj   r   r   rH   r   r      s    
r   c                 C  s   dS )Nd   r   )rhr~   r   r   r   requests_preferencen  s   r   c                      s$   e Zd Z fddZdd Z  ZS )SocksHTTPConnectionc                   s   || _ t j|i | d S r,   )_proxy_argsrD   r/   )r.   _socks_optionsr6   r7   rH   r   r   r/   u  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	y: } zt
j| d| j d| j d|d }~w tyO } z
t
jt|||d }~w tye } zt
j| d| |d }~ww )Naddrport)addressr   rm   _create_socket_funczConnection to z timed out. (connect timeout=)z&Failed to establish a new connection: )r   r   r   rm   rP   rQ   r   hostr   TimeoutErrorr   r`   ConnectTimeoutErrorSocksProxyErrorr"   r   OSErrorNewConnectionError)r.   rh   r   r   r   	_new_conny  s6   
zSocksHTTPConnection._new_conn)r8   r9   r:   r/   r   rj   r   r   rH   r   r   t  s    r   c                   @  s   e Zd ZdS )SocksHTTPSConnectionN)r8   r9   r:   r   r   r   r   r     s    r   c                   @     e Zd ZeZdS )SocksHTTPConnectionPoolN)r8   r9   r:   r   ConnectionClsr   r   r   r   r         r   c                   @  r   )SocksHTTPSConnectionPoolN)r8   r9   r:   r   r   r   r   r   r   r    r  r  c                      s   e Zd Zd fdd	Z  ZS )SocksProxyManagerN
   c                   s2   t ||d< t j||fi | ttd| _d S )Nr   r   )r   rD   r/   r   r  pool_classes_by_scheme)r.   socks_proxyusernamepassword	num_poolsr@   connection_pool_kwrH   r   r   r/     s
   zSocksProxyManager.__init__)NNr  N)r8   r9   r:   r/   rj   r   r   rH   r   r    s    r  )X
__future__r   rP   http.clientrZ   r   r-   warningsdependenciesr   r   r   utilsr   r   r	   utils.networkingr
   r   ImportErrorr   __version__spliturllib3_version_yt_dlp__version	__build__requests.adaptersrequests.utilsurllib3.connectionurllib3.exceptionsurllib3.util_helperr   r   r   r   r   r   commonr   r   r   r   r   r`   r   r    r!   r"   r#   r$   r%   rr   r   r   appendr)   urllib3.util.urlr   rz   rA   r;   warnr   r<   HTTPAdapterrk   sessionsSessionr   Filterr   Handlerr   r   r   r   r   r   HTTPSConnectionr   HTTPConnectionPoolr   HTTPSConnectionPoolr  PoolManagerr  SOCKSProxyManagerr   r   r   r   <module>   sn    
 $	
."u
